Nedir bu? rpi-image-gen?
rpi-image-gen üretmek için hafif, kodlanabilir bir çerçevedir. Raspberry Pi OS-tabanlı görüntüler. Temel bir kök dosya sistemi alır (Raspberry Pi OS Lite veya Full) ve flaşa hazır bir .img dosyası üretmek için katmanlı özelleştirmeler uygular.
Özünde, tekrarlanabilir bir dd iş akışıdır - otomatikleştirilmiş, sürüm kontrollü ve son derece yapılandırılabilir.
Neden kullanalım?
Aksine Yocto veya Buildroot, rpi-image-gen paketleri kaynaktan yeniden oluşturmaz. Bunun yerine Debian'ın ikili paketlerinden ve mevcut Raspberry Pi altyapı. Bu, şunları yapmanıza olanak tanır:
- Yapılandırma dosyaları, hizmetler ve kullanıcılar ekleme
- Systemd birimlerini etkinleştirme veya devre dışı bırakma
- Uygulamaları ve bağımlılıkları önceden yükleyin
- SSH anahtarlarını, Wi-Fi kimlik bilgilerini ve cihaz kimliklerini gömün
Sistem kurulumunuz üzerinde tam kontrol sahibi olurken prototipten üretime geçmenin en hızlı yoludur.
Temel kavramlar
Tipik bir rpi-image-gen projesi aşağıdaki bileşenlerden oluşmaktadır:
- Temel görüntü - resmi Raspberry Pi OS Lite
- Yerleşim dizini - ek dosyalarınız, hizmetleriniz ve komut dosyalarınız
- Özelleştirme kancaları - dosya sistemi enjeksiyonu öncesi ve sonrası komut dosyaları
- Yapılandırma oluşturma - rootfs, önyükleme bölümleri, düzen ve sürüm etiketlerinin tanımlanması
Bu unsurlar birlikte, hazırlamaya hazır, tutarlı ve önyüklenebilir bir görüntü oluşturur.
Kurulum
adresindeki kurulum talimatlarını izleyin https://github.com/raspberrypi/rpi-image-gen.
Örnek
Tipik bir proje şöyle görünebilir:
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.yamlEn önemli dosyalar YAML yapılandırma dosyalarıdır - bunlar oluşturulan imaja hangi paketlerin, dosyaların ve ayarların dahil edileceğini tanımlar.
Yapılandırma Örneği
config/deb12-cm5-min-desktop.yaml - ana bilgisayar adı, kullanıcı kimlik bilgileri, bölüm boyutları ve SSH anahtarları gibi genel parametreleri tanımlar:
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 - yazılım paketlerini, yapılandırma dosyalarını ve Qt uygulaması gibi özel eklemeleri listeler:
# 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"Tam bir çalışma örneği için bkz: https://github.com/interelectronix/rpi-image-gen-projects/tree/main/deb12-cm5-min-desktop
Oluştur komutu
Görüntüyü oluşturmak için çalıştırın:
rpi-image-gen build -S path-to-project-folder -c deb12-cm5-min-desktop.yamlCI/CD ve yeniden üretilebilirlik
Derleme komut dosyalarınız deterministik olduğunda rpi-image-gen bir CI/CD boru hattına (örneğin, GitHub Actions, GitLab CI, Jenkins).
Her derleme, güvenilir güncellemeler ve daha kolay hata ayıklama sağlayan izlenebilir, sürümlendirilmiş bir eser üretir - üretim sınıfı dağıtım için çok önemli bir adım.
Bu serideki makaleler
- Building a Production-Ready Linux for Raspberry Pi Compute Module 5
- Stok İşletim Sisteminden Üretim Platformuna
- Özelleştirme Raspberry Pi OS ile rpi-image-gen
- Sistem Sağlamlığı - Bir A/B Kök Dosya Sistemi Düzeni Tasarlama
- Provisioning — Automating First Boot with rpi-sb-provisioner
- OTA and Lifecycle — Software Updates with SWUpdate
Kaynaklar
- 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