Arch Linux on Raspberry Pi 5

If you already have Raspberry Pi OS running on an SD card and you want to switch to Arch Linux ARM booting from an NVMe drive with the linux-rpi-16k kernel, this post is for you.

Activate NVMe

Run lsblk. Does it show the NVMe device /dev/nvme0n1? If not, we need to append this to /boot/firmware/config.txt at the end:

dtparam=nvme
dtparam=pciex1_gen=3

Changes in config.txt need to be followed up by a reboot to see the changes.

Wipe the NVMe SSD

Make sure you don't have any important data remaining on your SSD.

sudo umount /dev/nvme0n1p?
sudo wipefs --all --force /dev/nvme0n1p?
sudo wipefs --all --force /dev/nvme0n1
sudo dd if=/dev/zero of=/dev/nvme0n1 bs=1024 count=1

Clone the boot volume to your NVMe SSD

git clone https://github.com/geerlingguy/rpi-clone.git
cd rpi-clone
sudo cp rpi-clone rpi-clone-setup /usr/local/sbin
sudo rpi-clone nvme0n1

You could now boot from your NVMe SSD if all you need is Raspberry Pi OS. This is a good timing to check if your NVMe drive works at all. Otherwise, continue to download Arch Linux ARM.

Clear both partitions

sudo mount /dev/nvme0n1p2 --mkdir /nvme
sudo rm -rf /nvme/*
sudo mount /dev/nvme0n1p1 --mkdir /nvme/boot
sudo rm -rf /nvme/boot/*

Install Arch Linux

wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz
sudo apt install libarchive-tools
sudo bsdtar -xpf ArchLinuxARM-rpi-aarch64-latest.tar.gz -C /nvme/

Install linux-rpi-16k

For the following kernel download, change the URL to the latest version.

wget http://mirror.archlinuxarm.org/aarch64/core/linux-rpi-16k-6.6.23-1-aarch64.pkg.tar.xz
sudo rm -rf /nvme/boot/*
sudo tar xf linux-rpi-16k-6.6.23-1-aarch64.pkg.tar.xz -C /nvme/boot/

Update /etc/fstab

Get the PARTUUID from running blkid and edit your /nvme/etc/fstab accordingly:

PARTUUID=0b322c87-01  /boot   vfat    defaults          0  2
PARTUUID-0b322c87-02  /       ext4    defaults,noatime  0  1

Activate NVMe boot again

Add this to the end of /nvme/boot/config.txt:

dtparam=nvme
dtparam=pciex1_gen=3

Update root device

Edit the root parameter in /nvme/boot/cmdline.txt:

root=/dev/nvme0n1p2 rw rootwait console=serial0,115200 console=tty1 fsck.repair=yes

Unmount

sync
sudo umount -R /nvme

Boot from NVMe

The password for alarm is alarm. You can su - with the password root to get root access.

Repair your installation

pacman-key --init
pacman-key --populate archlinuxarm
pacman -R linux-aarch64 uboot-raspberrypi
pacman -Syu --overwrite "/boot/*" linux-rpi-16k

This will modify your boot config files, so you need to verify their contents again.

Fix IPv6 connectivity

To avoid IPv6 connectivity problems later, install networkmanager and enable the service:

pacman -S networkmanager
systemctl enable NetworkManager

Now you can reboot.

My configuration

OS: Arch Linux ARM aarch64
Host: Raspberry Pi 5 Model B Rev 1.0
Kernel: 6.6.25-1-rpi-16k
Packages: 251 (pacman)
Shell: fish 3.7.1
CPU: ARMv8 rev 1 (v8l) (4) @ 2.80 GHz
Memory: 191.64 MiB / 7.86 GiB (2%)
Disk (/): 3.19 GiB / 476.44 GiB (1%) - btrfs
Local IP (end0): 192.168.0.2/24 *
Locale: en_US.UTF-8

Thank you

The information in this post is based on these amazing people: