Installing Arch Linux on Raspberry Pi with WiFi-only networking

I made this post primarily for my own reference by combining several tutorials in the net and my own observations into one comprehensive tutorial, but I hope this can be for the benefit of other Arch Linux ARM users, too. Of course this tutorial applies as such only on Raspberry Pi models with WiFi: RPi Zero W, RPi 3A+, RPi 4B and so on.

All these instructions must be run as root from a Linux computer with a SD card reader, Windows is useless here. Replace sdX in the following instructions with the device name for the SD card as it appears on your computer.

  1. Start fdisk to partition the SD card:

    fdisk /dev/sdX
  2. At the fdisk prompt, delete old partitions and create a new one:
    1. Type o. This will clear out any partitions on the drive.
    2. Type p to list partitions. There should be no partitions left.
    3. Type n, then p for primary, 1 for the first partition on the drive, press ENTER to accept the default first sector, then type +100M for the last sector.
    4. Type t, then c to set the first partition to type W95 FAT32 (LBA).
    5. Type n, then p for primary, 2 for the second partition on the drive, and then press ENTER twice to accept the default first and last sector.
    6. Write the partition table and exit by typing w.
  3. Create and mount the FAT filesystem:

    mkfs.vfat /dev/sdX1
    mkdir boot
    mount /dev/sdX1 boot
  4. Create and mount the ext4 filesystem:

    mkfs.ext4 /dev/sdX2
    mkdir root
    mount /dev/sdX2 root
  5. The root filesystem versions for different Raspberry Pi models are:
    • ArchLinuxARM-rpi-latest.tar.gz for Zero and old RPis
    • ArchLinuxARM-rpi-2-latest.tar.gz for RPi2s
    • ArchLinuxARM-rpi-3-latest.tar.gz for RPi3s
    • ArchLinuxARM-rpi-4-latest.tar.gz for RPi4s

    Download and extract the correct root filesystem:

    wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-latest.tar.gz
    bsdtar -xpf ArchLinuxARM-rpi-latest.tar.gz -C root
    sync
  6. Move boot files to the first partition:

    mv root/boot/* boot
  7. Configure the system for WiFi networking by first editing root/etc/systemd/network/wlan0.network:

    1. [Match]
    2. Name=wlan0
    3.  
    4. [Network]
    5. DHCP=yes
  8. Then, replace SSID and PASS with the relevant ones for your WiFi network in the following wpa_supplicant configuration steps:

    wpa_passphrase "SSID" "PASS" > root/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
    ln -s /usr/lib/systemd/system/wpa_supplicant@.service root/etc/systemd/system/multi-user.target.wants/wpa_supplicant@wlan0.service
  9. Unmount the two partitions:

    umount boot root
  10. Remove the SD card, insert it into the Raspberry Pi, and power on the device.
  11. SSH to the IP address given to the board by your router.
    • Login as the default user alarm with the password alarm.
    • Then su to root. The default root password is root.
  12. Initialize the pacman keyring and populate the Arch Linux ARM package signing keys:

    pacman-key --init
    pacman-key --populate archlinuxarm
  13. The default name resolution does not work with WiFi, so to have a working DNS you need to type in the following (Replace the nameserver IP address with one of your preference, if needed):

    systemctl stop systemd-resolved
    systemctl disable systemd-resolved
    rm /etc/resolv.conf
    echo "nameserver 1.1.1.1" > /etc/resolv.conf
  14. And finally, update the system:

    pacman -Syu
  15. If you install later networkmanager or equivalent, remember to undo step 8 before starting it for the first time to prevent networking issues:

    systemctl stop wpa_supplicant@wlan0.service
    systemctl disable wpa_supplicant@wlan0.service
    rm /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
  16. Last, if you are using a RPi 4B, remember to update its firmware at the earliest possible opportunity to prevent issues with other hardware, please see here.

Now you can continue with normal Arch Linux installation guide!


Original sources: Arch Linux ARM / Ladvien

This entry was posted in Linux and tagged , , , . Bookmark the permalink.