주요 콘텐츠로 건너뛰기

무엇입니까 rpi-image-gen?

rpi-image-gen 기반 이미지를 생성하기 위한 가볍고 스크립트 가능한 프레임워크입니다. Raspberry Pi OS-기반 이미지를 생성하는 경량 스크립트 프레임워크입니다. 기본 루트 파일 시스템(Raspberry Pi OS Lite 또는 Full)을 사용하고 계층화된 사용자 지정을 적용하여 바로 플래시할 수 있는 .img 파일을 생성합니다.

본질적으로 재현 가능한 dd 워크플로우로, 자동화되고 버전이 제어되며 고도로 구성할 수 있습니다.

왜 사용하나요?

와 달리 Yocto 또는 Buildroot, rpi-image-gen 는 소스에서 패키지를 다시 빌드하지 않습니다. 대신 Debian의 바이너리 패키지와 기존의 Raspberry Pi 인프라를 활용합니다. 이를 통해 다음을 수행할 수 있습니다:

  • 구성 파일, 서비스 및 사용자 추가
  • 시스템 단위 활성화 또는 비활성화
  • 애플리케이션 및 종속성 사전 설치
  • SSH 키, Wi-Fi 자격 증명 및 장치 ID 임베드

시스템 설정을 완벽하게 제어하면서 프로토타입에서 프로덕션으로 전환할 수 있는 가장 빠른 방법입니다.

핵심 개념

일반적인 rpi-image-gen 프로젝트는 다음과 같은 구성 요소로 이루어져 있습니다:

  • 기본 이미지 - 공식 Raspberry Pi OS Lite
  • 오버레이 디렉토리 - 추가 파일, 서비스 및 스크립트
  • 사용자 정의 후크 - 사전 및 사후 파일 시스템 인젝션 스크립트
  • 빌드 구성 - 루트fs, 부팅 파티션, 레이아웃 및 버전 태그 정의

rpi-image-gen scheme

이러한 요소를 함께 사용하면 프로비저닝할 준비가 된 일관된 부팅 가능한 이미지를 생성할 수 있습니다.

설치

에서 설치 지침을 따르세요. 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 및 재현성

빌드 스크립트가 결정론적이면 CI/CD 파이프라인에 rpi-image-gen 를 CI/CD 파이프라인(예: GitHub Actions, GitLab CI, Jenkins)에 통합할 수 있습니다.

각 빌드는 추적 가능하고 버전이 지정된 아티팩트를 생성하여 안정적인 업데이트와 손쉬운 디버깅을 가능하게 하며, 이는 프로덕션급 배포를 위한 중요한 단계입니다.