Skip to main content

מה זה rpi-image-gen?

rpi-image-gen היא מסגרת קלה וניתנת לתפאורה, ליצירת תמונות מבוססות Raspberry Pi OS. הוא לוקח מערכת קבצים בסיסית (Raspberry Pi OS Lite או Full) ומפעיל התאמות בשכבות כדי ליצור קובץ .img מוכן לפלאש.

בעצם, זהו תהליך עבודה DD שניתן לשחזר — אוטומטי, נשלט בגרסאות, וניתן להתאמה גבוהה.

למה להשתמש בזה?

בניגוד ל- Yocto או Buildroot, rpi-image-gen לא בונה חבילות מהמקור. במקום זאת, היא מנצלת את חבילות הבינאריות של דביאן ואת תשתית ה- Raspberry Pi הקיימת. זה מאפשר לך:

  • הוספת קבצי קונפיגורציה, שירותים ומשתמשים
  • להפעיל או לנטרל יחידות מערכת
  • יישומי התקנה מראש ותלותיות
  • הטמעת מפתחות SSH, פרטי Wi-Fi ומזהי מכשירים

זו הדרך המהירה ביותר לעבור מאב-טיפוס לייצור, תוך שמירה על שליטה מלאה בהגדרות המערכת.

מושגים מרכזיים

פרויקט rpi-image-gen טיפוסי מורכב מהרכיבים הבאים:

  • תמונת בסיס — ה- Raspberry Pi OS Lite הרשמי
  • תיקיית שכבת — הקבצים, השירותים והסקריפטים הנוספים שלך
  • ווי התאמה אישית — סקריפטים לפני ואחרי הזרקת מערכת הקבצים
  • תצורת בנייה — הגדרת rootfs, מחיצות אתחול, פריסה ותגי גרסאות

תוכנית rpi-image-gen

יחד, האלמנטים הללו יוצרים תמונה עקבית, ניתנת לאתחול ומוכנה לפרוביזציה.

התקנה

עקבו אחרי הוראות ההתקנה https://github.com/raspberrypi/rpi-image-gen.

דוגמה

פרויקט טיפוסי עשוי להיראות כך:

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

הקבצים החשובים ביותר הם קבצי הקונפיגורציה של YAML — אלה מגדירים אילו חבילות, קבצים והגדרות כלולים בתמונה שנוצרה.

דוגמה לקונפיגורציה

config/deb12-cm5-min-desktop.yaml — מגדיר פרמטרים גלובליים כגון שם מארח, פרטי משתמש, גודל מחיצות ומפתחות 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 — מפרט את חבילות התוכנה, קבצי הקונפיגורציה ותוספות מותאמות אישית, כמו אפליקציית 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"

לדוגמה מלאה של עבודה, ראו: https://github.com/interelectronix/rpi-image-gen-projects/tree/main/deb12-cm5-min-desktop

פקודת בנייה

כדי לבנות את התמונה, הריצו:

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

CI/CD ויכולת שכפול

ברגע שהסקריפטים שלך דטרמיניסטיים, תוכל לשלב rpi-image-gen בצינור CI/CD (למשל, GitHub Actions, GitLab CI, Jenkins).

כל בנייה מייצרת ארטיפקט שניתן לעקוב אחריו, עם גרסאות, המאפשר עדכונים אמינים וניפוי שגיאות קל יותר — צעד קריטי לקראת פריסה ברמת ייצור.