luminoso / fedora-copr-signal-desktop

https://copr.fedorainfracloud.org/coprs/luminoso/Signal-Desktop/
19 stars 5 forks source link

Signal-Desktop never leaves the "loading" screen with the 3 animated dots when running on CentOS 7 -- missing dependencies again #5

Closed dtrash1 closed 3 years ago

dtrash1 commented 4 years ago

Bug Description

Signal-Desktop never leaves the "loading" screen with the 3 animated dots when running on CentOS 7.

An error is printed indicating a failure to load GLIBCXX_3.4.21. My CentOS 7 seems to use GLIBCXX_3.4.19.

If this dependency issue is like the previous (issue #3 ), the problem may be that the included RingRTC module isn't built to run on CentOS 7.

This bug appears to be present in versions after 1.35.1. Last known working version is 1.34.5.

Steps to Reproduce

  1. Starting with (at least v1.35.1) at the bash command line:
    $ signal-desktop
  2. Wait indefinitely at the "loading" screen.

Actual Result:

Signal-Desktop never leaves the "loading" screen with the 3 animated dots.

Expected Result:

Signal-Desktop starts up normally, loading messages followed by a switch to the messaging UI.

Screenshots

N/A

Platform Info

Signal Version:

Reproduced with 1.35.1, 1.36.2, 1.36.3

Operating System:

CentOS Linux release 7.8.2003 (Core)

Linked Device Version:

Android: Signal 4.71.5

Link to Debug Log

The "View"->"Debug Log" menu item is unresponsive, however, the console shows the following (from 1.36.3, specifically):

Set Windows Application User Model ID (AUMID) { appUserModelId: 'org.whispersystems.signal-desktop' }
NODE_ENV production
NODE_CONFIG_DIR /usr/lib64/signal-desktop/resources/app.asar/config
NODE_CONFIG {}
ALLOW_CONFIG_MUTATIONS undefined
HOSTNAME undefined
NODE_APP_INSTANCE undefined
SUPPRESS_NO_CONFIG_WARNING undefined
SIGNAL_ENABLE_HTTP undefined
userData: /home/user/.config/Signal
config/get: Successfully read user config file
x-attr dependncy did not load successfully
config/get: Successfully read ephemeral config file
making app single instance
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"app ready","time":"2020-09-28T19:32:28.602Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"starting version 1.36.3","time":"2020-09-28T19:32:28.602Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"updateSchema:\n  Current user_version: 21;\n  Most recent db schema: 21;\n  SQLite version: 3.30.1;\n  SQLCipher version: 4.3.0 community;\n  (deprecated) schema_version: 77;\n","time":"2020-09-28T19:32:28.613Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"Initializing BrowserWindow config: {\"show\":true,\"width\":804,\"height\":614,\"minWidth\":680,\"minHeight\":550,\"autoHideMenuBar\":false,\"backgroundColor\":\"#3a76f0\",\"webPreferences\":{\"nodeIntegration\":false,\"nodeIntegrationInWorker\":false,\"contextIsolation\":false,\"preload\":\"/usr/lib64/signal-desktop/resources/app.asar/preload.js\",\"nativeWindowOpen\":true,\"spellcheck\":true,\"backgroundThrottling\":false},\"icon\":\"/usr/lib64/signal-desktop/resources/app.asar/images/signal-logo-desktop-linux.png\",\"x\":482,\"y\":380}","time":"2020-09-28T19:32:28.619Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"spellcheck: user locale: en-US","time":"2020-09-28T19:32:28.682Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"spellcheck: available spellchecker languages:  [\"af\",\"bg\",\"ca\",\"cs\",\"cy\",\"da\",\"de\",\"el\",\"en-AU\",\"en-CA\",\"en-GB\",\"en-US\",\"es\",\"es-419\",\"es-AR\",\"es-ES\",\"es-MX\",\"es-US\",\"et\",\"fa\",\"fo\",\"fr\",\"he\",\"hi\",\"hr\",\"hu\",\"hy\",\"id\",\"it\",\"ko\",\"lt\",\"lv\",\"nb\",\"nl\",\"pl\",\"pt-BR\",\"pt-PT\",\"ro\",\"ru\",\"sh\",\"sk\",\"sl\",\"sq\",\"sr\",\"sv\",\"ta\",\"tg\",\"tr\",\"uk\",\"vi\"]","time":"2020-09-28T19:32:28.682Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"spellcheck: setting languages to:  [\"en-US\"]","time":"2020-09-28T19:32:28.682Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"Begin ensuring permissions","time":"2020-09-28T19:32:28.701Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"Ensuring file permissions for 2 files","time":"2020-09-28T19:32:28.704Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"Finish ensuring permissions in 4ms","time":"2020-09-28T19:32:28.705Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":50,"msg":"Preload error in [REDACTED]/app.asar/preload.js:  /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by [REDACTED]/app.asar.unpacked/node_modules/ringrtc/build/linux/libringrtc.node)","time":"2020-09-28T19:32:29.191Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"Updating BrowserWindow config: {\"maximized\":false,\"autoHideMenuBar\":false,\"fullscreen\":false,\"width\":804,\"height\":614,\"x\":482,\"y\":417}","time":"2020-09-28T19:32:29.209Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"msg":"config/set: Saving ephemeral config to disk","time":"2020-09-28T19:32:29.210Z","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":30,"time":"2020-09-28T19:32:29.314Z","msg":"pre-main prep time: 1 ms","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":50,"time":"2020-09-28T19:32:29.345Z","msg":"Top-level unhandled error: TypeError: Cannot read property 'Util' of undefined\n    at new SignalProtocolStore (file://[REDACTED]/app.asar/js/signal_protocol_store.js:164:47)\n    at file://[REDACTED]/app.asar/js/libtextsecure.js:25288:33\n    at file://[REDACTED]/app.asar/js/libtextsecure.js:25293:3\n    at file://[REDACTED]/app.asar/js/libtextsecure.js:25457:3","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":50,"time":"2020-09-28T19:32:29.351Z","msg":"Top-level unhandled error: ReferenceError: Signal is not defined\n    at file://[REDACTED]/app.asar/js/models/messages.js:28:7\n    at file://[REDACTED]/app.asar/js/models/messages.js:3159:3","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":50,"time":"2020-09-28T19:32:29.357Z","msg":"Top-level unhandled error: TypeError: Cannot destructure property 'Services' of 'window.Signal' as it is undefined.\n    at file://[REDACTED]/app.asar/js/models/conversations.js:28:11\n    at file://[REDACTED]/app.asar/js/models/conversations.js:3404:3","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":50,"time":"2020-09-28T19:32:29.366Z","msg":"Top-level unhandled error: TypeError: Cannot read property 'Types' of undefined\n    at file://[REDACTED]/app.asar/js/views/conversation_view.js:20:61\n    at file://[REDACTED]/app.asar/js/views/conversation_view.js:3297:3","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":50,"time":"2020-09-28T19:32:29.366Z","msg":"Top-level unhandled error: ReferenceError: i18n is not defined\n    at file://[REDACTED]/app.asar/js/views/inbox_view.js:69:16\n    at file://[REDACTED]/app.asar/js/views/inbox_view.js:229:3","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":50,"time":"2020-09-28T19:32:29.368Z","msg":"Top-level unhandled error: TypeError: Cannot destructure property 'Logs' of 'window.Signal' as it is undefined.\n    at file://[REDACTED]/app.asar/js/views/clear_data_view.js:9:11\n    at file://[REDACTED]/app.asar/js/views/clear_data_view.js:65:3","v":0}
{"name":"log","hostname":"COMPUTERNAME","pid":20024,"level":50,"time":"2020-09-28T19:32:29.375Z","msg":"Top-level unhandled promise rejection: TypeError: Cannot read property 'Util' of undefined\n    at file://[REDACTED]/app.asar/js/background.js:26:50\n    at file://[REDACTED]/app.asar/js/background.js:3242:3","v":0}
luminoso commented 4 years ago

Thank you for reporting. I'll spin up a virtual machine to check this out.

I guess I have to find a way to automatically detect these cases

luminoso commented 3 years ago

Well.. I've spent some time trying to debug this.

The problem is the same: signal-desktop packaging source includes pre-built binaries. These binaries are built with a newer GLIBC version, namely GLIBCXX_3.4.21 CentOS 7 is older than the GLIBC version required by the pre-built binaries shipped with signal.

This already happened with zkgroup (issue #3 ) The solution was building zkgroup from source when building Signal-Desktop and then replace the shipped binary with the one built when creating the package.

The problem is that when we try to do the same trick with RingRTC is too much effort. I can do it in my machine, but it fails when using the Copr buildsystem for some reason.

One of the possible causes is that the RingRTC source/build folders require 20GB free space. Probably it is too much pressure for a free service like Copr.

One alternative I can think of is to try their flatpak release.

Since I cannot guarantee new releases for CentOS 7 anymore I'm removing CentOS 7 from the copr project. This way I can also remove zkgroup el7 conditional building from the spec file.

I've added signal-ringrtc-zkgroup-el7.spec to this git if someone wants to pick up from there.

dtrash1 commented 3 years ago

Thanks for spending the time to look at this. It's not difficult to believe that copr can't or doesn't want to support builds that absorb so many resources.

It looks like your flatpak suggestion will work for me, so thanks for that, too.

On Wed, Dec 9, 2020 at 8:33 AM Guilherme Cardoso notifications@github.com wrote:

Well.. I've spent some time trying to debug this.

The problem is the same: signal-desktop packaging source includes pre-built binaries. These binaries are built with a newer GLIBC version, namely GLIBCXX_3.4.21 CentOS 7 is older than the GLIBC version required by the pre-built binaries shipped with signal.

This already happened with zkgroup (issue #3 https://github.com/luminoso/fedora-copr-signal-desktop/issues/3 ) The solution was building zkgroup from source when building Signal-Desktop and then replace the shipped binary with the one built when also building the rest of the signal-desktop source code.

The problem now doing the same and building RingRTC https://github.com/signalapp/ringrtc is too much effort. I can build it in my machine, but I can't identify when building using the rpmspec it fails.

The RingRTC source/build folders also require 20GB free space.

I advise you to try to find a solution, their flatpak release https://flathub.org/apps/details/org.signal.Signal can be a possible solution

So I'm removing CentOS 7 from this copr repo. This way I can also stop remove zkgroup el7 conditional building from the spec file.

I've added signal-ringrtc-zkgroup-el7.spec to the repo if someone wants to pick up from there.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/luminoso/fedora-copr-signal-desktop/issues/5#issuecomment-741810381, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABNEEBPO4V4GAU6UT3P5EMDST6DDRANCNFSM4R447ZUA .

TuxyKey commented 3 years ago

Just wanted to thank you for copr repo.. was looking for a way to install signal on fedora 33. just moved to it from OSX.. and did not want to use snaps.. did find a diff repo but that one had version 1.8.0... and did not sync contacts.. i was so happy there was a better option.. So thank you for doing this for everyone ;-)

ykne commented 3 years ago

Well.. I've spent some time trying to debug this. The solution was building zkgroup from source when building Signal-Desktop and then replace the shipped binary with the one built when creating the package.

I've added signal-ringrtc-zkgroup-el7.spec to this git if someone wants to pick up from there.

Would you mind posting instructions for building el7 package? I can't use flatpack on my particular system. Another thought - disable RingRTC, is it possible?

luminoso commented 3 years ago

Latest working el7 package is also in this repo here: https://github.com/luminoso/fedora-copr-signal-desktop/blob/master/signal-ringrtc-zkgroup-el7.spec

It demos the strategy of building external dependencies for zkgroup. You'll need to use the same strategy for ringrtc.

I tried it, but RingRTC implies building WebRTC if I'm not mistaken.