See also Louka's Arch Notes.
Artix Linux is a fork of Arch Linux that allows you to install a different init system. That's mostly it. The packages offered, the base system components (e.g. initramfs generator), and the package manager are the same.
There are some differences in release distribution (for example, they package pre-configured images with desktop environments), and they do shop some additional packages to provide service configurations depending on what init system you want, but the rest is pretty much Arch Linux.
This is a personal cheat sheet for myself with a few explainers.
An init system is something that handles processes and supervises services. It is usually the very first process launched.
Most Linux distributions ship systemd
. It is, essentially, a set of building blocks for a Linux operating system. It implements the boring stuff so distribution designers can focus on configuring the cooler stuff, like userland software, desktop environments, and so on. Examples of services it implements are a session/seat manager (systemd-logind
), a DNS resolver (systemd-resolved
), a system journal (journalctl
), and even a bootloader (systemd-boot
). Of course, it also includes an init system.
Mostly, systemd
is good software. It provides a lot of convenience and works well in most cases. The problem people have with systemd
however is that it does much more than it should. Your init system should simply init the system, and other base services like session/seat management and networking should be left to other components. This wasn't a problem years ago when systemd
only did init stuff, but now it has expanded to fulfill a lot of other missions.
For most Linux distributions, systemd
taking over other components is convenient. Ship one package and there's less decision fatigue as to which other packages to include. However, some Linux power users dislike that you're coerced into using systemd
's solutions when you, for example, only want its init mechanism. For example, you cannot use seatd
and turnstile
for sessions on a systemd
-based Linux operating system because systemd
provides systemd-logind
(and installing both at the same time can result in conflicts).
So, the why of the question can find its answer in if you want choice of your system components. If you don't care, then it doesn't really matter. There are other reasons people cite as to why you shouldn't use systemd
, mainly revolving around the philosophies of its developers and the security issues that impacted systemd
over the past few years, but IMO these are not unique to systemd
.
For me, I don't really care about all the other reasons, but I do like having choice. That said, I did notice that a system not depending on systemd
will usually run better, but that's anecdotal.
Installing Artix is the exact same as installing Arch, with a few key differences. I will enumerate them now.
When bootstrapping your system (using basestrap
instead of pacstrap
), you will have to specify the init system you want. Otherwise, your system will not boot. Here are the packages you should basestrap
, alongside base
and base-devel
, depending on yoir choice of init system:
- OpenRC:
openrc elogind-openrc
- runit:
runit elogind-runit
- S6:
s6-base elogind-s6
- dinit:
dinit elogind-dinit
I personally recommend OpenRC. runit would be my runner-up recommendation.
systemd-boot
is obviously a nonstarter on Artix, even though it is technically possible to get it running using custom repositories and configuration. As that is not the "Artix way", and it is a hassle, you will have to use GRUB.
You can run the following while chrooted into your system to install GRUB.
# Packages necessary to use GRUB.
pacman -S grub efibootmgr
# Installing GRUB.
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub
# (re-)Configuring GRUB.
grub-mkconfig -o /boot/grub/grub.cfg
Usually, the encrypted partition table is specified at /etc/crypttab
, which is the case on Arch Linux. On Artix under OpenRC, /etc/crypttab
is not used (other init systems may use /etc/crypttab
), and instead a different configuration must be provided in /etc/conf.d/dmcrypt
.
For example, this /etc/crypttab
entry for a LUKS-encrypted drive with a passphrase...
storage UUID=6ddca5d7-0a76-4de1-8c41-4c692f0d87c8 none luks
...is translated into this entry inserted into /etc/conf.d/dmcrypt
under OpenRC:
target=storage
source=UUID="6ddca5d7-0a76-4de1-8c41-4c692f0d87c8"
Additional packages and service configuration is also necessary. Mainly, you must make sure that the device mapper runs after dmcrypt
provides decrypted access to your partitions. Under OpenRC, you would do this:
# Install packages.
pacman -S lvm2 lvm2-openrc device-mapper device-mapper-openrc cryptsetup cryptsetup-openrc
# Enable device-mapper at boot runlevel to map the encrypted partitions into device handles.
rc-update add device-mapper boot
# Enable dmcrypt at sysinit runlevel to decrypt the encrypted partitions _before_ device-mapper runs.
rc-update add dmcrypt sysinit
Artix does not mirror all Arch software. This means you may miss out on some packages, e.g. wmenu
. However, since Artix is 95% Arch Linux, you can fix this by manually enabling Arch's Extra repository.
First, install the artix-archlinux-support
package, then retrieve the latest Arch Linux mirrors.
# Install Arch Linux support.
pacman -S artix-archlinux-support
# Update Arch Linux repos.
wget https://archlinux.org/mirrorlist/all/ -O /etc/pacman.d/mirrorlist-arch
Then, add the following in /etc/pacman.conf
, under all the pre-included Artix repos.
[extra]
Include = /etc/pacman.d/mirrorlist-arch
# also, you may want to go into /etc/pacman.d/mirrorlist-arch and enable the mirrors you want.
Finally, run these two commands to populate the Arch Linux keyring and synchronize the repo.
pacman-key --populate archlinux
pacman -Sy
You now have access to Arch Linux's Extra repository. It is also at this point that you can setup yay
(or another AUR helper) if wanted.
Instead of using NetworkManager
and systemd-resolved
, you can use dhcpcd
and dhcpcd-openrc
instead, enabling it with rc-update add dhcpcd boot
. For a more visual configuration experience, you can also install connman
.
wpa_supplicant
or iwd
can be installed for Wi-Fi configuration as usual.
Instead of using a systemd
unit to autostart PipeWire, start it with a script. It'll work just fine. I added these three lines to my labwc
autostart script:
pipewire &
pipewire-pulse &
wireplumber &