# cat << EOF >> /etc/pacman.conf
[arch-openrc]
SigLevel=Never
Server=http://downloads.sourceforge.net/project/archopenrc/\$repo/\$arch
Server=ftp://ftp.heanet.ie/mirrors/sourceforge/a/ar/archopenrc/\$repo/\$arch
Server=http://archbang.org/archopenrc/\$repo/\$arch
[arch-nosystemd]
SigLevel=Never
Server=http://downloads.sourceforge.net/project/archopenrc/\$repo/\$arch
Server=ftp://ftp.heanet.ie/mirrors/sourceforge/a/ar/archopenrc/\$repo/\$arch
Server=http://archbang.org/archopenrc/\$repo/\$arch
EOF
The 'SigLevel=Never' directives are only required for the new repositories and only until the openrc-keyring is installed.
# pacman -Syy openrc-keyring openrc-mirrorlist
# pacman-key --populate openrc
You can now remove the [arch-openrc] and [arch-nosystemd] sections and use our mirrorlist:
# sed -e :a -e '$d;N;2,11ba' -e 'P;D' -i /etc/pacman.conf # remove the last 11 previously added lines
# pacman -Sw repo-openrc
# pacman -Udd /var/cache/pacman/pkg/repo-openrc-*.any.pkg.tar.xz # this workaround is needed due to systemd-conflicting deps
# cat << EOF >> /etc/pacman.conf
[openrc-eudev]
SigLevel=PackageOptional
Server=http://downloads.sourceforge.net/project/archopenrc/\$repo/\$arch
Server=ftp://ftp.heanet.ie/mirrors/sourceforge/a/ar/archopenrc/\$repo/\$arch
EOF
2. Save a list of your running daemons.
# systemctl list-units --state=running | grep -v systemd | awk '{print $1}' | grep service > daemon.list
3. Refresh the package database once more to update [openrc-eudev]. Then you can list the repos packages with 'pacman -Sl # pacman -Sy
# pacman -Sl arch-openrc arch-nosystemd
# pacman -Sw sysvinit openrc eudev udev-openrc eudev-systemd libeudev-systemd dbus-openrc dbus-nosystemd procps-ng-nosystemd syslog-ng-nosystemd
4. Remove systemd and family (answer 'yes' to all pacman questions below). If you do this you MUST also complete step 5, otherwise you're left without init system. If you're doing this remotely (e.g. through ssh), please keep another ssh session open, just in case the first one freezes (has happened to me once).
# pacman -Rdd systemd libsystemd
5. Install openrc and family (eudev-systemd provides systemd and libsystemd dependencies for packages that are linked against libsystemd).
# pacman -S sysvinit openrc eudev udev-openrc eudev-systemd libeudev-systemd
Under no circumstances proceed to reboot without having successfully completed steps 4 and 5; if you encounter errors, re-read the instructions carefully. They're proven time and again. If you still can't make it work, follow the "Revert to systemd" instructions at the bottom of this page and ask for help, here or at the IRC.
Normally however, steps 4 and 5 complete without error and your system is ready to boot with init/OpenRC.
Still, it's recommended to install some additional packages and perform some configuration before rebooting.
6. Additional necessary packages:
* procps-ng-nosystemd because procps-ng's binaries are hardlinked to libsystemd and won't work.
* dbus-openrc because, well, dbus.
* netirc for a network configuration backend (networkmanager-openrc and connman-openrc are also available)
* util-linux-nosystemd because an upstream util-linux binary I don't remember depended on some systemd-cruft.
# pacman -S --needed dbus-openrc procps-ng-nosystemd netifrc
7. Install the openrc scripts for your daemons from step 2 (edit for your setup). This will also install the respective daemons' packages, if missing.
# pacman -S --needed acpid-openrc alsa-utils-openrc autofs-openrc consolekit consolekit-openrc cgmanager-openrc cronie-openrc dbus-openrc cups-openrc displaymanager-openrc fuse-openrc haveged-openrc hdparm-openrc openssh-openrc samba-openrc syslog-ng-openrc
8. The following steps concern system-wide settings; for desktop configuration we'll elaborate in Configuration. First, enable the necessary daemons.
# for daemon in acpid alsasound autofs dbus consolekit cronie cupsd xdm fuse haveged hdparm smb sshd atd; do rc-update add $daemon default; done
9. Edit /etc/rc.conf to your liking.
If you want to boot into X, edit /etc/conf.d/xdm and replace 'xdm' with your display manager (e.g. 'lxdm' or 'mdm') and enable xdm.
OpenRC reads /etc/conf.d/modules instead of systemd's /etc/modules-load.d/. Read the kernel modules section of the Gentoo wiki if you have a less simple setup or module autoloading doesn't work as expected.
# vi /etc/rc.conf
# vi /etc/conf.d/xdm
# rc-update add xdm default
# vi /etc/conf.d/modules
10. Copy all sysctl settings into /etc/sysctl.conf and edit. Alternatively, install procps-ng-nosystemd, but before creating /etc/sysctl.conf because it's provided by the package.
Save your hostname where OpenRC can find it.
Edit your keyboard, console font and locale settings.
# cat /etc/sysctl.d/*.conf >> /etc/sysctl.conf
# vi /etc/sysctl.conf
# echo "hostname="`hostname` >| /etc/conf.d/hostname
# vi /etc/conf.d/keymaps
# vi /etc/conf.d/consolefont
# vi /etc/locale.conf
11. Edit /etc/conf.d/net, especially if this is a remote box. Assuming the main network interface is eth0, set its IP and default route and make a symlink of /etc/init.d/net.lo -> /etc/init.d/net.eth0 (net.lo is a template and the symlink is mandatory). And make sure you tell OpenRC to start the interface at boot. This needs netifrc to work.
Also, depending on your configuration (i.e. persistent or traditional device naming), your NIC might not have the same name upon reboot with OpenRC; this is fine and easily fixable if you have physical access to your machine, but on remote ones you'd better disable predictable device naming (# ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules). Alternatively, create and enable 2 NIC profiles and see which one gets picked-up. In the codeblock below, net.eth0 and net.enp0s3 are just examples, run 'ls /sys/class/net' to see yours.
# vi /etc/conf.d/net
# cd /etc/init.d
# ln -s net.lo net.eth0 OR ln -s net.lo net.enp0s3
# rc-update add net.eth0 boot OR rc-update add net.enp0s3 boot
12. If you have an LVM setup, you need lvm2-openrc and device-mapper-openrc, otherwise your logical volumes will be inactive after reboot.
# pacman -S lvm2-openrc device-mapper-openrc
# rc-update add lvm boot
# rc-update add device-mapper boot
13. Remove some systemd-only users (optional).
# for user in systemd-journal systemd-journal-gateway systemd-timesync systemd-network systemd-bus-proxy systemd-journal-remote systemd-journal-upload; do userdel $user; done
14. Make sure you remove any 'init=/usr/lib/systemd/systemd' or similar directives in your bootloader config, if any. The linux kernel by default launches /sbin/init. Also, remove any 'x-systemd' directives from /etc/fstab.
# vi /boot/grub/grub.cfg
# vi /etc/fstab
15. Packages for desktop users. Read Configuration for better explanation, this step is here for the sake of completeness.
Make sure that a graphical authentication agent is installed and autostarted on login. Cinnamon, GNOME, KDE, LXDE, LXQt, MATE and Xfce have an authentication agent already. See this section of Polkit if unsure.
Finally, become member of some groups (for suspend/hibernation functionality and for accessing soundcards, removable drives, cd/dvd-roms). Membership in audio group might not be necessary, or even a privilege escalation, depending on your setup; input group might also be redundant; YMMV. If your desktop is MATE or LXQT, you should install upower-pm-utils; otherwise upstream upower works fine.
# pacman -S --needed consolekit polkit-consolekit udisks2-nosystemd desktop-privileges xorg-xwrapper upower|upower-pm-utils
# pacman -S --needed polkit-gnome|polkit-kde|mate-polkit|lxsession|lxqt-policykit # also xfce-polkit-git or polkit-efl-git from the AUR
# usermod -a -G video,audio,input,power,storage,optical,lp,scanner $USER
16. You can now reboot into openrc. However, since systemd's executables are no longer present, this is not possible at this point with the regular commands. Umount all filesystems manually and force remount / read-only. You can also use SysRq; sync filesystems, remount read-only and reboot.
# umount -a
# mount -f / -o remount,ro
# echo s >| /proc/sysrq-trigger
# echo u >| /proc/sysrq-trigger
# echo b >| /proc/sysrq-trigger
17. Enjoy your systemd-free box. Additional configuration may be needed, especially with regards to a window manager or a desktop environment. Read the information and the linked articles in Configuration for more information.
OpenRC 0.13.8 is starting up Arch Linux (x86_64)
* Mounting /proc ... [ ok ]
* Mounting /run ...
* /run/openrc: creating directory
* /run/lock: creating directory
* /run/lock: correcting owner
* Caching service dependencies ...
...
# pacman -Rdd systemd libsystemd systemd-sysvcompat
# pacman -S sysvinit openrc eudev udev-openrc eudev-systemd dbus-openrc procps-ng-nosystemd syslog-ng-nosystemd udisks2-nosystemd consolekit polkit-consolekit upower-pm-utils udisks2-nosystemd desktop-privileges xorg-xwrapper acpid-openrc alsa-utils-openrc autofs-openrc consolekit consolekit-openrc cronie-openrc dbus-openrc cups-openrc displaymanager-openrc fuse-openrc haveged-openrc hdparm-openrc openssh-openrc samba-openrc syslog-ng-openrc avahi-openrc
All you have to do now is to complete configuring your system as shown in the comprehensive steps above and in Configuration.
# pacman -Rs sysvinit openrc eudev udev-openrc eudev-systemd dbus-openrc procps-ng-nosystemd syslog-ng-nosystemd udisks2-nosystemd consolekit polkit-consolekit upower-pm-utils udisks2-nosystemd desktop-privileges xorg-xwrapper acpid-openrc alsa-utils-openrc autofs-openrc consolekit consolekit-openrc cronie-openrc dbus-openrc cups-openrc displaymanager-openrc fuse-openrc haveged-openrc hdparm-openrc openssh-openrc samba-openrc syslog-ng-openrc avahi-openrc
# pacman -S systemd libsystemd systemd-sysvcompat