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).
In this page we assume that you have fulfilled the basic XMPP server config.
Debian packages (systemd)#
Edit and remove the
.example extension for
Enable and start the service with
sudo systemctl enable --now email@example.com.
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
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,
--volume /where/you/want:/var/lib/slidge as a
podman run argument.
As a systemd unit#
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
Check that the 200000-201000 range does not overlap with any other user’s range
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 "firstname.lastname@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