Wat is rpi-image-gen?
rpi-image-gen is 'n liggewig, skripbare raamwerk vir die generering van Raspberry Pi OS-gebaseerde beelde. Dit neem 'n basiese wortellêerstelsel (Raspberry Pi OS Lite of Vol) en pas gelaagde aanpassings toe om 'n gereed-om-te-flash .img-lêer te produseer.
In wese is dit 'n herhaalbare dd-werkvloei — outomaties, weergawebeheer, en hoogs konfigureerbaar.
Hoekom dit gebruik?
Anders as Yocto of Buildroot, bou rpi-image-gen nie pakkette van die bron af op nie. In plaas daarvan maak dit gebruik van Debian se binêre pakkette en die bestaande Raspberry Pi -infrastruktuur. Dit stel jou in staat om:
- Voeg konfigurasielêers, dienste en gebruikers by
- Skakel stelselgesette eenhede aan of deaktiveer
- Toepassings en afhanklikhede vooraf te installeer
- Sluit SSH-sleutels, Wi-Fi-geloofsbriewe en toestel-ID's in
Dit is die vinnigste manier om van prototipe na produksie te gaan, terwyl jy volle beheer oor jou stelselopstelling behou.
Kernkonsepte
'n Tipiese rpi-image-gen -projek bestaan uit die volgende komponente:
- Basisbeeld — die amptelike Raspberry Pi OS Lite
- Oorleggids — jou bykomende lêers, dienste en skripte
- Aanpassingshake — pre- en post-lêerstelsel-inspuitingsskripte
- Boukonfigurasie — die definisie van rootfs, selfopstartpartisieë, uitleg- en weergawe-etikette
Saam produseer hierdie elemente 'n konsekwente, selflaaibare beeld wat gereed is vir voorsiening.
Installasie
Volg die installasie-instruksies by https://github.com/raspberrypi/rpi-image-gen.
Voorbeeld
'n Tipiese projek kan só lyk:
deb12-cm5-min-desktop
├── README.md
├── config
│ └── deb12-cm5-min-desktop.yaml
├── device
│ ├── cm5-device.yaml
│ └── rootfs-overlay
│ ├── etc
│ │ ├── lightdm
│ │ └── skel
│ └── usr
│ └── local
└── layer
├── image
│ └── simple-dual-nosparse
│ ├── bdebstrap
│ ├── device
│ ├── genimage.cfg.in.btrfs
│ ├── genimage.cfg.in.ext4
│ ├── image.yaml
│ ├── mke2fs.conf
│ ├── pre-image.sh
│ └── setup.sh
└── packages.yamlDie belangrikste lêers is die YAML-konfigurasielêers — hierdie bepaal watter pakkette, lêers en instellings in die gegenereerde beeld ingesluit word.
Konfigurasievoorbeeld
config/deb12-cm5-min-desktop.yaml — definieer globale parameters soos gasheernaam, gebruikersbewyse, partisiegroottes en SSH-sleutels:
device:
layer: cm5-device
hostname: cm5-dev
user1: pi
user1pass: StrongPass!1
image:
layer: image-rpios-nosparse
rootfs_type: ext4
boot_part_size: 512M
root_part_size: 4G
compression: zstd
name: deb12-cm5-min-desktop
layer:
custom: base-packages
ssh:
pubkey_user1: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAB" # your custom public key
pubkey_only: ylayer/packages.yaml — lys die sagtewarepakkette, konfigurasielêers en pasgemaakte byvoegings, soos 'n Qt-toepassing:
# METABEGIN
# X-Env-Layer-Name: base-packages
# X-Env-Layer-Desc: Installs base packages
# for sw development.
# X-Env-Layer-Version: 1.0.0
# X-Env-Layer-Requires: debian-bookworm-arm64-multi,
# rpi-debian-bookworm,
# rpi-misc-utils,
# rpi-essential-base,
# rpi-misc-skel,
# rpi-user-credentials,
# systemd-net-min,
# fake-hwclock,
# openssh-server
# METAEND
---
mmdebstrap:
setup-hooks:
- echo "hello - no setup-hooks in base-packages"
packages:
# Firmware to enable SHIFT boot manager and EEPROM maintenance
- raspberrypi-bootloader
- rpi-eeprom
- raspberrypi-ui-mods
- lightdm
- lightdm-gtk-greeter
- labwc
- wf-panel-pi
- lxsession
- lxpanel
- pcmanfm
- lxterminal
- gvfs
- xserver-xorg
- xwayland
- wayland-utils
- wlr-randr
- x11-xserver-utils
- xdg-user-dirs
- xdg-utils
- policykit-1
# helper and utilities
- bash
- sudo
- vim-tiny
- less
- nano
- network-manager
- bash-completion
# library manager
- libinput10
- libinput-bin
- libinput-dev
# sqlite
- sqlite3
- libsqlite3-0
- libsqlite3-dev
customize-hooks:
- echo "hello - customize-hooks in base-packages"
- $BDEBSTRAP_HOOKS/enable-units "$1" lightdm
- sed "s|alias ls='ls --color=auto'|alias ll='ls -al --color=auto'|" /home/$IGconf_device_user1/.bashrc > $1/home/$IGconf_device_user1/.bashrc
- uchroot $1 'mkdir -m 0700 -p ${HOME}/.config/labwc'
- cp "${IGconf_device_assetdir}/rootfs-overlay/etc/skel/.config/labwc/autostart" "$1/home/$IGconf_device_user1/.config/labwc/autostart"
- cp "${IGconf_device_assetdir}/rootfs-overlay/etc/skel/.config/labwc/environment" "$1/home/$IGconf_device_user1/.config/labwc/environment"
- cp "${IGconf_device_assetdir}/rootfs-overlay/etc/skel/.config/labwc/rc.xml" "$1/home/$IGconf_device_user1/.config/labwc/rc.xml"
- chown "${IGconf_device_user1}:${IGconf_device_user1}" "$1/home/$IGconf_device_user1/.config/labwc/autostart"
- chown "${IGconf_device_user1}:${IGconf_device_user1}" "$1/home/$IGconf_device_user1/.config/labwc/environment"
- chown "${IGconf_device_user1}:${IGconf_device_user1}" "$1/home/$IGconf_device_user1/.config/labwc/rc.xml"Vir 'n volledige werkende voorbeeld, sien: https://github.com/interelectronix/rpi-image-gen-projects/tree/main/deb12-cm5-min-desktop
Bou-opdrag
Om die beeld te bou, hardloop:
rpi-image-gen build -S path-to-project-folder -c deb12-cm5-min-desktop.yamlCI/CD en herhaalbaarheid
Sodra jou bouskripte deterministies is, kan jy rpi-image-gen integreer in 'n CI/CD-pyplyn (bv. GitHub Actions, GitLab CI, Jenkins).
Elke bou lewer 'n naspeurbare, weergawegegradeerde artefak, wat betroubare opdaterings en makliker foutopsporing moontlik maak — 'n belangrike stap na produksiegraad-implementering.
Artikels in hierdie reeks
- Bou van 'n produksie-gereed Linux vir Raspberry Pi Compute Module 5
- Van Stock OS na Produksieplatform
- Aanpassing van Raspberry Pi OS met rpi-image-gen
- Stelselrobuustheid — Ontwerp van 'n A/B-wortellêerstelsel-uitleg
- Provisioning — Outomatisering van Eerste Opstart met rpi-sb-provisioner
- OTA en Lewensiklus — Sagteware-opdaterings met SWUpdate
Bronne
- rpi-image-gen: https://github.com/raspberrypi/rpi-image-gen
- rpi-sb-provisioner: https://github.com/raspberrypi/rpi-sb-provisioner
- SWUpdate: https://github.com/sbabic/swupdate
- swugenerator: https://github.com/sbabic/swugenerator