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 کیز، وائی فائی کریڈینشلز اور ڈیوائس آئی ڈیز کو ایمبیڈ کرنا
یہ پروٹوٹائپ سے پروڈکشن تک جانے کا سب سے تیز طریقہ ہے، جبکہ آپ اپنے سسٹم سیٹ اپ پر مکمل کنٹرول رکھتے ہیں۔
بنیادی تصورات
ایک عام rpi-image-gen منصوبہ درج ذیل اجزاء پر مشتمل ہوتا ہے:
- بنیادی تصویر — سرکاری Raspberry Pi OS لائٹ
- اوورلے ڈائریکٹری — آپ کی اضافی فائلیں، سروسز، اور اسکرپٹس
- کسٹمائزیشن ہکس — فائل سسٹم انجیکشن سے پہلے اور بعد کے اسکرپٹس
- بلڈ کنفیگریشن — روٹ ایفز، بوٹ پارٹیشنز، لے آؤٹ، اور ورژن ٹیگز کی تعریف
یہ عناصر مل کر ایک مستقل، بوٹ ایبل امیج بناتے ہیں جو پروویژننگ کے لیے تیار ہے۔
تنصیب
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)۔
ہر بلڈ ایک ٹریس ایبل، ورژن شدہ آرٹیفیکٹ پیدا کرتا ہے، جو قابل اعتماد اپ ڈیٹس اور آسان ڈیبگنگ کو ممکن بناتا ہے — جو پروڈکشن گریڈ کی تعیناتی کی طرف ایک اہم قدم ہے۔
اس سلسلے کے مضامین
ذرائع
- 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
- swugenerator: https://github.com/sbabic/swugenerator