نظام التشغيل Raspberry Pi؛ يجب أن تسمع عن هذا المصطلح في صناعة تكنولوجيا المعلومات الحديثة. بديل محتمل لأي جهاز كمبيوتر مكتبي / محمول عادي بتكلفة منخفضة للغاية. تم بناء أجهزة الكمبيوتر صغيرة الحجم أحادية اللوحة بواسطة مؤسسة Raspberry Pi Foundation. يمكن توصيل Raspberry Pi بأجهزة الإدخال / الإخراج العادية أي – شاشات العرض والماوس / لوحات المفاتيح. إلى جانب ذلك يأتي مع منفذ Ethernet ومحول Wi-Fi مدمج للاتصال.

إدارة Raspberry Pi الخاص بك بإستخدام Ansible
لماذا Raspberry Pi يحظى بشعبية كبيرة؟
عند الحديث أكثر عن Raspberry Pi فإنه يقوم بتشغيل نظام التشغيل Linux ويوفر مجموعة من دبابيس GPIO (إدخال / إخراج للأغراض العامة) والذي يسمح لك بالتحكم في المكونات الإلكترونية وبرمجتها. يحتوي Raspberry Pi على صور نظام تشغيل أصلي خاص به ويدعم أيضًا مجموعة متنوعة من أنظمة التشغيل القائمة على بنية ARM. أصبح Raspberry Pi شائعًا جدًا لمنصات إنترنت الأشياء ونظام AI المضغوط والعديد من التطبيقات الأخرى.
كيفية تخصيص (Customize) نظام التشغيل Raspberry Pi؟
سنرى اليوم كيف يمكننا تعديل صورة Raspberry Pi OS. أسهل طريقة ممكنة هي فقط تشغيل الصورة باستخدام Raspberry Pi Imager وتعديل الأشياء يدويًا حسب احتياجاتك. ولكن ماذا لو احتجنا إلى نظام تشغيل Raspberry Pi مخصص؟
لحل هذه المشكلة يمكننا استخدام أداة تسمى Packer تمكننا من إنشاء صورة مخصصة لنظام التشغيل Raspberry Pi OS.
البرنامج المساعد Packer لصور ARM
The Packer هي أداة لبناء الصور لمنصات أنظمة التشغيل المتعددة والتي تعمل مثل السحر لتصميم البنى التحتية للتطبيقات الحديثة. والأكثر إثارة للاهتمام أن Packer مفتوح المصدر (مجاني للاستخدام) ويأتي مع مجموعة متنوعة من المكونات الإضافية. يسمح Packer باستخدام المكونات الإضافية المخصصة المصممة لتحسين الوظائف الأساسية دون تغيير شفرة المصدر الأساسية. يبدو الأمر مرنًا جدًا لإضافة مكونات جديدة مثل المنشئين ومقدمي الخدمات ومصادر البيانات. تتكون مكونات Packer الإضافية بشكل أساسي من نوعين:
بناة (Builders) – سيتم استخدامه لإنشاء البنية التحتية
الموفرون (Provisioners) – سينفذون التغييرات المخصصة التي تريد إجراؤها في صورة نظام التشغيل.
في الإعداد التالي سنستخدم مكونًا إضافيًا من Packer مشابهًا لصور ARM. لا يدعم Natively Packer بناء صور نظام التشغيل القائم على ARM. يتوفر المكون الإضافي Packer المسمى solo-io / packer-builder-arm-image عبر GitHub لبناء الصور القائمة على ARM.
المتطلبات الأساسية
وفقًا لوثائق صورة solo-io / packer-builder-arm-image هناك بعض التبعيات والثنائيات التي يجب تثبيتها قبل البدء في إنشاء الصور المستندة إلى ARM لـ Raspberry Pi.
مضيف يستند إلى Linux (موصى به: Ubuntu 18.04 / 20.04 LTS)
git
packer
Packer ARM Builder البرنامج المساعد
قم بتثبيت حزم التبعية العامة والثنائيات على الجهاز المضيف.
sudo apt update sudo apt install git wget zip unzip build-essential kpartx qemu binfmt-support qemu-user-static e2fsprogs dosfstools
قم بتنزيل وتثبيت Packer على الجهاز المضيف.
export PACKER_RELEASE="1.6.6" cd /tmp/ wget https://releases.hashicorp.com/packer/${PACKER_RELEASE}/packer_${PACKER_RELEASE}_linux_amd64.zip unzip packer_${PACKER_RELEASE}_linux_amd64.zip sudo mv packer /usr/local/bin packer –version
في هذه المرحلة قمت بتثبيت Packer والتبعيات الضرورية لبناء الصور القائمة على ARM. أنت الآن بحاجة إلى تنزيل المكون الإضافي Packer ARM builder وتكوينه على الجهاز المضيف.
export PACKER_ARM_BUILDER_VERSION="0.1.6" cd /tmp/ wget https://github.com/solo-io/packer-builder-arm-image/releases/download/v${PACKER_ARM_BUILDER_VERSION}/packer-builder-arm-image sudo mv packer-builder-arm-image /usr/local/bin sudo chmod +x /usr/local/bin/packer-builder-arm-image
بناء صورة Raspberry Pi مع Packer ARM Plugin
دعونا نتجول في عملية بناء صورة Raspberry Pi. يدعم Packer العديد من مقدمي الخدمات السحابية / الأنظمة الأساسية باستخدام المكونات الإضافية للبناء. كما ناقشنا سابقًا نحن نستخدم المكون الإضافي solo-io / packer-builder-arm-image ARM builder هنا.
يمكنك تنزيل هذا النموذج الأولي وبدء استخدامه source4learn / raspberry-pi-os-image-builder من GitHub.
Clone GitHub repository git clone [email protected]:source4learn/raspberry-pi-os-image-builder.git cd raspberry-pi-os-image-builder
فيما يلي هيكل الدليل للمثال أعلاه. هنا لدينا تكوين JSON رئيسي لـ Packer وبعض نصوص Bash وملف تكوين إضافي.

في هذا المثال استخدمنا صورة Raspberry Pi Lite Buster وقمنا بتخصيصها لإظهار شاشة رش Raspberry Pi عند بدء التشغيل. لا يحتوي هذا الإصدار من Raspberry Pi على واجهة مستخدم بشكل أساسي لذلك قمنا بتثبيت Linux xserver وبرامج التشغيل الرسومية الأخرى.
ملف تكوين Packer JSON
قبل المضي قدمًا لبناء صورة Raspberry Pi دعنا نستكشف ما لدينا في ملف تكوين Packer JSON:
{ "variables": { "variable_key" : "variable_value" }, "builders": [ { "type": "arm-image", "iso_url": "<image-url>", "iso_checksum": "<image-checksum>", "target_image_size": <image-size-in-Kb> } ], "provisioners": [ { "type": "file", "source": "<source_file_path>", "destination": "<destination_file_path>" }, { "type": "shell", "inline": [ <commands_to_execute> ] }, { "type": "shell", "script": "<shell_path_to_execute>" } ] }
يحتوي ملف تكوين Packer JSON أعلاه على ثلاثة كائنات عالية المستوى الأول هو المتغيرات والثاني هو منشئ والثالث هو المزود.
في قسم المتغيرات يمكننا ببساطة تحديد المتغيرات في أزواج القيم الرئيسية. يحتوي قسم المنشئين الثاني على نوع المنشئ وعنوان URL لصورة ISO وقيمة المجموع الاختباري لصورة ISO وحجم صورة ARM المراد بناؤها. يتضمن قسم الموفرين الأخير الجزء التشغيلي من صورة ARM لعملية البناء. سيتم تنفيذ الخطوات المحددة ضمن الموفرين لتخصيص الصورة للإخراج المطلوب. المعلمات الشائعة لمقدمي الخدمة هي file و shell المضمنة و shell. ستقوم معلمة الملف بتحميل الملف إلى الصورة المستهدفة وتقوم shell بتنفيذ البرامج النصية Bash وتتيح لك shell المضمنة تنفيذ الأوامر المضمنة.
يبدو ملف تكوين Packer JSON الفعلي (packer-raspberry-pi-os-lite.json) كما هو موضح أدناه:
{ "variables": { }, "builders": [ { "type": "arm-image", "iso_url": "https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-03-25/2021-03-04-raspios-buster-armhf-lite.zip", "iso_checksum": "sha256:ea92412af99ec145438ddec3c955aa65e72ef88d84f3307cea474da005669d39", "target_image_size": 2147483648 } ], "provisioners": [ { "type": "file", "source": "./rasp.png", "destination": "/home/pi/rasp.png" }, { "type": "file", "source": "./scripts/.bash_profile", "destination": "/home/pi/.bash_profile" }, { "type": "file", "source": "./scripts/.xinitrc", "destination": "/home/pi/.xinitrc" }, { "type": "file", "source": "./scripts/splashscreen.service", "destination": "/etc/systemd/system/splashscreen.service" }, { "type": "shell", "inline": [ "echo 'Install APT Packages'", "echo nameserver 8.8.8.8 > /etc/resolv.conf", "apt-get update", "apt-get -y install --no-install-recommends xserver-xorg-video-all xserver-xorg-input-all xserver-xorg-core xinit x11-xserver-utils fbi curl", "rm -f /etc/motd", "chown pi:pi -R /home/pi/" ] }, { "type": "shell", "script": "./scripts/run.sh" } ] }
دعونا ننفذ أمر بناء Packer من دليل raspberry-pi-os-image-builder.
sudo packer build packer-raspberry-pi-os-lite.json
قد تستغرق عملية بناء صورة ARM هذه بعض الوقت حتى تكتمل. سوف تحصل على إخراج ملف output-arm-image/image. يمكنك التحقق من موقع الملف وحجمه كما هو مذكور أدناه.
# Check file location ls -la output-arm-image/image # Check file size du -hs output-arm-image/image
يمكنك أرشفة ملف صورة الإخراج لتقليل الحجم على القرص.
zip -r rpi-arm-image.zip output-arm-image/image
أخيرًا أصبحت صورة Raspberry Pi جاهزة لإعداد بطاقة SD وتشغيل جهاز Raspberry Pi. يمكنك استخدام Raspberry Pi Imager أو أي أداة أخرى لإنشاء بطاقة SD قابلة للتمهيد.
ملخص
يعتمد الإعداد أعلاه على صورة solo-io / packer-builder-arm والتي تعد مكونًا إضافيًا من Packer لصور ARM. يتوفر المكون الإضافي Packer ARM البديل kaczanowski / packer-builder-arm أيضًا مع بعض الميزات الإضافية مثل توسيع حجم القرص أو إنشاء صور ARM من البداية.
تواصل معنا في حال احتجت إلى مزيد من المساعدة.
بناء صورة Raspberry Pi مع Cockpit
بي جين
لنبدأ بـ pi-gen. قبل أن نبدأ هناك بعض المتطلبات الأساسية التي يتعين عليك مراعاتها.
لتشغيل عملية الإنشاء بنجاح يوصى باستخدام إصدار 32 بت من Debian Buster أو Ubuntu Xenial. قد يعمل أيضًا على أنظمة أخرى ولكن لتجنب المضاعفات غير الضرورية أوصي بإعداد جهاز افتراضي بأحد الأنظمة الموصى بها. إذا لم تكن على دراية بالأجهزة الافتراضية فقم بإلقاء نظرة على مقالتي جرب Linux على أي نظام تشغيل مع VirtualBox. عندما يكون كل شيء لديك قيد التشغيل فقم أيضًا بتثبيت التبعيات المذكورة في وصف المستودع. ضع في اعتبارك أيضًا أنك بحاجة إلى الوصول إلى الإنترنت في الجهاز الظاهري ومساحة حرة كافية على القرص. لقد قمت بإعداد جهازي الافتراضي باستخدام محرك أقراص ثابت سعة 40 جيجابايت والذي بدا أنه كافٍ.
من أجل اتباع التعليمات الواردة في هذه المقالة، قم بعمل نسخة من مستودع pi-gen أو قم بتقسيمه إذا كنت تريد البدء في تطوير صورتك الخاصة.
نظرة عامة على المستودع (Repository Overview)
يتم تقسيم عملية البناء الشاملة إلى مراحل. يتم تمثيل كل مرحلة كمجلد عادي وتمثل وسيطًا منطقيًا فيما يتعلق بصورة كاملة Raspberry Pi OS.
المرحلة 0: Bootstrap – يُنشئ نظام ملفات قابل للاستخدام
1: نظام الحد الأدنى (Minimal system) – ينشئ نظام الحد الأدنى المطلق
2: نظام Lite – يتوافق مع Raspberry Pi OS Lite
3: نظام سطح المكتب — تثبيت X11 و LXDE ومتصفحات الويب وما إلى ذلك
4: يتوافق مع نظام Raspberry Pi OS العادي
5: يتوافق مع نظام Raspberry Pi OS الكامل
المراحل تبنى على بعضها البعض: لا يمكن بناء مرحلة أعلى دون بناء المراحل السفلية. لا يمكنك استبعاد مرحلة في المنتصف أيضًا. على سبيل المثال لإنشاء Raspberry Pi OS Lite عليك إنشاء المراحل 0 و 1 و 2. لإنشاء نظام Raspberry Pi OS باستخدام سطح مكتب يجب عليك إنشاء المراحل 0 و 1 و 2 و 3 و 4 و 5 .
عملية البناء
يتم التحكم في عملية الإنشاء بواسطة build.sh والذي يمكن العثور عليه في مستودع الجذر. إذا كنت تعرف بالفعل كيفية قراءة وكتابة نصوص bash فلن تكون عقبة أمام فهم العملية المحددة هناك. إذا لم يكن الأمر كذلك فإن قراءة build.sh ومحاولة فهم ما يجري هو ممارسة جيدة حقًا. ولكن حتى بدون مهارات البرمجة النصية bash ستتمكن من إنشاء صورتك الخاصة باستخدام Cockpit المثبت مسبقًا.
بشكل عام تتكون عملية الإنشاء من عدة حلقات for متداخلة.
- حلقة المرحلة: حلقة خلال جميع أدلة المرحلة بترتيب تصاعدي
- تخطي المزيد من المعالجة إذا تم العثور على ملف يسمى SKIP
- قم بتشغيل البرنامج النصي prerun.sh
- الحلقة الفرعية: قم بالتكرار خلال كل دليل فرعي بترتيب تصاعدي وقم بمعالجة الملفات التالية إذا كانت موجودة:
- 00-run-sh: تعليمات تعسفية للتشغيل مقدمًا
- 00-run-chroot.sh: قم بتشغيل هذا البرنامج النصي في دليل chroot للصورة
- 00-debconfs: متغيرات لاختيار مجموعة debconf
- 00-packages: قائمة الحزم المراد تثبيتها
- 00 -pack-nr: على غرار 00-packages باستثناء أن هذا سيؤدي إلى التثبيت باستخدام المعلمة no-install-recommended -y إلى apt-get
- 00-patches: دليل يحتوي على ملفات تصحيح ليتم تطبيقها باستخدام لحاف
- بالعودة إلى حلقة المرحلة إذا تم العثور على ملف باسم EXPORT_IMAGE فقم بإنشاء صورة لهذه المرحلة
- إذا تم العثور على ملف باسم SKIP_IMAGE فتخط إنشاء الصورة
يتطلب build.sh أيضًا ملفًا يسمى config يحتوي على بعض المواصفات التي تتم قراءتها عند بدء التشغيل.
العمل (hands on)
أولاً سننشئ صورة Raspberry Pi OS Lite الأساسية. ستعمل صورة Raspberry Pi OS Lite كقاعدة لصورتنا المخصصة. قم بإنشاء ملف فارغ باسم config وأضف السطرين التاليين:
IMG_NAME='Cockpit' ENABLE_SSH=1
قم بإنشاء ملف فارغ باسم SKIP في الدلائل stage3 و stage4 و stage5. تصدر المرحلتان 4 و 5 صورة بشكل افتراضي لذلك أضف ملفًا فارغًا يسمى SKIP_IMAGE في المرحلة 4 والمرحلة 5.
افتح الآن Terminal وانتقل إلى المستخدم الجذر بكتابة su. انتقل إلى الدليل الجذر للمستودع وابدأ إنشاء البرنامج النصي عن طريق كتابة ./build.sh.
ستستغرق عملية البناء بعض الوقت.
بعد انتهاء عملية الإنشاء ستجد دليلين آخرين في جذر المستودع: العمل والنشر. يحتوي مجلد العمل على بعض المخرجات الوسيطة. في مجلد النشر يجب أن تجد ملف الصورة المضغوط جاهزًا للنشر.
إذا نجحت عملية البناء الإجمالية فيمكننا الآن تعديل العملية بحيث يتم تثبيت Cockpit بشكل إضافي.
سنکمل هذه العملیة في المقالات القادمة. تابعونا!
المصادر
This article is useful for me
1+ 2 People like this post