Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Bootstrapping Arch and initial config

Initial pacstrap

pacman-key --init
pacman-key --populate
pacman -Sy archlinux-keyring
pacstrap -K /mnt/rootfs base linux linux-lts sof-firmware linux-firmware intel-ucode wireless-regdb networkmanager nano man-db man-pages texinfo btrfs-progs dosfstools e2fsprogs openssh gdisk

Initial config

Follow usual manual for initial config, basically:

genfstab -U /mnt >> /mnt/rootfs/etc/fstab
arch-chroot /mnt/rootfs
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
hwclock --systohc

“Savepoint”

In case you break off here, you can continue by booting from the installation medium again and setting up keys etc. (see Booting from the Installation medium), then issue:

cryptsetup open /dev/nvme0n1p3 ArchLinux
mount --mkdir -t btrfs -o defaults,noatime,compress-force=zstd:6,ssd /dev/mapper/ArchLinux /mnt/rootfs
mount -t btrfs -o defaults,noatime,compress-force=zstd:6,ssd,subvol=home /dev/mapper/ArchLinux /mnt/rootfs/home
mount /dev/nvme0n1p1 /mnt/rootfs/efi
mount /dev/nvme0n1p2 /mnt/rootfs/boot
arch-chroot /mnt/rootfs

Set up locales

In /etc/locale.gen, uncomment

en_US.UTF-8 UTF-8
de_DE.UTF-8 UTF-8

Then, run locale-gen.
Finally, in /etc/locale.conf, set:

LANG=de_DE.UTF-8

and in /etc/vconsole.conf, set:

KEYMAP=de-latin1

Prepare the network setup

Edit /etc/hostname, set:

myhostname-i-have-though-about

Then, enable NetworkManager:

systemctl enable NetworkManager

In case you need eduroam, remember to install python-dbus so the CAT tool works:

pacman -S python-dbus

For IPv6 with working DNS with most home routers, you may need:

pacman -S avahi-daemon
systemctl enable avahi-daemon

You may want to enable privacy extensions by creating /etc/sysctl.d/ipv6-priv.conf with content (adapt to interface names!):

# Enable ipv6 privacy extensions
net.ipv6.conf.wlp0s20f3.use_tempaddr = 2
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2

You might also want to install dhcpcd:

pacman -S dhcpcd

and tell NetworkManager to use it instead of it’s integrated implementation by adding these lines to /etc/NetworkManager/NetworkManager.conf:

[main]
dhcp=dhcpcd

Set up initrd

Edit /etc/mkinitcpio.conf, ensure sd-encrypt is added:

HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block sd-encrypt filesystems fsck)

Run mkinitcpio -P.

Set root password

passwd

Add refind_linux.conf for boot configuration

Create the file /boot/refind_linux.conf with content:

"Boot with standard options no EHT"     "zswap.enabled=0 splash rw iwlwifi.disable_11be=1"
"Boot with standard options"            "zswap.enabled=0 splash rw"
"Boot without plymouth"                 "zswap.enabled=0 plymouth.enable=0 disablehooks=plymouth rw"
"Boot to terminal"                      "zswap.enabled=0 rw systemd.unit=multi-user.target"
"Boot with full UUIDs"                  "rd.luks.name=9f26906e-7603-4735-91e4-81f412f089cc=ArchLinux root=/dev/mapper/ArchLinux zswap.enabled=0 rw"
"Boot to single user mode"              "zswap.enabled=0 splash ro single"
"Boot with minimal options"             "ro"

Note the special iwlwifi setting is due to problems with EHT/MLO support in case of my hardware, the UUID of course needs to be adapted, and zswap is turned off since we are using zram which will be set up later.

Test booting

At this point, refind is not installed yet. As outlined in Booting from the Installation medium, we’ll now use a rEFInd boot loader from an external medium, e.g. a Ventoy boot stick. You should be able to boot with that by now.

This should work fine, if yes, you are ready to continue to the next stage!