Files
euri-iso/docs/openrc.md
T
c-ludenberg 05ae4f25cc feat: switch default init from OpenRC to Dinit
All approaches to keep OpenRC as default failed:
  - --ignore: pacman ignores it during fresh install provider resolution
  - --assume-installed=init-logind: ALPM doesn't check assume-installed for virtual providers
  - --ask=12: infinite loop (pacman re-adds elogind-dinit after each removal)
  - dummy package in custom repo: init-rc conflict hits via different path

Dinit works because pacman --noconfirm naturally picks elogind-dinit
(alphabetically before elogind-openrc), pulling dinit-rc which has no
conflict. All inits (OpenRC, Runit, S6) remain selectable in the
online installer.

Changes:
  - buildiso: INITSYS='dinit', remove --assume-installed/--ask hacks
  - basestrap/main.py, packages/main.py: remove same hacks
  - profile.yaml: antergos-live-dinit for dinit, move openrc pkg to init-specific
  - packagechooser.conf (x2): default=Dinit, Dinit first in item list
  - packagechooser_dm.conf: *-dinit instead of *-openrc
  - README.md, README.pl.md, docs/*: update all OpenRC-first references
  - AGENTS.md: document dinit as default
2026-07-06 19:42:27 +02:00

99 lines
4.1 KiB
Markdown

---
title: OpenRC
layout: default
parent: Init Systems
nav_order: 1
---
# OpenRC
**OpenRC** is one of four init systems available in Antergos NeXT (the default is **Dinit**). It's used by Gentoo, Artix Linux, Devuan, Alpine Linux, and other non-systemd distros. It's proven, well-maintained, and about as simple as an init system can get while still being feature-rich.
## systemd vs OpenRC at a glance
| | systemd | OpenRC |
|---|---|---|
| Philosophy | "One tool to rule them all" | "Do one thing well (Unix way)" |
| Logs | `journalctl` (binary logs) | Plain text files in `/var/log/` |
| Service mgmt | `systemctl start/stop/enable` | `rc-service start/stop`, `rc-update add/del` |
| Dependency | Parallel + automatic | Manual or explicit `need/use/before/after` |
| Config files | `.service` units (INI-like) | Shell scripts in `/etc/init.d/` |
| Size | ~80+ binaries, 500k+ lines | ~15 binaries, ~30k lines |
| Scope | PID 1 + logind + resolved + timedated + networkd + ... | Just PID 1 |
OpenRC is used by Gentoo, Artix Linux, Devuan, Alpine Linux, and other non-systemd distros. It's not as mainstream as systemd, but it's proven and well-maintained.
## What changes for you as a user?
### Service management
| Task | systemd | OpenRC |
|------|---------|--------|
| Start a service | `sudo systemctl start sshd` | `sudo rc-service sshd start` |
| Stop a service | `sudo systemctl stop sshd` | `sudo rc-service sshd stop` |
| Enable at boot | `sudo systemctl enable sshd` | `sudo rc-update add sshd` |
| Disable at boot | `sudo systemctl disable sshd` | `sudo rc-update del sshd` |
| Check status | `systemctl status sshd` | `rc-service sshd status` |
| List enabled | `systemctl list-unit-files --enabled` | `rc-update show` |
| View logs | `journalctl -u sshd` | `less /var/log/messages` |
### Key commands
```bash
# List all services with their runlevel
rc-status
# List enabled services
rc-update show
# Add a service to a runlevel
rc-update add <service> <runlevel>
# Remove a service
rc-update del <service> <runlevel>
# Start/stop/restart a service
rc-service <service> start
rc-service <service> stop
rc-service <service> restart
```
Runlevels in OpenRC work like directories under `/etc/runlevels/`:
```
/etc/runlevels/
├── boot # Low-level system services (filesystems, udev, etc.)
├── sysinit # System initialization (hwclock, hostname, etc.)
├── default # Normal boot services (NetworkManager, sshd, etc.)
└── shutdown # Shutdown services
```
## Why did Antergos NeXT switch?
Three reasons:
1. **systemd grew beyond an init system** — it now owns logind, resolved, timedated, networkd, homed, and more. It's no longer just PID 1. It's a full OS management suite with a scope that keeps expanding.
2. **systemd dropped SysV compatibility** — version 260 (March 2026) removed `systemd-sysv-generator`, `rc-local.service`, and all legacy compatibility code. If your distro isn't 100% systemd-native, it breaks.
3. **systemd's age verification PR** — [#40954](https://github.com/systemd/systemd/pull/40954) (merged Mar 2026) added `birthDate` fields to userdb JSON for age verification compliance. Optional today, precedent tomorrow. We don't want our OS to ask for your age.
OpenRC doesn't do any of that. It starts services and gets out of the way.
## Will things break?
Probably not. Most desktop software doesn't care about the init system. Browsers, editors, games, media players — they all work the same.
Things that **do** care about systemd and won't work:
- `systemctl`, `journalctl`, `loginctl`, `timedatectl` — obviously
- GNOME (it dropped non-systemd support)
- Any `.service` file you try to run directly (they're systemd-native)
But everything you actually use day-to-day? Works fine. And if you need to check logs, they're in `/var/log/messages` — plain text, no `journalctl` required.
## Learning more
- [OpenRC documentation](https://wiki.gentoo.org/wiki/OpenRC)
- [Gentoo Handbook: OpenRC](https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation#OpenRC)
- [Comparison of init systems (Wikipedia)](https://en.wikipedia.org/wiki/Comparison_of_init_systems)