Skip to main content

rpi-image-genni nini?

rpi-image-gen ni mfumo mwepesi, unaoweza kuandikwa wa kutengeneza picha za Raspberry Pi OS. Inachukua mfumo wa faili wa msingi wa mizizi (Raspberry Pi OS Lite au Kamili) na hutumia ubinafsishaji wa safu ili kutoa faili ya .img iliyo tayari kuangaza.

Kwa asili, ni mtiririko wa kazi wa dd unaoweza kuzalishwa - otomatiki, unaodhibitiwa na toleo, na unaoweza kusanidiwa sana.

Kwa nini utumie?

Tofauti na Yocto au Buildroot, rpi-image-gen haijengi upya vifurushi kutoka kwa chanzo. Badala yake, inatumia vifurushi vya binary vya Debian na miundombinu iliyopo ya Raspberry Pi . Hii inakuruhusu:

  • Ongeza faili za usanidi, huduma, na watumiaji
  • Washa au uzime vitengo vya systemd
  • Sakinisha mapema programu na utegemezi
  • Pachika funguo za SSH, vitambulisho vya Wi-Fi na vitambulisho vya kifaa

Ni njia ya haraka zaidi ya kutoka kwa mfano hadi uzalishaji, huku ukiweka udhibiti kamili wa usanidi wa mfumo wako.

Dhana za msingi

Mradi wa kawaida wa rpi-image-gen una vipengele vifuatavyo:

  • Picha ya msingi - rasmi Raspberry Pi OS Lite
  • Saraka ya kufunika - faili zako za ziada, huduma, na hati
  • Ndoano za kubinafsisha - hati za sindano za mfumo wa faili kabla na baada ya faili
  • Jenga usanidi - kufafanua rootfs, sehemu za boot, mpangilio, na lebo za toleo

rpi-image-gen mpango

Kwa pamoja, vipengele hivi hutoa picha thabiti, inayoweza kuwashwa ambayo iko tayari kwa utoaji.

Ufungaji

Fuata maagizo ya usakinishaji kwenye https://github.com/raspberrypi/rpi-image-gen.

Mfano

Mradi wa kawaida unaweza kuonekana kama hii:

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

Faili muhimu zaidi ni faili za usanidi wa YAML - hizi hufafanua ni vifurushi, faili na mipangilio gani imejumuishwa kwenye picha iliyozalishwa.

Mfano wa Usanidi

config/deb12-cm5-min-desktop.yaml - hufafanua vigezo vya kimataifa kama vile jina la mwenyeji, kitambulisho cha mtumiaji, saizi za kizigeu, na funguo za 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 - huorodhesha vifurushi vya programu, faili za usanidi, na nyongeza maalum, kama vile programu ya 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"

Kwa mfano kamili wa kufanya kazi, angalia: https://github.com/interelectronix/rpi-image-gen-projects/tree/main/deb12-cm5-min-desktop

Amri ya kujenga

Ili kujenga picha, kimbia:

rpi-image-gen build -S path-to-project-folder -c deb12-cm5-min-desktop.yaml

CI / CD na uzazi

Mara tu hati zako za kujenga zinapoamua, unaweza kuunganisha rpi-image-gen kwenye bomba la CI/CD (kwa mfano, GitHub Actions, GitLab CI, Jenkins).

Kila muundo hutoa mabaki yanayoweza kufuatiliwa, yaliyotolewa, kuwezesha masasisho ya kuaminika na utatuzi rahisi - hatua muhimu kuelekea uwekaji wa kiwango cha uzalishaji.