Files
tsunagi/dist/linux/tsunagi.service
T
Aleksandr BogomiakovandClaude c62d29fa14 Arch package: start the service and let the GUI reach the agent
The control socket is now opened to the tsunagi group (unit), the Arch
package enables and starts the service on install, adds the installing user
to the group, restarts a running agent on upgrade, and depends on the
libraries the tray loads at run time. The tray looks for the agent's socket
again on every poll instead of once at start, and a missing indicator
library is reported instead of panicking. Repository URLs unified.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-02 23:29:51 +01:00

39 lines
1.3 KiB
Desktop File

[Unit]
Description=tsunagi mesh agent
Documentation=https://github.com/house-of-vanity/tsunagi
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
# Runs as a dedicated unprivileged user, not root. The two capabilities are all
# it needs: CAP_NET_ADMIN to create and configure the TUN interface, and
# CAP_NET_BIND_SERVICE for low ports. The packages create the `tsunagi` user.
User=tsunagi
Group=tsunagi
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
# systemd creates and owns these for the service user, and the agent is pointed
# at them: state in /var/lib/tsunagi, cache in /var/cache/tsunagi, and the
# control socket in /run/tsunagi. The socket is opened to the `tsunagi` group,
# so a user who joins it can run the CLI and the tray without sudo.
StateDirectory=tsunagi
StateDirectoryMode=0700
CacheDirectory=tsunagi
RuntimeDirectory=tsunagi
RuntimeDirectoryMode=0755
Environment=TSUNAGI_STATE_DIR=%S/tsunagi
Environment=TSUNAGI_CACHE_DIR=%C/tsunagi
Environment=TSUNAGI_CONTROL_SOCKET=%t/tsunagi/agent.sock
Environment=TSUNAGI_CONTROL_GROUP=tsunagi
# The tarball installer puts the binary here; the deb and the Arch package
# rewrite this to /usr/bin where they install it.
ExecStart=/usr/local/bin/tsunagi up
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target