Migrating from LainOS Layer 01 to Layer 02
What changed
Layer 02 is not an upgrade to Layer 01 — it's a ground-up rebuild around a different init architecture. Layer 01 runs systemd. Layer 02 runs Protocol 7: OpenRC as PID 1, with custom daemons replacing the systemd services you relied on. The desktop, the tools, and most of the software are the same. The system underneath them is fundamentally different.
The big differences
No systemd
systemctl does not exist on Layer 02. Everything that was a systemd unit is now an OpenRC service.
| Layer 01 | Layer 02 |
|---|---|
systemctl start foo |
doas rc-service foo start |
systemctl stop foo |
doas rc-service foo stop |
systemctl restart foo |
doas rc-service foo restart |
systemctl status foo |
rc-service foo status |
systemctl enable foo |
doas rc-update add foo default |
systemctl disable foo |
doas rc-update del foo default |
systemctl --failed |
rc-status |
journalctl -u foo |
cat /var/log/everything.log | grep foo |
journalctl -b |
cat /var/log/everything.log |
No sudo — doas
Layer 02 uses doas instead of sudo. The syntax is the same for basic use:
doas pacman -Syu
doas nano /etc/some/file
If you have scripts that call sudo, they will need to be updated to use doas.
No NetworkManager
Layer 02 uses iwd for WiFi. There is no nmcli, no network-manager applet, no nmtui.
Connect to a network:
iwctl
# Inside iwctl:
station wlan0 scan
station wlan0 get-networks
station wlan0 connect "Your Network Name"
exit
Check connection status:
iwctl station wlan0 show
Logs
Layer 02 uses syslog-ng instead of journald. There is no journalctl.
# View all logs
cat /var/log/everything.log
# Follow logs live
tail -f /var/log/everything.log
# Filter by service
grep lainos-dbus-bridge /var/log/everything.log
What's the same
- pacman — package management is identical. All Arch repos are available.
- Sway — same window manager, same keybindings.
- alacritty — same terminal.
- dbus — D-Bus is present and working. Applications that use D-Bus work normally.
- PipeWire — audio works the same way.
- Wayland — same environment.
- AUR — works as normal. Use your preferred AUR helper.
Login screen
Layer 02 uses tuigreet instead of a graphical display manager. At boot you'll see a terminal-style login prompt. Enter your username and password as normal. The session selector (F3) lets you choose your Wayland session if you have more than one installed.
Service runlevels
OpenRC organizes services into runlevels. The ones you'll interact with:
| Runlevel | Purpose | When it runs |
|---|---|---|
sysinit |
Core system init (dbus, cgroups) | Very early boot |
boot |
Early services (logging) | Before default |
default |
Normal services (greetd, iwd, seatd) | Normal boot |
To add a service to a specific runlevel:
doas rc-update add foo default # starts at normal boot
doas rc-update add foo boot # starts earlier
Privilege escalation
doas configuration lives at /etc/doas.conf. The default rule permits all wheel group members:
permit persist :wheel
To run a one-off command as root:
doas command
To open a root shell:
doas -s
Known differences in behavior
Boot messages: OpenRC prints its service start messages directly to the console. You'll see each service listed as it starts. This is normal.
lainos-dbus-bridge: On first boot, lainos-dbus-bridge may show as crashed in rc-status. It recovers automatically. If you need it immediately, run doas rc-service lainos-dbus-bridge restart.
No logind: Layer 02 uses seatd instead of logind for seat management. Applications that query org.freedesktop.login1 over D-Bus are handled by lainos-dbus-bridge. Most applications work transparently. If a specific application fails with a logind-related error, report it.
Getting help
- Project site: lainos.net
- Bug reports: bugs.lainos.net
- GitHub: github.com/The-LainOS-Project