diff --git a/posts/arch-linux-on-raspberry-pi-5.md b/posts/arch-linux-on-raspberry-pi-5.md new file mode 100644 index 0000000..f4b04ff --- /dev/null +++ b/posts/arch-linux-on-raspberry-pi-5.md @@ -0,0 +1,136 @@ +--- +title: Arch Linux on Raspberry Pi 5 +tags: article arch linux arm raspberry pi5 nvme +created: 2024-04-05T18:26:55Z +published: true +--- + +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. + +```shell +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 + +```shell +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 + +```shell +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 + +```shell +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](https://archlinuxarm.org/packages/aarch64/linux-rpi-16k). + +```shell +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 + +```shell +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 + +```shell +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: + +```shell +pacman -S networkmanager +systemctl enable NetworkManager +``` + +Now you can `reboot`. + +## Thank you + +The information in this post is based on these amazing people: + +- [Jeff Geerling](https://jeffgeerling.com/) for the `rpi-clone` fork and showing how to boot from NVMe +- [Sven Kiljan](https://kiljan.org/) for the steps to replace `uboot` with `linux-rpi` \ No newline at end of file