تجاوز إلى المحتوى الرئيسي

ما هو rpi-image-gen?

rpi-image-gen هو إطار عمل خفيف الوزن وقابل للبرمجة النصية لتوليد Raspberry Pi OS-الصور المستندة إلى نظام الجذر. يأخذ نظام ملفات جذر أساسي (Raspberry Pi OS لايت أو كامل) ويطبق تخصيصات متعددة الطبقات لإنتاج ملف .img جاهز للفلاش.

وهو في جوهره عبارة عن سير عمل dd قابل للتكرار - مؤتمت ومضبوط الإصدار وقابل للتكوين بدرجة كبيرة.

لماذا تستخدمه؟

على عكس Yocto أو Buildroot, rpi-image-gen لا يعيد بناء الحزم من المصدر. وبدلاً من ذلك، فإنه يستفيد من حزم دبيان الثنائية والبنية التحتية Raspberry Pi الموجودة. هذا يسمح لك ب:

  • إضافة ملفات التكوين والخدمات والمستخدمين
  • تمكين أو تعطيل وحدات Systemd
  • التثبيت المسبق للتطبيقات والتبعيات
  • تضمين مفاتيح SSH وبيانات اعتماد Wi-Fi ومعرفات الأجهزة

إنها أسرع طريقة للانتقال من النموذج الأولي إلى الإنتاج، مع الحفاظ على التحكم الكامل في إعداد نظامك.

المفاهيم الأساسية

يتكون المشروع النموذجي rpi-image-gen المشروع النموذجي من المكونات التالية:

  • الصورة الأساسية - الرسمية Raspberry Pi OS لايت
  • دليل التراكب - الملفات والخدمات والبرامج النصية الإضافية الخاصة بك
  • خطاطيف التخصيص - البرامج النصية قبل وبعد حقن نظام الملفات
  • تكوين الإنشاء - تحديد الجذور وأقسام الإقلاع والتخطيط وعلامات الإصدار

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/CDD وقابلية التكرار

بمجرد أن تصبح البرامج النصية للبناء حتمية، يمكنك الدمج rpi-image-gen في خط أنابيب CI/CD (على سبيل المثال: GitHub Actions ، GitLab CI ، Jenkins).

تنتج كل عملية بناء قطعة أثرية يمكن تتبعها وإصدارها، مما يتيح تحديثات موثوقة وتصحيح الأخطاء بشكل أسهل - وهي خطوة حاسمة نحو النشر على مستوى الإنتاج.