Ano ang rpi-image-gen?
rpi-image-gen ay isang magaan, scriptable na balangkas para sa pagbuo ng mga imahe na nakabatay sa Raspberry Pi OS. Ito ay tumatagal ng isang base root filesystem (Raspberry Pi OS Lite o Full) at nag-aaplay layered pagpapasadya upang makabuo ng isang handa na-to-flash .img file.
Sa esensya, ito ay isang reproducible dd workflow - awtomatiko, kinokontrol ng bersyon, at lubos na mai-configure.
Bakit ito gagamitin?
Hindi tulad ng Yocto o Buildroot, hindi rpi-image-gen muling nagtatayo ng mga pakete mula sa pinagmulan. Sa halip, ginagamit nito ang mga binary package ng Debian at ang umiiral na imprastraktura ng Raspberry Pi . Pinapayagan ka nitong upang:
- Magdagdag ng mga file ng pagsasaayos, serbisyo, at mga gumagamit
- Paganahin o huwag paganahin ang mga systemd unit
- Preinstall application at dependencies
- I-embed ang mga susi ng SSH, mga kredensyal ng Wi-Fi, at mga ID ng aparato
Ito ang pinakamabilis na paraan upang pumunta mula sa prototype hanggang sa produksyon, habang pinapanatili ang ganap na kontrol sa iyong pag-setup ng system.
Mga pangunahing konsepto
Ang isang tipikal na proyekto ng rpi-image-gen ay binubuo ng mga sumusunod na bahagi:
- Base image — ang opisyal na Raspberry Pi OS Lite
- Direktoryo ng overlay - ang iyong karagdagang mga file, serbisyo, at script
- Mga kawit ng pagpapasadya - mga script ng iniksyon bago at pagkatapos ng filesystem
- Bumuo ng pagsasaayos - pagtukoy sa mga rootf, boot partition, layout, at mga tag ng bersyon
Sama-sama, ang mga elementong ito ay gumagawa ng isang pare-pareho, bootable na imahe na handa na para sa paglalaan.
Pag-install
Sundin ang mga tagubilin sa https://github.com/raspberrypi/rpi-image-gen.
Halimbawa
Ang isang tipikal na proyekto ay maaaring magmukhang ganito:
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.yamlAng pinakamahalagang mga file ay ang mga file ng pagsasaayos ng YAML - tinutukoy nito kung aling mga pakete, file, at setting ang kasama sa nabuong imahe.
Halimbawa ng Pagsasaayos
config / deb12-cm5-min-desktop.yaml - tumutukoy sa mga pandaigdigang parameter tulad ng hostname, mga kredensyal ng gumagamit, laki ng partisyon, at mga susi ng 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 - naglilista ng mga pakete ng software, mga file ng pagsasaayos, at pasadyang mga karagdagan, tulad ng isang application ng 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"Para sa isang kumpletong halimbawa ng pagtatrabaho, tingnan ang: https://github.com/interelectronix/rpi-image-gen-projects/tree/main/deb12-cm5-min-desktop
Bumuo ng utos
Upang bumuo ng larawan, patakbuhin:
rpi-image-gen build -S path-to-project-folder -c deb12-cm5-min-desktop.yamlCI / CD at reproducibility
Kapag deterministiko na ang iyong mga script ng pagbuo, maaari mong isama rpi-image-gen sa isang pipeline ng CI / CD (hal., GitHub Actions, GitLab CI, Jenkins).
Ang bawat build ay gumagawa ng isang traceable, versioned artifact, na nagpapagana ng maaasahang mga update at mas madaling pag-debug - isang mahalagang hakbang patungo sa pag-deploy ng grade-production.
Mga artikulo sa seryeng ito
- Pagbuo ng isang Linux na handa na sa produksyon para sa Raspberry Pi Compute Module 5
- Mula sa Stock OS hanggang sa Platform ng Produksyon
- Pagpapasadya ng Raspberry Pi OS sa rpi-image-gen
- System Robustness - Pagdidisenyo ng isang A / B Root Filesystem Layout
- Provisioning — Pag-automate ng Unang Boot na may rpi-sb-provisioner
- OTA at Lifecycle - Mga Update ng Software na may SWUpdate
Mga Pinagmulan
- 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