Buildroot: إنشاء برامج ثابتة عبر النظام الأساسي باستخدام خادم zabbix

Buildroot: إنشاء برامج ثابتة عبر النظام الأساسي باستخدام خادم zabbix

История задачи

من ناحية أخرى ، تحتاج الشركات الصغيرة الحجم إلى مراقبة عالية الجودة لبنيتها التحتية (خاصة في ظل انتشار الظاهرية على نطاق واسع) ، ومن ناحية أخرى ، يصعب عليها مالياً شراء معدات جديدة. غالبًا ما تكون هناك مشكلات مع الخادم / الأجهزة: غالبًا ما يكون هناك 1-3 خوادم برجية بجوار محطات عمل المستخدم أو في مكان صغير / خزانة.

من الأسهل استخدام مجموعة جاهزة (مجموعة توزيع) ، وهو ما يكفي للتحميل إلى بطاقة microSD وإدخالها في جهاز كمبيوتر مشترك أحادي اللوحة (عائلات beaglebone و raspberry pi و orange pi ، لوحة asus tinker). بالإضافة إلى ذلك ، فإن هذه المعدات غير مكلفة ويمكن تركيبها في أي مكان.

صياغة المشكلة

من نواح كثيرة ، تطور المشروع كنوع من العمل المخبري مع إمكانية تطبيق النتائج.

تم اختيار Zabbix كنظام مراقبة ، لأنه نظام قوي ومجاني وموثق جيدًا.

نشأ السؤال مع النظام الأساسي للأجهزة ، كما أن وضع جهاز منفصل تحت المراقبة ليس حلاً جيدًا - إما أنه مكلف لشراء معدات جديدة ، أو للبحث عن معدات قديمة + في الشركات الصغيرة هناك مشاكل متكررة مع الخادم / الأجهزة.

يتيح لك استخدام نظام buildroot build حلولاً مخصصة يمكن تشغيلها من قبل الموظفين مع الحد الأدنى من المعرفة بعائلة أنظمة تشغيل Linux. هذا النظام مناسب للمبتدئين ، ولكنه في نفس الوقت يوفر فرصًا كبيرة للتخصيص في أيدي مطور متمرس. إنه مثالي لحل مشكلة المراقبة غير المكلفة ، ولكن كاملة الميزات للبنية التحتية لتكنولوجيا المعلومات ، والتي تتطلب الحد الأدنى من التدريب للموظفين الذين يقومون بتشغيلها.

خطوات الحل

تقرر في البداية إنشاء برنامج ثابت لتشغيل x86_64 في qemu ، نظرًا لأن هذا يعد حل تصحيح أخطاء مناسبًا وسريعًا. ثم قم بنقله إلى جهاز كمبيوتر ذو لوحة واحدة بذراع (أحببت لوحة ASUS tinker).

تم اختيار buildroot كنظام بناء. في البداية ، كانت تفتقر إلى حزمة zabbix ، لذلك اضطررت إلى نقلها. كانت هناك مشاكل مع اللغة الروسية ، والتي تم حلها عن طريق تطبيق التصحيحات المناسبة (ملاحظة: في إصدارات buildroot الأحدث ، لم تعد هناك حاجة لهذه التصحيحات).

سيتم وصف نقل حزمة zabbix نفسها في مقالة منفصلة.

نظرًا لأن كل شيء يجب أن يعمل مثل البرامج الثابتة (صورة نظام غير قابلة للتغيير + ملفات تكوين / قواعد بيانات قابلة للاسترداد) ، كان من الضروري كتابة أهداف systemd وخدماتنا وأجهزة ضبط الوقت (الهدف ، الخدمة ، المؤقت).

تقرر تقسيم الوسائط إلى قسمين - قسم به ملفات النظام وقسم به تكوينات قابلة للتغيير وملفات قاعدة بيانات zabbix.

اتضح أنه من الأصعب قليلاً حل المشكلات المتعلقة بقاعدة البيانات. لم تكن هناك رغبة كبيرة في وضعه مباشرة على الناقل. في الوقت نفسه ، يمكن أن يصل حجم قاعدة البيانات إلى حجم يتجاوز حجم رامديسك المحتمل. لذلك ، تم اختيار حل وسط: توجد قاعدة البيانات في القسم الثاني من بطاقة sd (تحتوي بطاقات SLC الحديثة على ما يصل إلى 30 دورة كتابة) ، ولكن هناك إعداد يسمح لك باستخدام الوسائط الخارجية (على سبيل المثال ، USB- hdd).

تم تنفيذ مراقبة درجة الحرارة من خلال جهاز RODOS-5. بالطبع ، يمكنك استخدام dallas 1820 مباشرة ، لكن توصيل USB كان أسرع وأسهل.

تم اختيار grub86 كمحمل إقلاع لـ x64_2. كان مطلوبًا كتابة الحد الأدنى من التكوين للتشغيل.

بعد تصحيح الأخطاء في qemu ، تم إجراء النقل إلى لوحة ASUS tinker. في بنية التراكب الخاص بي ، تم وضع النظام الأساسي المشترك في البداية - تخصيص التكوينات الخاصة بكل لوحة (لوحة defconfig ، أداة تحميل التشغيل ، إنشاء الصور مع قسم النظام) والحد الأقصى من الرتابة في إعداد نظام الملفات / إنشاء صورة بالبيانات . في ضوء هذا الإعداد ، سارت عملية النقل بسرعة.

يوصى بشدة بقراءة المقالات التمهيدية:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

كيفية التجمع

يتم تخزين المشروع على جيثب
بعد استنساخ المستودع ، يتم الحصول على بنية الملف التالية:

[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.sh

buildroot-2019.05.tar.gz - أرشيف buildroot نظيف
التراكب هو دليل الشجرة الخارجي الخاص بي. يتم تخزين كل ما تحتاجه لتجميع البرامج الثابتة باستخدام buildroot
README.md - وصف المشروع والدليل باللغة الإنجليزية.
run_me.sh هو نص يقوم بإعداد نظام البناء. يوسع buildroot من الأرشيف ، ويربط تراكبًا به (عبر آلية الشجرة الخارجية) ويسمح لك بتحديد اللوحة المستهدفة للبناء

[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Select defconfig, press A for abort. Default [0]

بعد ذلك ، ما عليك سوى الانتقال إلى دليل buildroot-2019.05 وتشغيل الأمر make.
بعد اكتمال البناء ، ستكون جميع نتائج الإنشاء في دليل الإخراج / الصور:

[alexey@comp buildroot-2019.05]$ ls -1 output/images/
boot.img
boot.vfat
bzImage
data
data.img
external.img
external.qcow2
grub-eltorito.img
grub.img
intel-ucode
monitor-0.9-beta.tar.gz
qemu.qcow2
rootfs.cpio
sdcard.img
sys
update

الملفات المطلوبة:

  • sdcard.img - صورة وسائط للكتابة على بطاقة sd (عبر dd أو rufus تحت wibdows).
  • qemu.qcow2 - صورة وسائط لتشغيلها في qemu.
  • External.qcow2 - صورة وسائط خارجية لقاعدة البيانات
  • monitor-0.9-beta.tar.gz - أرشيف للتحديث عبر واجهة الويب

التوليد اليدوي

لا يستحق كتابة نفس التعليمات عدة مرات. والشيء الأكثر منطقية هو كتابتها مرة واحدة في تخفيض السعر ، ثم تحويلها إلى PDF للتنزيل و html لواجهة الويب. هذا ممكن بفضل حزمة pandoc.

في الوقت نفسه ، تحتاج إلى إنشاء كل هذه الملفات قبل تجميع صورة النظام ، فهذه البرامج النصية بعد الإنشاء غير مجدية بالفعل. لذلك ، يتم إنشاء الجيل في شكل حزمة كتيبات. يمكنك رؤيته في تراكب / حزمة / كتيبات.

ملف manuals.mk (الذي يقوم بجميع الأعمال)

################################################################################
#
# manuals
#
################################################################################

MANUALS_VERSION:= 1.0.0
MANUALS_SITE:= ${BR2_EXTERNAL_monitorOverlay_PATH}/package/manuals
MANUALS_SITE_METHOD:=local

define MANUALS_BUILD_CMDS
    pandoc -s -o ${TARGET_DIR}/var/www/manual_en.pdf ${BR2_EXTERNAL_monitorOverlay_PATH}/../README.md
    pandoc -f markdown -t html -o ${TARGET_DIR}/var/www/manual_en.html ${BR2_EXTERNAL_monitorOverlay_PATH}/../README.md
endef

$(eval $(generic-package))

سيستم دي

ينتقل عالم Linux بنشاط إلى systemd ، وكان علي أن أفعل ذلك أيضًا.
من الابتكارات الممتعة - وجود أجهزة ضبط الوقت. بشكل عام ، يتم كتابة مقال منفصل عنهم (وليس عنهم فقط) ، لكنني سأتحدث عنهم بإيجاز.

هناك إجراءات يجب القيام بها بشكل دوري. كنت بحاجة إلى تشغيل logrotate لتنظيف سجلات lighttpd و php-fpm. الأكثر شيوعًا هو كتابة الأوامر في cron ، لكنني قررت استخدام مؤقت النظام الرتيب. لذا فإن logrotate يعمل بعد فترة زمنية صارمة.

بالطبع ، من الممكن إنشاء مؤقتات تعمل في تواريخ معينة ، لكنني لم أكن بحاجة إلى ذلك.
مثال على عداد الوقت:

  • ملف المؤقت
    
    [Unit]
    Description=RODOS temp daemon timer

[المؤقت] OnBootSec = دقيقة واحدة
OnUnitActiveSec = 1 دقيقة

[تثبيت] WantedBy = timers.target

- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon

[Service]
ExecStart=/usr/bin/rodos.sh

المجالس المدعومة

لوحة Asus tinker هي اللوحة الرئيسية التي يجب أن يعمل كل شيء عليها. تم اختياره على أنه غير مكلف وقوي للغاية.

Beaglebone black هي اللوحة الأولى التي تم اختبار العمل عليها (أثناء اختيار لوحة أكثر قوة).

Qemu x86_64 - يستخدم لتطوير التصحيح.

كيف يعمل

عند بدء التشغيل ، تتم استعادة الإعدادات على مرحلتين:

  • بدء تشغيل البرنامج النصي settings_restore (عبر خدمة). يستعيد إعدادات النظام الأساسية - المنطقة الزمنية ، والإعدادات المحلية ، وإعدادات الشبكة ، وما إلى ذلك.
  • بدء تشغيل البرنامج النصي للتحضير (عبر الخدمة) - zabbix ، يتم إعداد قاعدة البيانات هنا ، يتم عرض IP في وحدة التحكم.

في البداية الأولى ، يتم تحديد حجم القسم الثاني من بطاقة sd. في حالة استمرار وجود مساحة غير مخصصة ، تتم إعادة تقسيم الوسائط ، ويشغل قسم البيانات كل المساحة الخالية. يتم ذلك لتقليل حجم صورة التثبيت (sdcard.img). أيضًا ، يتم إنشاء دليل العمل postgresql في هذه المرحلة. هذا هو السبب في أن الإطلاق الأول بوسائط جديدة سيكون أطول من الإصدارات اللاحقة.

عند توصيل محرك أقراص خارجي ، في وقت بدء التشغيل ، فإنه يبحث عن محرك أقراص مجاني ويقوم بتنسيقه في ext4 مع التسمية الخارجية.

انتباه! عند توصيل محرك أقراص خارجي (بالإضافة إلى فصله أو استبداله) ، تحتاج إلى نسخ الإعدادات احتياطيًا واستعادتها!

يستخدم جهاز RODOS 5 لمراقبة درجة الحرارة ، حيث توفر الشركة المصنعة رموز المصدر الخاصة بفائدته للعمل مع الجهاز. عند تشغيل النظام ، يبدأ مؤقت rodos ، الذي يقوم بتشغيل هذه الأداة المساعدة مرة واحدة في الدقيقة. تتم كتابة درجة الحرارة الحالية في ملف / tmp / rodos_current_temp ، وبعد ذلك يمكن لـ zabbix مراقبة هذا الملف كمستشعر.

يتم تحميل وسائط تخزين التكوين على دليل / data.

عند بدء تشغيل النظام وتجهيزه للتشغيل ، تظهر الرسالة التالية في وحدة التحكم:

System starting, please wait

بعد اكتمال العمل التحضيري ، سيتغير إلى إخراج عنوان IP:

current ip 192.168.1.32
Ready to work

إعداد zabbix لرصد درجة الحرارة

لمراقبة درجة الحرارة ، يكفي اتخاذ خطوتين:

  • قم بتوصيل جهاز RODOS بمنفذ USB
  • إنشاء عنصر البيانات في zabbix

افتح واجهة الويب zabbix:

  • افتح القسم Configuration → Hosts
  • انقر فوق العناصر الموجودة في سطر خادم zabbix الخاص بنا
  • انقر فوق إنشاء عنصر

Buildroot: إنشاء برامج ثابتة عبر النظام الأساسي باستخدام خادم zabbix

أدخل البيانات التالية:

  • الاسم - متروك لك (على سبيل المثال ، serverRoomTemp)
  • اكتب - وكيل zabbix
  • مفتاح - رودوس
  • نوع رقمي
  • الوحدات- C
  • فترة تخزين التاريخ - فترة تخزين التاريخ. بقي 10 أيام
  • فترة تخزين الاتجاه - فترة التخزين لديناميات التغييرات. متبقي 30 يومًا
  • درجة حرارة غرفة خادم التطبيقات الجديدة

واضغط على زر ADD.
Buildroot: إنشاء برامج ثابتة عبر النظام الأساسي باستخدام خادم zabbix

إدارة الإعدادات عبر واجهة الويب

واجهة الويب مكتوبة بلغة php. هناك وظائف رئيسية:

  • عرض حالة الجهاز
  • تغيير إعدادات الشبكة
    Buildroot: إنشاء برامج ثابتة عبر النظام الأساسي باستخدام خادم zabbix
  • تغيير كلمة مرور المستخدم
  • اختيار المنطقة الزمنية
  • النسخ الاحتياطي / الاستعادة / إعادة ضبط المصنع
  • القدرة على توصيل محرك أقراص خارجي
  • تحديث النظام
    Buildroot: إنشاء برامج ثابتة عبر النظام الأساسي باستخدام خادم zabbix

تسجيل الدخول إلى واجهة الويب محمي بكلمة مرور. صفحة البداية - دليل.

عنوان واجهة zabbix: $ {ip / dns} / zabbix
عنوان واجهة الإدارة: $ {ip / dns} / إدارة
Buildroot: إنشاء برامج ثابتة عبر النظام الأساسي باستخدام خادم zabbix

يعمل في qemu

qemu-system-x86_64 -smp 4 -m 4026M -enable-kvm-machine q35، Accel = kvm -device intel-iommu -cpu host -net nic -net bridge، br = bridge0 -device Virtio-scsi-pci، id = scsi0 -drive file = الإخراج / الصور / qemu.qcow2، format = qcow2، aio = thread -device Virtio-scsi-pci، id = scsi0 -drive file = output / images / external.qcow2، format = qcow2، aio = thread

سيبدأ هذا الأمر نظامًا مكونًا من 4 مراكز و 2048 RAM و KVM ممكنًا وبطاقة شبكة bridge0 وقرصين: للنظام وآخر خارجي لـ postgresql.

يمكن تحويل الصور وتشغيلها في Virtualbox:

qemu-img convert -f qcow2  qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2  external.qcow2 -O vdi external.vdi

ثم قم باستيرادها إلى Virtualbox والاتصال عبر sata.

اختتام

في هذه العملية ، أصبح من المثير للاهتمام بالنسبة لي أن أجعل منتجًا جاهزًا للعمل - بواجهة غير جميلة جدًا (لا أحب كتابتها) ، ولكنه يعمل ويسهل إعداده.

أظهرت المحاولة الأخيرة لتثبيت جهاز zabbix في KVM صحة هذه الخطوة (بعد اكتمال التثبيت ، لا يبدأ النظام). ربما أفعل شيئًا خاطئًا 😉

المواد

https://buildroot.org/

المصدر: www.habr.com

إضافة تعليق