Choosing an Init System in Artix Linux: OpenRC, runit, or s6 – A Practical Decision Guide
Artix Linux lets you choose an init system. This guide compares OpenRC, runit, and s6 on boot speed, community support, and migration effort, then walks through a safe runit installation and verification process.
30 Jul 2025, 04:44 UTC

Problem
Artix Linux removes systemd and lets you choose an init system. The three mainstream choices – OpenRC, runit, and s6 – differ in boot speed, community support, and maintenance effort. Deciding which one to use requires a clear view of the trade‑offs and a concrete path to switch if you already have a system running.
Decision Context
- Boot performance – How fast you want the machine to become fully usable.
- Community & documentation – Availability of guides, pre‑built packages, and active forums.
- Migration effort – How many services need to be rewritten or re‑enabled.
Compact Comparison Table
| Aspect | OpenRC | runit | s6 |
|---|---|---|---|
| Boot model | Sequential runlevels (run/rc scripts) | Parallel, lightweight supervision (runsvdir) | Parallel, highly configurable trees (s6-svscan) |
| Typical footprint | ~5 MB (depends on packages) | ~2 MB core, small run scripts | ~1 MB core, manual tree setup |
| Service definition | SysV‑style init.d scripts | Directory per service with a run script | Directory per service with a run script and optional finish |
| Community support | Large – many Artix packages ship OpenRC scripts; Arch Wiki has migration guides. | Moderate – upstream docs are solid, Artix examples are fewer. | Limited – upstream docs exist, but Artix community examples are sparse. |
| Migration effort | Low – most packages already contain OpenRC init scripts. | Medium – existing services must be rewritten as runit units. | High – must build supervision trees manually. |
| Removal of previous init | Uninstall OpenRC packages and adjust /etc/inittab. | Ensure runit is PID 1 and no OpenRC processes remain. | Same – ensure s6 is PID 1 and no other init is running. |
Trade‑Off Analysis
Speed vs. Familiarity
Both runit and s6 start services in parallel and have a smaller core than OpenRC, which can reduce boot time. However, their service models differ from the classic SysVinit scripts that many Arch users are comfortable with. If boot speed is paramount and you are willing to write small shell scripts, runit or s6 may be worthwhile.
Community Support vs. Customization
OpenRC enjoys the largest user base within Artix, with many packages already providing init scripts. For users who need maximum control over supervision, s6 offers the most granular model, but requires manual tree construction. Runit sits between the two: lightweight, well‑documented upstream, but fewer Artix‑specific examples.
Maintenance Complexity
OpenRC’s runlevel system is straightforward to maintain. Service scripts are simple shell scripts that can be edited directly. Runit requires a run script per service; a missing shebang or wrong file name will stop the service. S6 demands a supervision tree – adding a new service typically means creating a new directory and linking it into the tree.
Concrete Implementation: Switching to runit
Prerequisites
- Back up
/etc/inittaband any OpenRC configuration files. - Ensure you have
sudoprivileges and a working network. - Confirm that no OpenRC processes are running before making changes (boot into a rescue shell if unsure).
Step 1 – Install runit
sudo pacman -S runit
The runit package installs the core supervisor (runsvdir) and the init binary (runit-init). No other init packages should be present to avoid conflicts.
Step 2 – Edit /etc/inittab
Artix’s default /etc/inittab for OpenRC contains:
id:5:initdefault:
Replace that line with:
id:1:initdefault:
Run id:1:initdefault: tells Artix to start the init process with ID 1, which will be runit-init. Do not leave the original line in place, or OpenRC will start instead of runit.
Step 3 – Rebuild the initramfs
Artix uses mkinitcpio to generate the initramfs image. After editing /etc/inittab, rebuild it so the new init binary is included:
sudo mkinitcpio -P
Failing to rebuild may leave the old init in the initramfs, causing the system to boot with OpenRC.
Step 4 – Update the bootloader (if necessary)
Most Artix installations automatically use the init binary from the initramfs. If you use GRUB and see a boot entry that explicitly sets init=/usr/lib/systemd/systemd, edit it to:
init=/usr/lib/runit/init
On systemd‑boot, the loader.conf entry should use init=/usr/lib/runit/init as well.
Step 5 – Reboot and Verify PID 1
sudo reboot
After the system restarts, confirm that runit is running as PID 1:
ps -p 1 -o comm=
# Expected output: runit-init or runsvdir (depends on version)
If the output shows init, systemd, or another name, double‑check /etc/inittab, the initramfs rebuild, and the bootloader configuration.
Step 6 – Remove OpenRC Packages (optional)
To avoid conflicts, uninstall OpenRC packages that are no longer needed. Be cautious: some packages depend on openrc-sysvinit for their own init scripts. Use:
sudo pacman -Rns openrc openrc-sysvinit
After removal, run pacman -Qdt to list orphaned packages and clean them if desired.
Step 7 – Enable a Test Service (sshd)
- Create the service directory:
- Write the
runscript. Replace/usr/sbin/sshdwith the path to your SSH daemon if it differs: - Make the script executable:
- Link the service into the runit service directory (default
/etc/service): - Start the service:
- Check status:
sudo mkdir -p /etc/sv/sshd
sudo tee /etc/sv/sshd/run <<'EOF'
#!/usr/bin/env sh
exec /usr/sbin/sshd -D
EOF
sudo chmod +x /etc/sv/sshd/run
sudo ln -s /etc/sv/sshd /etc/service/sshd
sudo sv up sshd
sudo sv status sshd
# Expected output: "up 1" or similar
Step 8 – List All Active Services
sudo sv status /etc/service/*
Each line shows the service name and its state (e.g., up, down, or startup).
Limitations & Practical Checks
- Changing the init system is a critical operation; test on a non‑critical machine first.
- Never leave the original OpenRC
id:5:initdefault:line in/etc/inittabafter switching to runit. - Service scripts must be executable and contain a valid shebang (e.g.,
#!/usr/bin/env sh). - If you need to revert, reinstall OpenRC and restore the original
/etc/inittabline. - Documentation for s6 in Artix is sparse; if you choose s6, prepare to consult the upstream s6 docs.
When to Choose Which Init System
- OpenRC – Best for users who want the largest community support and minimal migration effort. Suitable for servers or desktops where boot speed is not the primary concern.
- runit – Good balance between speed and maintainability. Choose if you are comfortable writing small service scripts and want a lightweight core.
- s6 – Ideal for users who need maximum control over supervision and are willing to invest time in building supervision trees. Use when the smallest footprint is critical.
Takeaway
Switching init systems in Artix is straightforward but requires careful editing of /etc/inittab, rebuilding the initramfs, and verifying that PID 1 is the chosen init binary. OpenRC offers the largest community and easiest migration, runit provides a lightweight, parallel start‑up model, and s6 delivers the most granular supervision at the cost of manual configuration. Pick the one that best aligns with your performance goals, comfort with service scripts, and support expectations.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.