📦 RPIImage

Declarative, reproducible, CI-built Raspberry Pi OS images for production and development.

Current release: v0.14.2

🛠 Add this repo to Raspberry Pi Imager

You need Raspberry Pi Imager v2.0.3 or later — older versions don’t persist a custom repository between launches.

One-click (recommended)

  1. Open in Raspberry Pi Imager → Imager opens with our repo pre-loaded and asks you to confirm.
  2. Pick your target device → pick an image → flash.

Manual setup (alternative)

  1. Open Imager → Settings (⚙) → Custom repository.
  2. Paste the catalog URL and close the dialog — Imager reloads the OS list automatically:
    https://bauer-group.github.io/XPD-RPIImage/rpi-imager.json
  3. Our variants appear under CHOOSE OS → BAUER GROUP.

🧷 Flashing a Compute Module (CM4 / CM5 eMMC)

  1. Put the carrier board in rpiboot mode:
    • CM4 IO-Board: fit the jumper on J2 (Disable eMMC Boot).
    • CM5 IO-Board: bridge the nRPIBOOT test pad (or set the fit-jumper where provided).
  2. Connect the USB-C slave port (not the host USB) to your machine.
  3. Power the board. RPi Imager (≥ 1.8.5) detects the CM as "RPi" mass storage via its built-in rpiboot.
  4. Flash as usual.
  5. Remove the jumper, re-power, boot.

🧩 Variants in this release

base

v0.14.2

BAUER GROUP generic Raspberry Pi base image - Podman-ready (Docker-compatible), Portainer preinstalled, no application-specific hardware configured

Hostname
bg-rpi
Targets
rpi4, rpi5, cm4, cm5
Download size
766.9 MiB
Extracted size
3,603.0 MiB
Release date
2026-09-12
SHA-256 (.img.xz) fa3cd16f4318e8db4cc962e204e94034eed04292613375ef3c7e34a53dea699f
SHA-256 (.img) a9528a6d534b691a5b306bc204e45ff9ebc307b1a6eb73465900c2323a04303b

canbus-plattform

v0.14.2

BAUER GROUP CANbus plattform - base image + Waveshare 17912 dual isolated CAN HAT (MCP2515 on SPI)

Hostname
bg-canbus
Targets
rpi4, rpi5, cm4, cm5
Download size
765.3 MiB
Extracted size
3,605.0 MiB
Release date
2026-09-12
SHA-256 (.img.xz) d0c42133e3d478d784b1ea4b078633411b80d233b5afeb7e8f8c4d66537bd931
SHA-256 (.img) 8d0591e9de95fc244982e29e12ef2db75358150e10e2fd3891c0c6f69ca70da9

canbusfd-plattform

v0.14.2

BAUER GROUP CANbus FD plattform - base image + Waveshare 17075 2-CH isolated CAN FD HAT (2x MCP2518FD, mode A: CAN_0 on SPI0, CAN_1 on SPI1)

Hostname
bg-canbusfd
Targets
rpi4, rpi5, cm4, cm5
Download size
757.7 MiB
Extracted size
3,605.0 MiB
Release date
2026-09-12
SHA-256 (.img.xz) d58485e014eca9ed616782ccaf046266d9e44a03371c1610929051970f4e8b08
SHA-256 (.img) 20d918ef325828eff02095ce206913dd430a0aa8e5a808e8b4f2de503a9be623

🔐 Default credentials

These images ship with a demo credential - safe only on an isolated lab network:

WiFi ships disabled and no image carries a PSK. Bake a real password at build time via .env, or change things post-flash with:

sudo bgrpiimage-setup password
sudo bgrpiimage-setup wifi enable "MyNet" "s3cret"
sudo bgrpiimage-setup can status
sudo bgrpiimage-setup can txqueuelen can0 1024
sudo bgrpiimage-setup ip eth0 static 10.0.0.5/24 10.0.0.1 1.1.1.1

🔄 Keeping a flashed device current

A device does not need reflashing for every release. Three things update independently, and it is worth knowing which is which:

Debian & Raspberry Pi packages
Automatic, inside the configured maintenance window, including a reboot window for kernel updates. Nothing to do.
Platform configuration
Everything this project generates - systemd units, the config.txt overlays, the login banner, network and CAN settings. Applied from a ~30 KB bundle published with each release.
The base Raspberry Pi OS
Reflash. A release built on a newer Raspberry Pi OS is refused by the updater rather than applied on top of a different base.

Over SSH or on the console, as root:

sudo bgrpiimage-update check      # is there a newer configuration?
sudo bgrpiimage-update plan       # exactly what would change, changing nothing
sudo bgrpiimage-update apply      # apply it
sudo bgrpiimage-update status     # image version, configuration version, pending reboot
sudo bgrpiimage-update rollback   # restore the files the last apply replaced

The operator helper can also replace itself, which is useful because many releases only change it:

sudo bgrpiimage-setup update --self

What it will not do

The updater refuses more than it performs, and deliberately so. It never touches users, passwords, sudo, PAM, sshd host keys, your stored WiFi credentials, a static /etc/resolv.conf, or any 05-bgrpiimage-* network override you wrote yourself. It stops rather than proceeding when:

Every bundle carries an Ed25519 signature over its manifest, checked against public keys that ship inside the image, before anything else is read. A checksum published next to a download only proves the transfer; whoever can replace the bundle can replace the checksum beside it.

After applying, it reads back running state - which network file systemd actually chose, whether every device-tree overlay exists, whether the journal logged a parse warning - and only then records the new version. The login banner shows the image version and, when they differ, the configuration version applied on top of it.

Full reference: Updating an installed system.