كيفية إنشاء صورة مخصصة لنظام التشغيل Raspberry Pi OS

نظام التشغيل Raspberry Pi OS

نظام التشغيل 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 OS

في هذا المثال استخدمنا صورة 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 بشكل إضافي.

سنکمل هذه العملیة في المقالات القادمة. تابعونا!

المصادر

الأول
الثاني

منشور ذات صلة
نماذج CAD 4 Minutes

أفضل نماذج CAD ثلاثية الأبعاد| الجزء الأول

أمير مقدم

يعد إنشاء نماذج CAD طريقة مثالية لاكتشاف مداخل وعموم أي جزء. ومع ذلك، في بعض الأحيان نصطدم بجدار – فقط ما الذي يجب أن نصنعه بعد ذلك؟ بغض النظر عما إذا كنت مبتدئًا في CAD أو قديمًا ، فهناك دائمًا أوقات نحتاج فيها إلى القليل من الإلهام.

ناقل الضغط 5 Minutes

ما هو ناقل الضغط وكيف يعمل؟

أمير مقدم

أجهزة إرسال الضغط أو ناقل الضعط (Pressure transmitters) عبارة عن معدات مستخدمة على نطاق واسع يمكنها تحويل ضغط النظام إلى إشارات كهربائية وإرسالها إلى وحدة التحكم. تستخدم هذه المعدات أيضًا لقياس الكميات الأخرى.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

السلة