Running as a daemon#

While you can launch slidge interactively from the command-line, it is recommended to set up a way to launch slidge automatically on startup, i.e., as a daemon.

This page describes how to achieve that with the Debian packages (systemd) or with Containers (using systemd and podman).

Other options (SysV, docker, …) are also possible but not documented here (as usual, contributions are welcome).

Note

In this page we assume that you have fulfilled the basic XMPP server config.

Debian packages (systemd)#

Edit and remove the .example extension for /etc/slidge/conf.d/common.conf and /etc/slidge/superduper.conf.example. Enable and start the service with sudo systemctl enable --now slidge@superduper.service.

Containers#

Container install#

Make sure that podman is installed on your system, e.g. apt install podman (debian, ubuntu…). Container images are available on https://hub.docker.com/u/nicocool84

Let’s launch the container:

podman run --network=host \   # so the xmpp server is available on localhost
  --name=slidge-superduper \  # human-friendly name for the container
  --detach \                  # detach from tty
  docker.io/nicocool84/slidge-superduper:latest \
  --secret=secret \           # secret used to connect, as per the XMPP server config
  --jid=telegram.example.org  # JID of the gateway component, as per the XMPP server config

Congrats, users of your XMPP server can now chat with their buddies on the “Super Duper Chat Network”, yoohoo!

Check the logs via podman logs slidge-superduper

Data persistence#

To keep data persistent between stop/starts (which will inevitably happen during updates), add volumes to your container. By default, all persistent data slidge needs is in /var/lib/slidge inside the container, so use --volume /where/you/want:/var/lib/slidge as a podman run argument.

As a systemd unit#

Note

The following instructions have been tested with debian bullseye. For other distros, they might need to be adapted.

Create a system user named slidge (as root):

adduser --system slidge --home /var/lib/slidge

Give permission for this user to use subuids and subgids (as root, required for podman):

usermod --add-subuids 200000-201000 --add-subgids 200000-201000 slidge

Warning

Check that the 200000-201000 range does not overlap with any other user’s range in /etc/subuid and /etc/subgid

Enable lingering for this user so that its systemd user services start on startup (as root):

loginctl enable-linger $(id -u slidge)

Create slidge conf files, to avoid passing everything as CLI arguments (as root):

mkdir -p /etc/slidge/conf.d/
echo "admins=admin@example.org" > /etc/slidge/conf.d/common.conf
echo "jid=superduper.example.org" > /etc/slidge/conf.d/superduper.conf
echo "secret=a_real_secret" >> /etc/slidge/conf.d/superduper.conf

Temporarily login as the system user (as root):

su slidge --shell /bin/bash

Enable the slidge user to create podman instances (as slidge user):

export XDG_RUNTIME_DIR=/run/user/$(id -u)

Create the podman container (as the slidge user):

podman run --rm --detach \
   --name superduper \                          # friendly name of the container
   --volume /var/lib/slidge:/var/lib/slidge \   # Map directory for persistent data from host to container
   --volume /etc/slidge:/etc/slidge \           # Map config directory from host to container
   --log-driver journald \                      # logs in journalctl
   --label "io.containers.autoupdate=image" \   # auto-update via podman dedicated mechanism
   --network=host \                             # make localhost available
   docker.io/nicocool84/slidge-superduper:latest \
   --config=/etc/slidge/superduper.conf         # specific config file for this gateway.
                                                # Every gateway should have a separate config file located in this
                                                # directory and pointed to using podman.

Create, launch and enable automatic launch of the container as a systemd service (as the slidge user):

mkdir -p ~/.config/systemd/user
podman generate systemd --new --name superduper > $HOME/.config/systemd/user/superduper.service
systemctl --user daemon-reload
systemctl --user enable --now superduper

Logs can be examined with journalctl CONTAINER_NAME=superduper