Installing scli on Alpine Linux (musl)

715 words; 4 minute(s)

Table of Contents

scli is a command-line tool that allows you to connect to your Signal messenger account. This program utilizes a two-pane display that shows you chats on the left and the focused conversation on the right.

This guide will show you how to install scli and its dependencies on Alpine Linux, which requires some extra work due to musl.

If you're using a non-musl system, you can likely following the scli README and download the packaged binaries for an easier installation process.

Dependencies

In order to use scli, you need a few dependencies:

Let's start by installing the packages available via Alpine's repositories. Be sure to install the latest version of openjdk. If you run into Java-related issues, uninstall openjdk and install an older version.

doas apk add openjdk17-jre findutils qrencode

Next, let's install signal-cli. Be sure to export the version of signal-cli that you want. I use version 0.12.4 below, but that may be outdated by the time you're reading this.

export VERSION="0.12.4"
wget https://github.com/AsamK/signal-cli/releases/download/v"${VERSION}"/signal-cli-"${VERSION}".tar.gz
doas tar xf signal-cli-"${VERSION}".tar.gz -C /opt
doas ln -sf /opt/signal-cli-${VERSION}"/bin/signal/cli /usr/local/bin

Finally, install the urwid packages using the Python packaging utility.

pip3 install urwid urwid-readline

Installation

Now that we have all of the dependencies we need, we can install scli. Start by simply cloning the repository.

git clone https://github.com/isamert/scli

When I cloned this repository on 2023-11-08, I found a bug in the logic that required a fix. You must edit the scli file and replace the one instance of RLIMIT_OFILE with RLIMIT_NOFILE.

cd scli
nano scli

Once complete, you can move this program to anywhere on your $PATH. I chose the following directory.

doas mv scli /usr/local/bin/scli

Initial Setup

Now that everything is installed, we can login and configure the client. Start by generating a connection link.

signal-cli link -n "YOUR-DEVICE-NICKNAME" | tee >(xargs -L 1 qrencode -t utf8)

This will generate a connection link and related QR code for you to use to link the devices together. Once complete, wait patiently for the connection process to finish.

Once it completes, it will exit and return you to the prompt. From here, you need to perform an initial receive command to start things off. The USERNAME variable should be your phone number, such as +15551237890.

signal-cli -u USERNAME receive

Also be sure to test the daemon to ensure it works properly. If no errors occur, it's working. If you run into errors because you're not running a DBUS session, see my notes below.

signal-cli -u USERNAME daemon

Once the initial reception is complete, you are ready to use scli.

This process will differ depending on your desktop environment (DE). If you are running a DE, you likely have a DBUS session running already and can simply launch the program.

However, if you're like me and running your computer straight on the TTY without a DE, you'll need to start a DBUS session for this program.

# If you're not running a DBUS session yet, you need to start one for scli
dbus-run-session -- scli

# OR - If you're already running a DBUS session, simply run scli
scli

Configuration

Lastly, there are a number of configuration options that you can pass via the command or in the ~/.config/sclirc file. See the Github README for more information on configuration options.

nano ~/.config/sclirc
# ~/.config/sclirc

wrap-at = 80
enable-notifications = true

That's it! Following this guide, I have a functional scli program that successfully sends messages to my contacts and myself!