sysvinit isn't Devuan's only option. This episode covers OpenRC with rc-service and rc-update, then runit with sv and runsvdir. You'll also learn when to choose sysvinit, OpenRC, or runit for different needs.

Devuan's init freedom philosophy means you're not stuck with a single init. Episode 6 opens up two sysvinit alternatives: OpenRC, which adds dependency tracking and parallel boot, and runit, which emphasizes per-service supervision. You'll learn to manage services on both and when to choose each.
Why do you need to know more than one? Because each init has different strengths. OpenRC is great for systems that want systemd-style dependency ordering without systemd itself. runit excels at daemons that must stay alive and restart automatically. Understanding all three lets you choose based on need, not just follow the default.
OpenRC still uses runlevels, but adds the concept of dependencies between services: OpenRC ensures a service only starts after the services it needs are active. Additional service configuration can be placed in /etc/conf.d/ — separated from the main script so package updates don't overwrite local settings.
Check the registered services:
rc-service --list
rc-statusThe output of rc-service --list shows all services known to OpenRC. rc-status displays per-runlevel status, complete with boot ordering.
Adding a service to the default runlevel:
sudo rc-update add sshd default
sudo rc-service sshd restart
sudo rc-service sshd statusrc-update add sshd default registers sshd in the default runlevel so it starts at boot. To remove it: sudo rc-update del sshd. Note that OpenRC service names like sshd may differ from the sysvinit script name ssh on Devuan.
Variable settings such as daemon options live in /etc/conf.d/:
cat /etc/conf.d/sshd
echo 'sshd_opts="-D"' | sudo tee -a /etc/conf.d/sshdAfter changing a configuration file, restart the service so the new variables take effect.
runit manages services through runsvdir — a process that supervises a directory of services. Each service is a directory containing a run script that defines how to start the daemon. If the process dies, runsvdir restarts it automatically.
The standard runit layout:
/etc/sv/sshd/
run - script to run the daemon
log/ - (optional) log pipeline
/var/service/ - symlink to active servicesActive services are symlinked from /etc/sv/ to /var/service/.
The sv command controls each service:
sudo ln -s /etc/sv/sshd /var/service/
sudo sv start sshd
sudo sv status sshd
sudo sv restart sshdsv start sshd starts the service if it isn't already running. sv status shows the PID and uptime. Because runsvdir is supervising, a dead service is brought back up automatically — this is runit's main advantage for critical daemons.
The run script is the heart of a runit service:
mkdir -p /etc/sv/myapp
cat > /etc/sv/myapp/run <<'EOF'
#!/bin/sh
exec /usr/local/bin/myapp
EOF
chmod +x /etc/sv/myapp/run
ln -s /etc/sv/myapp /var/service/Replace /usr/local/bin/myapp with your daemon command. Once the symlink is created, runsvdir starts the service immediately and keeps watching it.
No choice is absolutely wrong — it all depends on your needs:
Remember that the init choice is made at installation time or through a migration process. Switching init mid-flight requires extra steps we'll cover in episode 18.
Episode 6 opened up Devuan's two alternative inits: OpenRC with rc-service and rc-update plus dependency tracking, and runit with sv, /etc/sv/, and /var/service/ for per-service supervision. You also learned when to choose sysvinit, OpenRC, or runit.
Key takeaways:
rc-service manages a single service; rc-update sets auto-start./etc/conf.d/.run script.sv controls services; symlinks in /var/service/ activate them.In the next episode, we'll cover user, group, network, and boot — creating users with adduser, the sudo and wheel groups, network configuration through ifupdown and /etc/network/interfaces, and the boot process from GRUB, kernel, init, to fstab.