Skip to main content
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:
PackagePurpose
base, base-develBase Arch Linux system and build tools
linux-rpiRaspberry Pi kernel with RPi-specific patches
linux-rpi-headersKernel headers (required for DKMS modules)
linux-firmwareFirmware blobs for broadcom/wireless/GPU
btrfs-progsBtrfs filesystem utilities
grub, efibootmgrGRUB bootloader and EFI boot manager
dracutInitramfs generator
dropbearLightweight SSH server for early initramfs rescue
networkmanagerNetwork management daemon
opensshFull OpenSSH server
sudoPrivilege escalation
rpi-eepromRPi EEPROM update utility
snapperBtrfs snapshot manager with timeline cleanup
vimText editor
curl, wget, gitDownload 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:
sudo pacman -S samba avahi nss-mdns nfs-utils
PackagePurpose
sambaSMB/CIFS file sharing
avahimDNS/DNS-SD for Time Machine and device discovery
nss-mdnsNSS module for mDNS hostname resolution
nfs-utilsNFS export support

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:
Arch-Linux/build.yml
uses: 2m/arch-pkgbuild-builder@v1.16
with:
  target: 'pkgbuild'
  pkgname: 'metis-dkms'
  pkgname: 'metis-sdk'
  pkgname: 'voyager-sdk'

Build docs developers (and LLMs) love