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, พาร์ติชันสําหรับบูต, เค้าโครงและแท็กเวอร์ชัน
องค์ประกอบเหล่านี้ร่วมกันสร้างอิมเมจที่สอดคล้องกันและสามารถบูตได้ซึ่งพร้อมสําหรับการจัดเตรียม
การติดตั้ง
ทําตามคําแนะนําในการติดตั้งที่ 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: ylayer/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.yamlCI/CD และความสามารถในการทําซ้ํา
เมื่อสคริปต์บิลด์ของคุณเป็นแบบกําหนดแล้ว คุณสามารถรวม rpi-image-gen เข้ากับไปป์ไลน์ CI/CD ได้ (เช่น GitHub Actions, GitLab CI, Jenkins)
แต่ละบิลด์จะสร้างสิ่งประดิษฐ์ที่มีเวอร์ชันที่ตรวจสอบย้อนกลับได้ ซึ่งช่วยให้สามารถอัปเดตที่เชื่อถือได้และการดีบักที่ง่ายขึ้น ซึ่งเป็นขั้นตอนสําคัญในการปรับใช้ระดับการผลิต
บทความในชุดนี้
- การสร้างLinuxที่พร้อมใช้งานจริงสําหรับ Raspberry Pi Compute Module 5
- จากสต็อกระบบปฏิบัติการสู่แพลตฟอร์มการผลิต
- การปรับแต่งRaspberry Pi OSด้วย rpi-image-gen
- ความแข็งแกร่งของระบบ — การออกแบบเค้าโครงระบบไฟล์ราก A/B
- Provisioning — การบูตครั้งแรกโดยอัตโนมัติด้วย rpi-sb-provisioner
- OTA และวงจรชีวิต — การอัปเดตซอฟต์แวร์ด้วย SWUpdate
แหล่งที่มา
- rpi-image-gen: https://github.com/raspberrypi/rpi-image-gen
- rpi-sb-provisioner: https://github.com/raspberrypi/rpi-sb-provisioner
- SWUpdate: https://github.com/sbabic/swupdate
- <a href="https://github.com/sbabic/swugenerator: swugenerator" เป้าหมาย="_blank">https://github.com/sbabic/swugenerator