The CM5 image uses a combination of standard Arch Linux packages (installed via pacstrap) and custom PKGBUILDs for hardware-specific components.
Core packages (pacstrap)
These packages are installed into the image during the cm5-setup.sh build:
| Package | Purpose |
|---|
base, base-devel | Base Arch Linux system and build tools |
linux-rpi | Raspberry Pi kernel with RPi-specific patches |
linux-rpi-headers | Kernel headers (required for DKMS modules) |
linux-firmware | Firmware blobs for broadcom/wireless/GPU |
btrfs-progs | Btrfs filesystem utilities |
grub, efibootmgr | GRUB bootloader and EFI boot manager |
dracut | Initramfs generator |
dropbear | Lightweight SSH server for early initramfs rescue |
networkmanager | Network management daemon |
openssh | Full OpenSSH server |
sudo | Privilege escalation |
rpi-eeprom | RPi EEPROM update utility |
snapper | Btrfs snapshot manager with timeline cleanup |
vim | Text editor |
curl, wget, git | Download and version control utilities |
Service stack packages
Additional packages needed for the full home automation and NAS stack. Add these to the pacstrap call or install after first boot:
NAS / Samba
Containers
Filesystems & Storage
PCIe & Monitoring
sudo pacman -S samba avahi nss-mdns nfs-utils
| Package | Purpose |
|---|
samba | SMB/CIFS file sharing |
avahi | mDNS/DNS-SD for Time Machine and device discovery |
nss-mdns | NSS module for mDNS hostname resolution |
nfs-utils | NFS export support |
sudo pacman -S docker docker-compose podman crun
| Package | Purpose |
|---|
docker | Container runtime for Frigate/HA Docker Compose |
docker-compose | Multi-container orchestration |
podman | Daemonless container runtime (for quadlets) |
crun | OCI container runtime for aarch64 |
sudo pacman -S btrfs-progs ntfs-3g exfatprogs smartmontools nvme-cli
| Package | Purpose |
|---|
ntfs-3g | NTFS read/write (for Windows disk access) |
exfatprogs | exFAT filesystem support |
smartmontools | SATA disk SMART health monitoring |
nvme-cli | NVMe device health and management |
sudo pacman -S pciutils usbutils htop iotop nginx rsync
| Package | Purpose |
|---|
pciutils | lspci for PCIe device enumeration |
usbutils | lsusb for USB device enumeration |
htop | Interactive process monitor |
iotop | I/O usage monitor (useful for Frigate tuning) |
nginx | Web server (for Gentoo binary host) |
rsync | Sync packages to binhost |
Custom PKGBUILDs
Three custom PKGBUILDs in Arch-Linux/ provide hardware-specific packages. Build them with makepkg:
# From the repository root
cd Arch-Linux/exaviz-dkms
makepkg -si
cd ../metis-dkms
makepkg -si
cd ../voyager-sdk
makepkg -si
exaviz-dkms
Provides out-of-tree DKMS kernel modules for the Exaviz Cruiser carrier board (fan controller, custom GPIO expander, etc.):
Arch-Linux/exaviz-dkms/PKGBUILD
# PKGBUILD: exaviz-dkms
pkgname=exaviz-dkms
pkgver=1.0.0
pkgrel=1
pkgdesc="DKMS kernel modules for Exaviz Cruiser CM5"
arch=('aarch64')
depends=('dkms' 'linux-rpi-headers')
source=(
"https://github.com/exaviz-ai/cruiser/archive/v${pkgver}.tar.gz"
)
sha256sums=('SKIP')
package() {
local modname="exaviz-cruiser"
local modver="${pkgver}"
local destdir="${pkgdir}/usr/src/${modname}-${modver}"
install -dm755 "$destdir"
cp -r "${srcdir}/cruiser-${pkgver}/drivers/"* "$destdir/"
cat > "${destdir}/dkms.conf" <<EOF
PACKAGE_NAME="${modname}"
PACKAGE_VERSION="${modver}"
BUILT_MODULE_NAME[0]="exaviz_cruiser"
DEST_MODULE_LOCATION[0]="/kernel/drivers/misc"
AUTOINSTALL="yes"
EOF
}
metis-dkms
Provides the Axelera Metis PCIe driver (DKMS):
Arch-Linux/metis-dkms/PKGBUILD
pkgname=metis-dkms
pkgver=1.5.0
pkgrel=1
pkgdesc="Axelera Metis PCIe driver (DKMS)"
arch=('x86_64' 'aarch64')
url="https://github.com/axelera-ai-hub/axelera-driver"
license=('GPL2')
depends=('dkms')
makedepends=('linux-headers')
source=("$pkgname-$pkgver::https://github.com/axelera-ai-hub/axelera-driver/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('SKIP')
package() {
cd axelera-driver-$pkgver
install -d "$pkgdir/usr/src/metis-$pkgver"
cp -r . "$pkgdir/usr/src/metis-$pkgver"
install -Dm644 dkms.conf "$pkgdir/usr/src/metis-$pkgver/dkms.conf"
}
voyager-sdk
Provides the Axelera Voyager SDK Python runtime:
Arch-Linux/voyager-sdk/PKGBUILD
pkgname=voyager-sdk
pkgver=1.5.0
pkgrel=1
pkgdesc="Axelera Voyager SDK (Python runtime)"
arch=('any')
url="https://github.com/axelera-ai-hub/voyager-sdk"
license=('Apache')
depends=(
'python'
'python-numpy'
'python-pyyaml'
'python-requests'
'python-tqdm'
'python-python-dateutil'
)
makedepends=('python-build' 'python-installer' 'python-wheel')
source=("$pkgname-$pkgver::https://github.com/axelera-ai-hub/voyager-sdk/archive/refs/tags/v$pkgver.tar.gz")
build() {
cd voyager-sdk-$pkgver
python -m build --wheel --no-isolation
}
package() {
cd voyager-sdk-$pkgver
python -m installer --destdir="$pkgdir" dist/*.whl
}
Inspecting Exaviz apt packages
Before writing PKGBUILDs you may want to inspect what Exaviz ships in their Debian apt repository. The scripts/exaviz-recon.sh script adds the Exaviz apt repo temporarily, lists matching packages, and extracts .deb contents for inspection — without installing anything:
# Run on a Debian/Ubuntu host or debootstrap chroot
sudo bash scripts/exaviz-recon.sh
The script probes these likely package names and extracts them to /tmp/exaviz-inspect/:
exaviz-cruiser-firmware exaviz-cruiser-dtb
exaviz-cruiser-kernel exaviz-cm5-carrier
linux-image-exaviz linux-dtb-exaviz
raspi-firmware-exaviz exaviz-config
exaviz-tools
The Exaviz apt repository URL (https://apt.exaviz.com/debian) is a placeholder. Check the official Exaviz documentation for the actual repository URL before running this script.
Gentoo overlay
The axelera.ai-overlay/ directory is a Gentoo Portage overlay that provides the metis-dkms ebuild for Gentoo-based systems:
axelera.ai-overlay/sys-kernel/metis-dkms/metis-dkms.ebuild
EAPI=8
DESCRIPTION="Axelera Metis PCIe DKMS kernel module"
HOMEPAGE="https://github.com/axelera-ai-hub/axelera-driver"
SRC_URI="https://github.com/axelera-ai-hub/axelera-driver/archive/refs/tags/v${PV}.tar.gz -> metis-${PV}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~arm64"
DEPEND="sys-kernel/dkms"
To use the overlay on a Gentoo system, add it via eselect repository or place axelera.ai-overlay/ in your repos configuration, then emerge sys-kernel/metis-dkms.
CI builds
The Arch-Linux/build.yml uses the 2m/arch-pkgbuild-builder GitHub Action to build all three PKGBUILDs:
uses: 2m/arch-pkgbuild-builder@v1.16
with:
target: 'pkgbuild'
pkgname: 'metis-dkms'
pkgname: 'metis-sdk'
pkgname: 'voyager-sdk'