Skip to main content

rpi-image-genlà gì?

rpi-image-gen là một framework nhẹ, có thể viết kịch bản để tạo hình ảnh dựa trên Raspberry Pi OS. Nó lấy một hệ thống tệp gốc cơ sở (Raspberry Pi OS Lite hoặc Full) và áp dụng các tùy chỉnh phân lớp để tạo ra một tệp .img sẵn sàng flash.

Về bản chất, đó là một quy trình làm việc dd có thể tái tạo — tự động, kiểm soát phiên bản và có thể cấu hình cao.

Tại sao sử dụng nó?

Không giống như Yocto hoặc Buildroot, rpi-image-gen không xây dựng lại các gói từ nguồn. Thay vào đó, nó tận dụng các gói nhị phân của Debian và cơ sở hạ tầng Raspberry Pi hiện có. Điều này cho phép bạn:

  • Thêm tệp cấu hình, dịch vụ và người dùng
  • Bật hoặc tắt các đơn vị systemd
  • Cài đặt sẵn các ứng dụng và phần phụ thuộc
  • Nhúng khóa SSH, thông tin đăng nhập Wi-Fi và ID thiết bị

Đó là cách nhanh nhất để chuyển từ nguyên mẫu sang sản xuất, trong khi vẫn giữ toàn quyền kiểm soát thiết lập hệ thống của bạn.

Khái niệm cốt lõi

Một dự án rpi-image-gen điển hình bao gồm các thành phần sau:

  • Hình ảnh cơ sở — Raspberry Pi OS Lite chính thức
  • Thư mục lớp phủ — các tệp, dịch vụ và tập lệnh bổ sung của bạn
  • Hook tùy chỉnh — tập lệnh chèn hệ thống tệp trước và sau
  • Cấu hình bản dựng — xác định rootf, phân vùng khởi động, bố cục và thẻ phiên bản

Sơ đồ rpi-image-gen

Cùng với nhau, các yếu tố này tạo ra một hình ảnh nhất quán, có thể khởi động và sẵn sàng để cung cấp.

Lắp ráp

Làm theo hướng dẫn cài đặt tại https://github.com/raspberrypi/rpi-image-gen.

Ví dụ

Một dự án điển hình có thể trông như thế này:

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

Các tệp quan trọng nhất là các tệp cấu hình YAML — chúng xác định các gói, tệp và cài đặt nào được bao gồm trong hình ảnh được tạo.

Cấu hình Example

config/deb12-cm5-min-desktop.yaml — xác định các tham số toàn cầu như tên máy chủ, thông tin đăng nhập người dùng, kích thước phân vùng và khóa 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 — liệt kê các gói phần mềm, tệp cấu hình và các bổ sung tùy chỉnh, chẳng hạn như ứng dụng 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"

Để có một ví dụ làm việc đầy đủ, hãy xem: https://github.com/interelectronix/rpi-image-gen-projects/tree/main/deb12-cm5-min-desktop

Lệnh xây dựng

Để tạo hình ảnh, hãy chạy:

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

CI / CD và khả năng tái tạo

Khi các tập lệnh xây dựng của bạn là xác định, bạn có thể tích hợp rpi-image-gen vào quy trình CI/CD (ví dụ: GitHub Actions, GitLab CI, Jenkins).

Mỗi bản dựng tạo ra một cấu phần phần mềm có thể theo phiên bản, cho phép cập nhật đáng tin cậy và gỡ lỗi dễ dàng hơn — một bước quan trọng để triển khai cấp sản xuất.