This is an old revision of the document!
Table of Contents
Start Synchronet BBS from systemd
If you run a modern GNU/Linux distribution, you will likely discover systemd is used as the init system (for starting and control system services/daemons).
In this case, instead of use the old SysV-style /etc/init.d/sbbs.service init script, you use a systemd services unit file:
Create and edit (or download from here) the following file (please correct your ExecStart path and User/Group as you need):
Where is My Service File?
If you are already running Synchronet from systemd but can't remember where the config file is, the following commands will help.
systemctl status
, then when viewing the file type /sbbs
. Note the service name (probably sbbs.service). q
to quit back to the command line.
Use that service name to return the path to the config file. Example: systemctl show -p FragmentPath sbbs.service
Ubuntu 16.04+
/lib/systemd/system/sbbs.service
[Unit] Description=Synchronet BBS service Documentation=man:sbbs After=syslog.target network.target [Service] Type=forking Environment=SBBSROOT=/sbbs SBBSCTRL=/sbbs/ctrl # this stops you running out of files LimitNOFILE=10000 # this enables you to take a good core dump LimitCORE=infinity User=sbbs Group=sbbs PermissionsStartOnly=true ExecStart=/sbbs/exec/sbbs d ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target
Some points in this config:
- After. If you are using syslog with sbbs, so it is nice to put that requirement before systemd tries to launch sbbs.
- Type. If you are to run SBBS in daemonized mode, the main executable will exit after the daemon is called. This could confuse systemd into thinking the process is finished. If you use “Type=forking” you tell systemd that the process you launch will execute another process.
- Environment. In order to avoid having multiple files, you can embed the variables inside the service file.
- User/Group. Remove these if you would like sbbs to start as root and then drop privileges to the User & Group configured in your sbbs.ini. Possibly remove PermissionsStartOnly and ExecStartPre as well, as they would be unnecessary. If you leave these in, ensure the User/Group settings in sbbs.ini are commented out.
- PermissionsStartOnly. This one tells systemd to execute ExecStartPre as root, but ExecStart as the user and group declared in User,Group. Can be removed if you remove the User/Group lines.
- ExecStart. If you don't want to get syslog entries duplicated you will have to run SBBS in daemonized mode, so the “d” parameter is used. Syslog is implicit when daemonized, so there is no need for additional parameters.
- RestartSec. It's advisable to wait some secs before attempting restarting in case of failure, just to give some time for binding release.
Installation instructions:
- Modify the environment variables to match your SBBS setup
- Modify User and Group. If you run this as root you don't need the ExecStartPre line.
- Modify the ExecStart and ExecStartPre paths to match your Synchronet setup.
- Place this file in the correct location. For Ubuntu 16.04 you should place it in /lib/systemd/system
- Enable the service with “systemctl enable sbbs”
- To run the service without restarting “systemctl start sbbs”
Running systemctl status sbbs will show:
● sbbs.service - Synchronet BBS service Loaded: loaded (/lib/systemd/system/sbbs.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2016-12-15 20:20:43 CET; 16s ago Docs: man:sbbs Process: 12364 ExecStart=/sbbs/exec/sbbs d (code=exited, status=0/SUCCESS) Main PID: 12374 (sbbs) Tasks: 11 Memory: 30.1M CPU: 223ms CGroup: /system.slice/sbbs.service └─12374 /sbbs/exec/sbbs d Dec 15 20:23:25 HISPAMSX sbbs[1226]: term Node 1 Telnet ------- [----------] Dec 15 20:23:31 HISPAMSX sbbs[1226]: term Node 1 Terminal not detected, reducing inactivity hang-up timeout to 75 seconds Dec 15 20:23:36 HISPAMSX sbbs[1226]: term Node 1 Unknown User 'Enable' Dec 15 20:24:02 HISPAMSX sbbs[1226]: term Node 1 disconnected Dec 11 20:24:03 HISPAMSX sbbs[1226]: term Node 1 thread terminated (0 node threads remain, 71 clients served)
NOTE:
If you're running any kind of recent (last 2yrs+) systemd, to avoid the use of setcap
to run 'sbbs' as a non-root user, just put this line in the [Service]
section of your sbbs.service
file: AmbientCapabilities=CAP_NET_BIND_SERVICE
Monitoring with Byobu (Tmux backend)
You can have a text mode dashboard for monitoring and configuring your BBS realtime by using Byobu with Tmux or GNU Screen backends. If you are using the Tmux backend. The following configuration splits your screen in three panes: one for SBBS log, other for UMONITOR and a last one for SCFG. Please note that this configuration assumes SBBSCTRL variable is set and that access permissions to the needed files are set for the current user.
Create the file $BYOBU_CONFIG_DIR/windows.tmux.sbbs
with the following contents:
new-session sbbs ; new-window -n sbbs tail -n 50 -f /var/log/sbbs.log ; split-window -h /sbbs/exec/umonitor ; split-window -t 1 -v /sbbs/exec/scfg ; set-option mouse on
And then run: user@localhost:~$ BYOBU_WINDOWS=sbbs byobu
If you want this to be your default environment when you log at your Synchronet server, then write the configuration to the $BYOBU_CONFIG_DIR/windows.tmux
file instead of $BYOBU_CONFIG_DIR/windows.tmux.sbbs
The following screenshot shows the result:
If are using also binkd for FidoNet, this configuration will split the dashboard in 4 panes:
new-session sbbs ; new-window -n sbbs tail -n 50 -f /var/log/sbbs.log ; split-window -p 50 -h /sbbs/exec/umonitor ; split-window -t 0 -p 20 -v tail -f /var/log/binkd.log ; split-window -t 1 -v /sbbs/exec/scfg ; set-option mouse on
Debian & CentOS 7
/etc/default/sbbs
SBBSCTRL=/sbbs/ctrl
/etc/systemd/system/sbbs.service
[Unit] Description=Synchronet BBS Documentation=man:sbbs After=network.target [Service] Restart=on-failure EnvironmentFile=-/etc/default/sbbs ExecStart=/sbbs/exec/sbbs nd ExecReload=/bin/kill -HUP $MAINPID User=root Group=root [Install] WantedBy=multi-user.target
Finally, you must execute systemd daemon-reload for tell systemd to reload the unit file
Test your setup:
# systemctl status sbbs ● sbbs.service - Synchronet BBS Loaded: loaded (/etc/systemd/system/sbbs.service; enabled) Active: active (running) since lun 2016-11-21 14:39:53 ART; 24min ago Docs: man:sbbs Process: 14393 ExecStart=/sbbs/exec/sbbs nd (code=exited, status=0/SUCCESS) Main PID: 14393 (sbbs) CGroup: /system.slice/sbbs.service └─14393 /sbbs/exec/sbbs nd nov 21 14:39:53 scarlet systemd[1]: Started Synchronet BBS.
Debian (alternative using tmux)
You can use Tmux to still the Synchronet BBS console running on a screen that can be attached when you need
/etc/default/sbbs
SBBSCTRL=/sbbs/ctrl
/etc/systemd/system/sbbs.service
[Unit] Description=Synchronet BBS Documentation=man:sbbs After=network.target [Service] Restart=on-failure Type=forking KillMode=none EnvironmentFile=-/etc/default/sbbs ExecStart=/usr/bin/tmux new-session -d -s sbbs '/sbbs/exec/sbbs nd' ExecStop=/usr/bin/tmux send-keys -t sbbs 'q' C-m 'exit' C-m User=root Group=root [Install] WantedBy=multi-user.target
Using tmux, Synchronet start in a session (called sbbs), you can attach to the running console using tmux attach -t sbbs
Recommended Tweaks to the Service Section
Add these to the [Service]
section of your service's config file:
To increase the open file limit:
LimitNOFILE=10000
To allow core file generation (for crash/segfault debugging:
LimitCORE=infinity
See Also
- https://synchronetbbs.org/index.php/downloads - Alternate startup script that uses “screen” rather than tmux and restarts the server if it should crash.