Skip to main content

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

rpi-image-gen skim

Bersama-sama, elemen ini menghasilkan imej yang konsisten dan boleh but yang sedia untuk peruntukan.

Perhimpunan

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.yaml

Fail 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: y

layer/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.yaml

CI/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.