Run pacstrap

Run this on the live system:
pacstrap -K /mnt "${PKGS[@]}"

This downloads a little over a gigabyte and takes a few minutes on a reasonable connection. The packages land in /mnt/var/cache/pacman/pkg – on the target’s disk, inside the @pkg subvolume you made for exactly this – so the live system’s small RAM filesystem is not involved.

The -K flag tells pacstrap to initialise a fresh pacman keyring inside the target rather than copying the live system’s. That is the cleaner default: the new machine gets the distribution’s keys and none of the local state that has accumulated on the installer.

On an older Pi stick, drop the -K

-K implies -G, “do not copy the host’s keyring to the target”. On a BOOMSTICK Pi image that predates the Arch Linux ARM signing keys, the trust you had to add by hand lives only in the live system’s keyring, so -K would discard it and the install would fail on the kernel. Use plain pacstrap /mnt "${PKGS[@]}" there instead. See Prepare pacman for how to tell which stick you have. On a current stick, either form works.

When it finishes

The last thing pacstrap does is build an initramfs for the kernel you installed, so the tail of the output looks like this:

(stdout)
  -> Early uncompressed CPIO image generation successful
==> Initcpio image generation successful
(14/14) Reloading system bus configuration...
  Skipped: Running in chroot.

Skipped: Running in chroot is expected and is not an error. pacstrap is installing into a directory, so there is no running system bus for the package’s hook to reload. On a Raspberry Pi 5 over WiFi, the whole run took about a minute and a half.

Check it landed

[bash]: Run this on your workstation:
du -sh /mnt
[bash]: Run this on your workstation:
df -h /mnt | tail -1
(stdout)
3.3G	/mnt
/dev/nvme0n1p2  238G  2.5G  235G   1% /mnt

Those two numbers disagree on purpose, and the gap is the zstd compression you mounted with back in the disk chapter: du adds up 3.3 GiB of file contents, while df reports the 2.5 GiB those files actually occupy. About a quarter of the base system compressed away, for free.

A couple of gigabytes, give or take your package choices. If that number is in megabytes, something went wrong and you should read back through pacstrap’s output rather than continuing.

// settings
theme:
fx: