HowTo build Signal Desktop on OpenSuse/Fedora/CentOS

Signal Logo

I use, among others, the Signal App as messenger. Of course, I also want to use the advantages of running a client also on my OpenSuse-based Laptop.

Sadly, Open Whisper Systems does only provide packages for Ubuntu-based systems…so I need to build it by myself.

Following the build instructions for developers, the build will fail due to some incompatibilities in the dependencies (see e.g. here).

Due to permanent updates of the app, I’ve to rebuild it once in a while…and here is how:

1. Check out a recent version

git clone https://github.com/signalapp/Signal-Desktop.git
cd Signal-Desktop
git tag   # find a recent version (beta or not, as you prefer)
git checkout <version>

2. Follow the initial build instructions

npm install --global yarn      # (only if you don’t already have `yarn`)
yarn install --frozen-lockfile # Install and build dependencies (this will take a while)
yarn grunt                     # Generate final JS and CSS assets
yarn icon-gen                  # Generate full set of icons for Electron
yarn build:webpack             # Build parts of the app that use webpack (Sticker Creator)

3. Update manually some linking instructions

This was figured out by the Team of this repo and please find more details here. We must ensure that the sqlite3 library is linked dynamically:

# in the Signal-Desktop directory
$ vim node_modules/@journeyapps/sqlcipher/deps/sqlite3.gyp
# and then: 
@@ -64,16 +64,14 @@
         },
         'link_settings': {
           'libraries': [
-            # This statically links libcrypto, whereas -lcrypto would dynamically link it
-            '<(SHARED_INTERMEDIATE_DIR)/sqlcipher-amalgamation-<@(sqlite_version)/OpenSSL-macOS/libcrypto.a'
+            '-lcrypto'
           ]
         }
       },
       { # Linux
         'link_settings': {
           'libraries': [
-            # This statically links libcrypto, whereas -lcrypto would dynamically link it
-            '<(SHARED_INTERMEDIATE_DIR)/sqlcipher-amalgamation-<@(sqlite_version)/OpenSSL-Linux/libcrypto.a'
+            '-lcrypto'
           ]
         }
       }]
@@ -140,8 +138,7 @@
         { # linux
           'include_dirs': [
             '<(SHARED_INTERMEDIATE_DIR)/sqlcipher-amalgamation-<@(sqlite_version)/',
-            '<(SHARED_INTERMEDIATE_DIR)/sqlcipher-amalgamation-<@(sqlite_version)/openssl-include/'
           ]
         }]
       ],

3. Build the binary

$ export SIGNAL_ENV=production
$ yarn --verbose build-release --linux

Afterwards, the binary is in Signal-Desktop/release/linux-unpacked/signal-desktop.

You may want to create a symlink:

sudo ln -s /path/to/Signal-Desktop/release/linux-unpacked/signal-desktop /usr/local/bin/signal-desktop
You have another opinion?
Great! Then let's reduce the fallacy together!


Why are there no comments?