إدارة Raspberry Pi الخاص بك مع Ansible
حل لمشكلة تحديث Raspberry Pi التي يصعب الوصول إليها.

Raspberry Pi هو جهاز صغير متعدد الاستخدامات يجعل التفاعل مع العالم الحقيقي نسيمًا للبشر فقط. كانت فكرة مؤسسة Raspberry Pi هي بيع الأجهزة بتكلفة منخفضة بحيث يكون كسرها أمرًا محزنًا – ولكن ليس كارثة. هذا هو أحد أسباب نجاحها الكبير كأداة تعليمية. لكن فائدتها لم تفلت من عالم الأعمال حيث أصبحت أداة قيمة لأتمتة العالم المادي.
سواء تم استخدامها لتشغيل عروض المعلومات أو أتمتة الاختبار أو التحكم في الآلات أو مراقبة البيئة أو القيام بمهام أخرى. فإن الشركات ترى Raspberry Pi كأجهزة جادة للقيام بمهام جادة. لكل نموذج دورة حياة طويلة للمنتج – حتى النماذج القديمة (1B+ ، 2B ، 3A+ ، 3B ، و +3B) ستظل قيد الإنتاج حتى يناير 2026 على الأقل. هناك خطر ضئيل من أن تصبح قديمة لذا يمكنك الحفاظ على مخزون كبير ومعاملتها كمكونات معيارية تستبدلها بدلاً من إصلاحها.
الأجهزة المستقرة مقابل تغيير البرامج
بينما يمكنك الاعتماد على الأجهزة لتبقى ثابتة فإن الشيء نفسه لا ينطبق على البرنامج. نظام التشغيل الرسمي المدعوم لـ Raspberry Pi هو Raspberry Pi OS (المعروف سابقًا باسم Raspbian) ويجب تحديثه بانتظام للحصول على أحدث إصلاحات الأمان والأخطاء.
هذا يمثل مشكلة. نظرًا لأن Raspberry Pis يوفر جسرًا بين العالمين المادي والافتراضي فغالبًا ما يتم تثبيته في مواقع يصعب الوصول إليها. تميل أيضًا إلى أن يتم تثبيتها بواسطة الأشخاص الذين يعملون في الأجهزة وعادةً ما يكون كهربائيون للمصانع وفنيو تجميع المنتجات. لا تريد أن تضيع وقتهم من خلال مطالبتهم بتوصيل لوحة مفاتيح وشاشة وتسجيل الدخول لتشغيل raspi-config وتثبيت البرنامج باستخدام apt-get ثم تكوين البرنامج.
نظرًا لأن Raspberry Pi OS يقوم بإيقاف تشغيل بطاقة SD. فإن أحد الأساليب هو الحفاظ دائمًا على إصدار محدث من البرنامج على بطاقة SD التي يمكن للمثبت فقط توصيلها (والغراء الساخن). ضمان جودة جيد (QA) سيحتفظ القسم ببطاقات SD تحت التحكم في الإصدار. لذا يمكنك التأكد من أن جميع عمليات التثبيت الجديدة في أحدث إصدار. لكن صيانة هذا الحل مكلفة لأن كل تحديث للبرنامج يتطلب إعداد صورة جديدة ونسخها على جميع بطاقات SD. كما أنه لا يعالج كيفية إصلاح جميع أجهزتك الحالية. في بعض الحالات قد تحتاج إلى إنشاء صور مخصصة لـ Raspberry Pi تقوم بوظائف محددة وقد يكون من المحتم أن تحتاج إلى مُثبِّت لتوصيل لوحة مفاتيح وجهاز عرض لتهيئة شيء ما.
تتمثل الطريقة الأفضل في استخدام نفس الحد الأدنى من تثبيت نظام التشغيل الأساسي. ثم استخدام تمهيد الشبكة للحفاظ على جميع التخصيصات والتحديثات على الشبكة. يتطلب ذلك الحفاظ على صورة أساسية واحدة فقط والتي يسهل إدارتها لذا فهي طريقة جيدة إذا كان لديك بنية تحتية موثوقة للشبكة. لسوء الحظ لا تدعم جميع الشبكات هذه الطريقة. كما تقول وثائق تمهيد شبكة Raspberry Pi: “نظرًا للمجموعة الهائلة من أجهزة الشبكات المتاحة لا يمكننا ضمان عمل تمهيد الشبكة مع أي جهاز.” للأسف لم يعد خيارًا متاحًا في Raspberry Pi 4. علاوة على ذلك هذا ليس خيارًا عند فصل الأجهزة عن الشبكة لفترة طويلة من الزمن.
لذلك فإن الهدف الأفضل هو إنتاج صورة قاعدة مشتركة Raspberry Pi OS لا تتغير كثيرًا. ولكن بمجرد تثبيتها يمكن تخصيصها وصيانتها وإدارتها تلقائيًا عن بُعد.
إنشاء الصورة الأساسية (base image)
ستحتاج صورتك الأساسية بالتأكيد إلى تغييرات صغيرة من صورة Raspberry Pi OS الافتراضية. لحسن الحظ ما عليك سوى إعادة إنشاء الصورة الأساسية إذا تم تحديث صورة Raspberry Pi OS أو كنت بحاجة إلى تغيير شيء ما في التكوين الخاص بك. يبلغ الوقت المعتاد بين الإصدارات الرئيسية لنظام التشغيل Raspberry Pi حوالي عامين وهي دورة حياة صيانة جيدة الهدف. يمنحك متسعًا من الوقت لاستبدال الأجهزة القديمة بأجهزة جديدة مع الحفاظ على إمكانية إدارة الأشياء لقسم ضمان الجودة للحفاظ على الإصدارات. ستظل الإصدارات القديمة مدعومة للأمان وإصلاحات الأخطاء لبعض الوقت بعد ذلك.
النص الذي قمت بإنشائه:
- يقوم بتنزيل أحدث ملف صورة بتنسيق ZIP
- یتحقق من صحتها
- یستخرج الصورة نفسها
- يُمكّن SSH للإدارة الآمنة عن بُعد
- يغير كلمات المرور الافتراضية لمستخدمي الجذر و Pi
- يؤمن خادم SSH على Pi
منذ ذلك الحين عززت النص إلى:
- تمكين الاتصالات بشبكة WiFi (wpa_supplicant.conf)
- قم بتحميل التكوين الخاص به من ملف INI مع الاحتفاظ بالمعلومات الحساسة منفصلة عن النص الرئيسي.
- استخدم losetup لتبسيط تركيب الصورة
- قم بإنشاء برنامج نصي أولي (firstboot script)
- تضمن هذه التغييرات قفل الأجهزة قبل نشرها.
الآن هو الوقت المناسب لتعديل البرنامج النصي لبيئتك وخاصة لإضافة أي مفاتيح أمان أو شهادات رقمية ضرورية للمصادقة. ومع ذلك من الأفضل تأجيل إضافة أي تطبيقات أو تكوينات مخصصة في هذه المرحلة حيث يمكن إضافتها لاحقًا. بالنسبة للجزء الأكبر ستتصرف الصورة مثل صورة Raspberry Pi OS العامة مما يعني أنها ستقوم بتمهيد بطاقة SD وتغيير حجمها كالمعتاد وتثبيت البرامج الافتراضية والبرامج الثابتة النموذجية.
الإضافة البارزة هي دعم البرنامج النصي firstboot. هذا هو الغراء الذي يجعل Raspberry Pi يقوم بتشغيل التكوين المخصص الخاص بك بعد المرة الأولى التي يقوم فيها بتكوين نفسه. مرة أخرى أشجعك على تعديل البرنامج النصي لبيئتك. على سبيل المثال يمكنك جعل الجهاز يقوم بتسجيل نفسه وإجراء اختبار النظام وإجراءات التشخيص وسحب تطبيق العميل وما إلى ذلك.
إذا كنت لا ترغب في تخصيصه فسوف يقوم بالحد الأدنى المطلوب للحصول على Raspberry Pi الخاص بك على الشبكة بحيث يمكن التعرف عليه بشكل فريد بواسطة برنامج إدارة الشبكة.
قم بإعداد الإدارة التلقائية
إذا كنت تدير خوادم في بيئة DevOps فلن تغمض عينيك عن فكرة استخدام برنامج إدارة التكوين للتحكم في أجهزة Raspberry Pi الخاصة بك. إذا كنت تستخدم أداة تتطلب وكيلاً فيمكنك تضمين برنامج الوكيل كجزء من الصورة الأساسية. وبالنظر إلى الموارد الموجودة على Raspberry Pi قد يكون الحل بدون وكيل مثل Ansible هو الخيار الأفضل. إنه يستخدم SSH و Python فقط ولا يتطلب أي برامج إضافية على العميل وبرنامج التحكم سهل التثبيت وهو سهل الاستخدام.
كل ما تحتاجه هو برنامج Ansible وهو قائمة بالأجهزة التي تريد إدارتها المحفوظة في ملف جرد وكتيب التشغيل وهو عبارة عن مجموعة من الإرشادات التي تريد تنفيذها. على سبيل المثال يمكنك تحديث صورة نظام التشغيل Raspberry Pi OS الأساسية باستخدام apt update && apt full-upgrade. سيكون كتاب اللعب:
name: Run the equivalent of "apt-get update" as a separate step apt: update_cache: true cache_valid_time: 3600 - name: Update all packages to the latest version apt: upgrade: dist
قد تعتقد أن تثبيت Ansible لـ Raspberry Pi أمر مبالغ فيه لكنني أجد أنه من المفيد إذا كنت بحاجة إلى إدارة أكثر من جهازي كمبيوتر أو ثلاثة. يمنحك استخدام Ansible أيضًا شبكة أكثر صحة – حيث يتم تدقيق مخزونك وإدراجه في ملف المضيف الخاص به ويتم توثيق عمليات تثبيت البرامج من خلال كتيبات التشغيل الخاصة به ويتم الاحتفاظ بالبيانات والتكوينات بعيدًا عن أجهزتها بحيث يسهل نسخها احتياطيًا بانتظام.
وفقًا لـ Wikipedia تشمل أهداف تصميم Ansible ما يلي:
- الحد الأدنى في الطبيعة. يجب ألا تفرض أنظمة الإدارة تبعيات إضافية على البيئة.
- ثابت. مع Ansible يجب أن يكون المرء قادرًا على إنشاء بيئات متسقة.
- یؤمن. أنسبل لا تنشر الوكلاء إلى العقد. مطلوب فقط OpenSSH و Python على العقد المُدارة.
- موثوق بها للغاية. عند كتابته بعناية يمكن أن يكون دليل التشغيل Ansible فعالاً لمنع الآثار الجانبية غير المتوقعة على الأنظمة المدارة. من الممكن تمامًا أن يكون لديك كتاب قواعد اللعبة الذي تمت كتابته بشكل رديء وليس قاصرًا.
- الحد الأدنى من التعلم المطلوب. تستخدم كتيبات التشغيل لغة وصفية سهلة بناءً على قوالب YAML و Jinja.
يمكن لأي شخص لديه التفويض الصحيح تكوين جهاز ولكن يمكنك تقييد التفويض باستخدام أذونات Unix القياسية. يمكنك تطبيق وصول دقيق إلى كتيبات التشغيل بحيث على سبيل المثال يمكن لمشغلي الاختبار الوصول فقط إلى أدوات الاختبار والتشخيص التي تقوم بتثبيتها.
كيف تعمل Ansible؟
تخيل أن لديك مصنع عناصر واجهة مستخدم يتضمن Raspberry Pi في منتجها. يستخدمهم فريق منشآتك أيضًا لمراقبة المصنع البيئي والأمن. وبالمثل يستخدم الفريق الهندسي الأجهزة الموجودة على خطوط الإنتاج في عملية مراقبة التصنيع. ويستخدمها قسم تكنولوجيا المعلومات كمحطات طرفية غبية يمكن التخلص منها للوصول إلى نظام تخطيط موارد المؤسسة (ERP) في المكتب الرئيسي. في كل هذه الحالات يجب تقليل وقت التوقف عن العمل إلى الحد الأدنى.
نهدف إلى تقديم نفس الجهاز بالضبط بنفس الصورة لكل فريق.
تجهيز الصورة
المشترك بين جميع المراحل هو تحضير الصورة نفسها. بعد استنساخ البرنامج النصي fix-ssh-on-pi.bash من github يلزم اتخاذ إجراء لمرة واحدة لتحرير وإعادة تسمية الملفات fix-ssh-on-pi.ini_example لإصلاح ssh-on-pi.ini و wpa_supplicant .conf_example إلى wpa_supplicant.conf.
ما عليك سوى تشغيل البرنامج النصي في أي وقت يتم فيه تحديث نظام Raspberry Pi OS (Raspbian) أو عند تغيير ملفات التكوين الخاصة بك. أوصي بتضمين هذا كجزء من سير عمل devops الخاص بك. إذا لم يكن لديك ذلك في مكانه بعد فيمكن أتمتة باستخدام دالة cron بسيطة.
أوصي بوجود محطة Raspberry Pi مخصصة لحرق أحدث بطاقات SDCards في غرفة المتجر. سيؤدي هذا تلقائيًا إلى نسخ أحدث صورة من الشبكة بمجرد إدخال بطاقة جديدة في قارئ بطاقة SD الخارجي. مع بعض الخيال وطابعة ثلاثية الأبعاد يمكن تصنيع وحدة لطيفة لتقديم ملاحظات حول التقدم.
عندما يتم طلب Raspberry Pi يمكن لأمناء المتجر بعد ذلك إزالة إحدى بطاقات SDCard المنتهية وتضمينها مع أمر العمل.
الجرد (Inventory) / ملف المضيفين (Hosts File)
في مثالنا الوهمي سيتم تحديد دور الجهاز من خلال موقع الشبكة التي اتصل بها. لذلك نحن بحاجة إلى أن نكون قادرين على التعرف على فطائر التوت بمجرد دخولها إلى الشبكة. ستعتمد طريقة التعامل مع هذا تمامًا على كيفية تكوين شبكتك والأدوات المتاحة لك.
سيكون لكل قسم خادم إمداد خاص به يقوم بتشغيل برنامج Ansible Software والذي يمكن أن يكون بالطبع Raspberry Pi آخر. إنها أذونات unix / ssh القياسية التي تملي من يمكنه الوصول إلى ما داخل مؤسستك.
كيف يصبح خادم التزويد على علم بالأجهزة الجديدة يمكن أن يكون نشطًا أو خاملًا.
يمكن أن يكون لديك نص التمهيد الأول الذي يستدعي بنشاط عنوان url لتسجيل نفسه. ستحتاج إلى أن يكون لديك تطبيق ويب يستمع ويستخدم المعلومات المستلمة لتسجيل المضيف الجديد في Ansible Inventory.
قد يكون هذا أسلوبًا جيدًا للأقسام حيث يتم استبدال الأجهزة بشكل غير متكرر وتريد توفيرها في أقرب وقت ممكن. كمثال عندما يتم استبدال محطة مراقبة جودة المياه سيكون من الجيد أن يتم تسجيلها. يمكن للكهربائي بعد ذلك تحديد Playbook الدقيق للنشر على الجهاز عبر تطبيق هاتف ذكي.
من ناحية أخرى قد يكون النهج السلبي أفضل إذا كنت ستقوم بتثبيت الأجهزة باستمرار مثل خط الإنتاج. في هذه الحالة يمكننا أن نفترض أنه سيتم تثبيت برنامج الاختبار والتشخيص الخاص بنا في بداية الخط لأي أجهزة جديدة موجودة على شبكة خط الإنتاج. يمكن أيضًا إزالة هذا تلقائيًا قبل الشحن.
أحد التغييرات التي يقوم بها fix-ssh-on-pi.bash هو أنه يعيد تسمية اسم المضيف لكل Raspberry Pi إلى إصدار يعتمد على عنوان Ethernet MAC الخاص به. كمثال سينتج عن عنوان Ethernet MAC الخاص بـ dc: a6: 32: 01: 23: 45 اسم مضيف لـ dca632012345.
عندما ينتهي Raspberry Pi من تسلسل التمهيد لأول مرة ستطلب إعادة التشغيل التلقائي الثالثة عنوان IP من خادم DHCP الخاص بك وسيصبح اسم المضيف هذا (على الأرجح) متاحًا في شبكة DNS المكتبية.
في هذه المرحلة يمكن الوصول إلى Raspberry Pi باستخدام شيء مثل ssh dca632012345 أو ssh dca632012345.local أو ssh dca632012345.lan أو في مثالنا ssh dca632012345.production.example.com.
قم بتنفيذ playbook
بغض النظر عن كيفية إدراك خادم التوفير للأجهزة فأنت تعلم الآن أنها موجودة. في هذا المثال ستنشر كتيبات لعب مختلفة بناءً على الشبكة الفرعية التي يوجد بها الجهاز.
ربما يكون هذا هو أبسط دليل يمكنك تجربته.
name: Test Ping hosts: all tasks: - action: ping
يجب أن يكون لديك الآن كل ما تحتاجه للتواصل مع الأجهزة الجديدة:
ansible-playbook --inventory-file all_pies.ini ping-example-playbook.yaml
من خلال تعديل دليل التشغيل يمكنك تحديث وتهيئة أجهزتك بالطريقة التي تريدها. أستخدم هذا لإنشاء مستخدمين وتحديث النظام إلى أحدث إصدار وإضافة البرامج وإزالتها وإجراء التكوينات الأخرى.
اجعل إدارة Raspberry Pi أسهل
آمل أن يكون هذا قد فتح عقلك حول كيفية التعامل مع إدارة العديد من الأجهزة بسهولة أكبر. كل ما تحتاجه للبدء هو جهاز الكمبيوتر أو الكمبيوتر المحمول و Raspberry Pi. إن مبادئ حرق صورة عامة وإنشاء مخزون للأجهزة ونشر دليل التشغيل هي نفسها سواء كنت تعمل على نطاق صغير أو توسيع نطاقه إلى مئات الأجهزة.
This article is useful for me
1+ 1 People like this post