Qu'est-ce que c'est ? rpi-image-gen?
rpi-image-gen est un cadre léger et scriptable pour la génération d'images basées sur les Raspberry Pi OSpour générer des images basées sur la technologie -. Il prend un système de fichiers racine de base (Raspberry Pi OS Lite ou Full) et applique des personnalisations en couches pour produire un fichier .img prêt à être flashé.
Il s'agit essentiellement d'un flux de travail dd reproductible - automatisé, contrôlé par version et hautement configurable.
Pourquoi l'utiliser ?
Contrairement à Yocto ou Buildroot, rpi-image-gen ne reconstruit pas les paquets à partir des sources. Au lieu de cela, il utilise les paquets binaires de Debian et l'infrastructure existante. Raspberry Pi existante. Cela vous permet de :
- d'ajouter des fichiers de configuration, des services et des utilisateurs
- Activer ou désactiver les unités systemd
- Préinstaller des applications et des dépendances
- d'intégrer des clés SSH, des informations d'identification Wi-Fi et des identifiants d'appareils
C'est le moyen le plus rapide de passer du prototype à la production, tout en gardant un contrôle total sur la configuration de votre système.
Concepts de base
Un projet typique rpi-image-gen se compose des éléments suivants :
- Image de base - l'image officielle Raspberry Pi OS Lite
- Répertoire de superposition - vos fichiers, services et scripts supplémentaires
- Crochets de personnalisation - scripts d'injection avant et après le système de fichiers
- Configuration de la construction - définition des rootfs, des partitions de démarrage, de la disposition et des étiquettes de version.
Ensemble, ces éléments produisent une image cohérente et amorçable, prête pour le provisionnement.
Installation
Suivez les instructions d'installation à l'adresse https://github.com/raspberrypi/rpi-image-gen.
Exemple
Un projet typique peut se présenter comme suit :
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.yamlLes fichiers les plus importants sont les fichiers de configuration YAML - ils définissent quels paquets, fichiers et paramètres sont inclus dans l'image générée.
Exemple de configuration
config/deb12-cm5-min-desktop.yaml - définit les paramètres globaux tels que le nom d'hôte, les informations d'identification de l'utilisateur, la taille des partitions et les clés SSH :
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 - liste les paquets logiciels, les fichiers de configuration et les ajouts personnalisés, tels qu'une application Qt :
# 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"Pour un exemple de travail complet, voir : https://github.com/interelectronix/rpi-image-gen-projects/tree/main/deb12-cm5-min-desktop
Commande de construction
Pour créer l'image, exécutez :
rpi-image-gen build -S path-to-project-folder -c deb12-cm5-min-desktop.yamlCI/CD et reproductibilité
Une fois que vos scripts de construction sont déterministes, vous pouvez les intégrer dans un pipeline CI/CD (par exemple, , , ). rpi-image-gen dans un pipeline CI/CD (par exemple, GitHub Actions, GitLab CI, Jenkins).
Chaque build produit un artefact traçable et versionné, permettant des mises à jour fiables et un débogage plus facile - une étape cruciale vers un déploiement de niveau production.
Articles de cette série
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Du système d'exploitation de base à la plate-forme de production
- Personnaliser Raspberry Pi OS avec rpi-image-gen
- Robustesse du système - Conception d'un système de fichiers racine A/B
- Provisioning — Automating First Boot with rpi-sb-provisioner
- OTA and Lifecycle — Software Updates with SWUpdate
Sources d'information
- 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