Skip to main content

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ı

rpi-image-gen Şema

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

En ö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: y

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

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