Apa itu rpi-image-gen?
rpi-image-gen ialah rangka kerja yang ringan dan boleh skrip untuk menjana imej berasaskan Raspberry Pi OS. Ia memerlukan sistem fail akar asas (Raspberry Pi OS Lite atau Penuh) dan menggunakan penyesuaian berlapis untuk menghasilkan fail .img sedia untuk dikilat.
Pada dasarnya, ia adalah aliran kerja dd yang boleh dihasilkan semula — automatik, dikawal versi dan sangat boleh dikonfigurasikan.
Mengapa menggunakannya?
Tidak seperti Yocto atau Buildroot, rpi-image-gen tidak membina semula pakej daripada sumber. Sebaliknya, ia memanfaatkan pakej binari Debian dan infrastruktur Raspberry Pi sedia ada. Ini membolehkan anda untuk:
- Tambah fail konfigurasi, perkhidmatan dan pengguna
- Dayakan atau lumpuhkan unit systemd
- Prapasang aplikasi dan kebergantungan
- Benamkan kunci SSH, kelayakan Wi-Fi dan ID peranti
Ia adalah cara terpantas untuk beralih daripada prototaip kepada pengeluaran, sambil mengekalkan kawalan penuh ke atas persediaan sistem anda.
Konsep teras
Projek rpi-image-gen biasa terdiri daripada komponen berikut:
- Imej asas — Raspberry Pi OS Lite rasmi
- Direktori tindanan — fail, perkhidmatan dan skrip tambahan anda
- Cangkuk penyesuaian — skrip suntikan pra dan pasca sistem fail
- Konfigurasi binaan — mentakrifkan rootfs, partition but, susun atur dan tag versi
Bersama-sama, elemen ini menghasilkan imej yang konsisten dan boleh but yang sedia untuk peruntukan.
Perhimpunan
Ikut arahan pemasangan di https://github.com/raspberrypi/rpi-image-gen.
Contoh
Projek biasa mungkin kelihatan seperti ini:
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.yamlFail yang paling penting ialah fail konfigurasi YAML — ini mentakrifkan pakej, fail dan tetapan yang disertakan dalam imej yang dijana.
Contoh Konfigurasi
config/deb12-cm5-min-desktop.yaml — mentakrifkan parameter global seperti nama hos, kelayakan pengguna, saiz partition dan kunci 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 — menyenaraikan pakej perisian, fail konfigurasi dan penambahan tersuai, seperti aplikasi 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"Untuk contoh kerja yang lengkap, lihat: https://github.com/interelectronix/rpi-image-gen-projects/tree/main/deb12-cm5-min-desktop
Bina arahan
Untuk membina imej, jalankan:
rpi-image-gen build -S path-to-project-folder -c deb12-cm5-min-desktop.yamlCI/CD dan kebolehulangan
Setelah skrip binaan anda deterministik, anda boleh menyepadukan rpi-image-gen ke dalam saluran paip CI/CD (cth, GitHub Actions, GitLab CI, Jenkins).
Setiap binaan menghasilkan artifak berversi yang boleh dikesan, membolehkan kemas kini yang boleh dipercayai dan penyahpepijatan yang lebih mudah — langkah penting ke arah penggunaan gred pengeluaran.
Artikel dalam siri ini
- Membina Linux sedia pengeluaran untuk Raspberry Pi Compute Module 5
- Daripada OS Stok kepada Platform Pengeluaran
- Menyesuaikan Raspberry Pi OS dengan rpi-image-gen
- Keteguhan Sistem — Merancang susun atur sistem fail A/B
- Provisioning — Mengautomasikan But Pertama dengan rpi-sb-provisioner
- OTA dan Kitaran Hayat — Kemas Kini Perisian dengan SWUpdate
Sumber
- 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