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 ไม่ได้สร้างแพ็คเกจใหม่จากแหล่งที่มา แต่ใช้ประโยชน์จากแพ็คเกจไบนารีของ Debian และโครงสร้างพื้นฐาน Raspberry Pi ที่มีอยู่แทน วิธีนี้ช่วยให้คุณ:

  • เพิ่มไฟล์การกําหนดค่า บริการ และผู้ใช้
  • เปิดหรือปิดใช้งานหน่วย systemd
  • ติดตั้งแอปพลิเคชันและการพึ่งพาไว้ล่วงหน้า
  • ฝังคีย์ 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)

แต่ละบิลด์จะสร้างสิ่งประดิษฐ์ที่มีเวอร์ชันที่ตรวจสอบย้อนกลับได้ ซึ่งช่วยให้สามารถอัปเดตที่เชื่อถือได้และการดีบักที่ง่ายขึ้น ซึ่งเป็นขั้นตอนสําคัญในการปรับใช้ระดับการผลิต

แหล่งที่มา