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 انفراسٹرکچر سے فائدہ اٹھاتا ہے۔ اس سے آپ کو یہ سہولت ملتی ہے:

  • کنفیگریشن فائلز، سروسز، اور صارفین کا اضافہ
  • سسٹمڈ یونٹس کو فعال یا غیر فعال کرنا
  • پری انسٹال ایپلیکیشنز اور ڈیپینڈنسیز
  • SSH کیز، وائی فائی کریڈینشلز اور ڈیوائس آئی ڈیز کو ایمبیڈ کرنا

یہ پروٹوٹائپ سے پروڈکشن تک جانے کا سب سے تیز طریقہ ہے، جبکہ آپ اپنے سسٹم سیٹ اپ پر مکمل کنٹرول رکھتے ہیں۔

بنیادی تصورات

ایک عام rpi-image-gen منصوبہ درج ذیل اجزاء پر مشتمل ہوتا ہے:

  • بنیادی تصویر — سرکاری Raspberry Pi OS لائٹ
  • اوورلے ڈائریکٹری — آپ کی اضافی فائلیں، سروسز، اور اسکرپٹس
  • کسٹمائزیشن ہکس — فائل سسٹم انجیکشن سے پہلے اور بعد کے اسکرپٹس
  • بلڈ کنفیگریشن — روٹ ایفز، بوٹ پارٹیشنز، لے آؤٹ، اور ورژن ٹیگز کی تعریف

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

ہر بلڈ ایک ٹریس ایبل، ورژن شدہ آرٹیفیکٹ پیدا کرتا ہے، جو قابل اعتماد اپ ڈیٹس اور آسان ڈیبگنگ کو ممکن بناتا ہے — جو پروڈکشن گریڈ کی تعیناتی کی طرف ایک اہم قدم ہے۔