aboutsummaryrefslogtreecommitdiff
path: root/blog/scli/index.org
diff options
context:
space:
mode:
Diffstat (limited to 'blog/scli/index.org')
-rw-r--r--blog/scli/index.org145
1 files changed, 145 insertions, 0 deletions
diff --git a/blog/scli/index.org b/blog/scli/index.org
new file mode 100644
index 0000000..8b55ac1
--- /dev/null
+++ b/blog/scli/index.org
@@ -0,0 +1,145 @@
+#+title: Installing scli on Alpine Linux (musl)
+#+date: 2023-11-08
+#+description: Learn how to properly configure scli for musl-based systems.
+#+filetags: :linux:
+
+[[https://github.com/isamert/scli][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:
+
+- =openjdk17-jre= - Used as a dependency for the =signal-cli= tool.
+ Version may vary.
+- =signal-cli= - Used as the backbone of the =scli= tool.
+- =findutils= - Replaces the standard Busybox version of =xargs=.
+- =urwid= - A console user interface library for Python.
+- =urwid-readline= - For GNU emacs-like keybinds on the input line.
+- =qrencode= - Displays a QR code in the terminal to link the device
+ using your phone. Not necessary if you're only linking on desktop and
+ can copy/paste the connection URL.
+
+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.
+
+#+begin_src sh
+doas apk add openjdk17-jre findutils qrencode
+#+end_src
+
+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.
+
+#+begin_src sh
+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
+#+end_src
+
+Finally, install the =urwid= packages using the Python packaging
+utility.
+
+#+begin_src sh
+pip3 install urwid urwid-readline
+#+end_src
+
+* Installation
+Now that we have all of the dependencies we need, we can install =scli=.
+Start by simply cloning the repository.
+
+#+begin_src sh
+git clone https://github.com/isamert/scli
+#+end_src
+
+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=.
+
+#+begin_src sh
+cd scli
+nano scli
+#+end_src
+
+Once complete, you can move this program to anywhere on your =$PATH=. I
+chose the following directory.
+
+#+begin_src sh
+doas mv scli /usr/local/bin/scli
+#+end_src
+
+* Initial Setup
+Now that everything is installed, we can login and configure the client.
+Start by generating a connection link.
+
+#+begin_src sh
+signal-cli link -n "YOUR-DEVICE-NICKNAME" | tee >(xargs -L 1 qrencode -t utf8)
+#+end_src
+
+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=.
+
+#+begin_src sh
+signal-cli -u USERNAME receive
+#+end_src
+
+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.
+
+#+begin_src sh
+signal-cli -u USERNAME daemon
+#+end_src
+
+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.
+
+#+begin_src sh
+# 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
+#+end_src
+
+* 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.
+
+#+begin_src sh
+nano ~/.config/sclirc
+#+end_src
+
+#+begin_src conf
+# ~/.config/sclirc
+
+wrap-at = 80
+enable-notifications = true
+#+end_src
+
+That's it! Following this guide, I have a functional =scli= program that
+successfully sends messages to my contacts and myself!