Buildroot: ایجاد سیستم عامل کراس پلتفرم با سرور zabbix

Buildroot: ایجاد سیستم عامل کراس پلتفرم با سرور zabbix

تاریخچه مشکل

شرکت های کوچک از یک سو نیاز به نظارت با کیفیت بالا بر زیرساخت های خود دارند (به ویژه با توجه به مجازی سازی گسترده)، از طرف دیگر خرید تجهیزات جدید برای آنها از نظر مالی دشوار است. مشکلات سرور/سخت افزار نیز رایج است: اغلب 1-3 سرور برج در کنار ایستگاه های کاری کاربر یا در یک طاقچه/کمد کوچک وجود دارد.

استفاده از مونتاژ آماده (توزیع) آسان تر است، که فقط باید آن را روی کارت microSD آپلود کرده و در یک کامپیوتر تک برد معمولی قرار دهید (خانواده های beaglebone، raspberry pi و orange pi، asus tinker board). علاوه بر این، چنین تجهیزاتی ارزان هستند و می توانند در هر مکانی نصب شوند.

بیانیه مشکل

از بسیاری جهات، این پروژه به عنوان نوعی کار آزمایشگاهی با امکان اعمال نتایج توسعه یافت.

Zabbix به عنوان سیستم نظارتی انتخاب شد زیرا یک سیستم قدرتمند، رایگان و مستند است.

مشکل پلت فرم سخت افزاری حاد شده است. قرار دادن یک دستگاه جداگانه تحت نظارت نیز راه حل خیلی خوبی نیست - یا خرید تجهیزات جدید گران است یا جستجوی تجهیزات قدیمی + در شرکت های کوچک مشکلات مکرر با سرور وجود دارد/ سخت افزار

استفاده از سیستم ساخت buildroot به شما امکان می دهد راه حل های تخصصی ایجاد کنید که توسط پرسنلی با حداقل دانش سیستم عامل لینوکس قابل اجرا باشد. این سیستم برای مبتدیان دوستانه است، اما در عین حال فرصت های سفارشی سازی فراوانی را در دستان یک توسعه دهنده با تجربه فراهم می کند. این برای حل مشکل نظارت ارزان، اما کاملاً کاربردی زیرساخت های فناوری اطلاعات، با حداقل نیازها برای آموزش کارکنانی که آن را اداره می کنند، عالی است.

مراحل حل

تصمیم گرفته شد که ابتدا سیستم عامل x86_64 را برای اجرا در qemu ایجاد کنیم، زیرا این یک راه حل راحت و سریع برای اشکال زدایی است. سپس آن را به یک کامپیوتر تک برد بازویی پورت کنید (من از برد asus خوشم آمد).

buildroot به عنوان سیستم ساخت انتخاب شد. در ابتدا فاقد پکیج zabbix بود بنابراین باید پورت می شد.مشکلاتی در زبان روسی وجود داشت که با اعمال وصله های مناسب حل شد (توجه: در نسخه های جدید بیلد روت دیگر نیازی به این پچ ها نیست).

انتقال خود بسته zabbix در مقاله ای جداگانه توضیح داده خواهد شد.

از آنجایی که همه چیز باید به عنوان سیستم عامل (تصویر سیستم غیرقابل تغییر + فایل های پیکربندی / پایگاه داده قابل بازیابی) کار کند، لازم بود اهداف، سرویس ها و تایمرهای سیستم خود را بنویسید (هدف، سرویس، تایمر).

تصمیم گرفته شد که رسانه ها به 2 بخش تقسیم شوند - یک بخش با فایل های سیستم و یک بخش با تنظیمات قابل تغییر و فایل های پایگاه داده zabbix.

حل مشکلات مربوط به پایگاه داده کمی دشوارتر بود. من نمی خواستم آن را مستقیماً در رسانه ها قرار دهم. در همان زمان، اندازه پایگاه داده می تواند به اندازه ای برسد که از اندازه یک ramdisk احتمالی بیشتر شود. بنابراین، یک راه حل مصالحه انتخاب شد: پایگاه داده در پارتیشن دوم کارت SD قرار دارد (کارت های SLC مدرن تا 30 چرخه نوشتن دارند)، اما تنظیماتی وجود دارد که امکان استفاده از رسانه های خارجی را فراهم می کند (به عنوان مثال، usb- hdd).

پایش دما از طریق دستگاه RODOS-5 اجرا شد. البته، می‌توانید مستقیماً از Dallas 1820 استفاده کنید، اما اتصال USB سریع‌تر و آسان‌تر بود.

grub86 به عنوان بوت لودر برای x64_2 انتخاب شد. برای راه اندازی آن لازم بود یک پیکربندی حداقلی بنویسید.

پس از رفع اشکال در qemu، به برد asus tinker منتقل شد. ساختار همپوشانی من در ابتدا به صورت چند پلتفرمی در نظر گرفته شده بود - تخصیص پیکربندی های خاص برای هر برد (تلفیق پیکربندی برد، بوت لودر، تولید تصویر با پارتیشن سیستم) و حداکثر یکنواختی در سفارشی کردن سیستم فایل/ایجاد تصویر با داده ها. با توجه به چنین آماده سازی، حمل و نقل به سرعت انجام شد.

خواندن مقالات مقدماتی به شدت توصیه می شود:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

نحوه مونتاژ

این پروژه در github ذخیره می شود
پس از شبیه سازی مخزن، ساختار فایل زیر به دست می آید:

[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 اسکریپتی است که سیستم ساخت را آماده می کند. بیلد روت را از بایگانی گسترش می دهد، یک پوشش به آن متصل می کند (از طریق مکانیزم درخت خارجی) و به شما امکان می دهد برد مورد نظر را برای مونتاژ انتخاب کنید.

[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 - بایگانی برای به روز رسانی از طریق رابط وب

نسل راهنماها

ارزش ندارد دستورالعمل های مشابه را چندین بار بنویسید. و منطقی ترین کار این است که یک بار آن را در markdown بنویسید و سپس آن را برای دانلود به PDF و برای رابط وب به html تبدیل کنید. این به لطف بسته پاندوک امکان پذیر است.

در عین حال، همه این فایل‌ها باید قبل از جمع‌آوری تصویر سیستم تولید شوند؛ آن اسکریپت‌های پس از ساخت در حال حاضر بی‌فایده هستند. بنابراین تولید در قالب بسته دستی انجام می شود. می توانید به پوشش/بسته/راهنماها نگاه کنید.

فایل 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))

systemd

دنیای لینوکس فعالانه به سمت systemd می رود و من هم مجبور شدم این کار را انجام دهم.
یکی از نوآوری های دلپذیر وجود تایمر است. به طور کلی، یک مقاله جداگانه در مورد آنها (و نه تنها در مورد آنها) نوشته می شود، اما من به طور خلاصه به شما می گویم.

اقداماتی وجود دارد که باید به صورت دوره ای انجام شود. برای پاک کردن لاگ های lighttpd و php-fpm باید logrotate را اجرا کنم. کار معمول نوشتن دستورات در cron است، اما من تصمیم گرفتم از تایمر یکنواخت systemd استفاده کنم. بنابراین logrotate در یک بازه زمانی دقیق اجرا می شود.

البته امکان ایجاد تایمرهایی وجود دارد که در تاریخ های خاصی شلیک می کنند، اما من به این نیاز نداشتم.
مثال تایمر:

  • فایل تایمر
    
    [Unit]
    Description=RODOS temp daemon timer

[تایمر] OnBootSec=1 دقیقه
OnUnitActiveSec=1 دقیقه

[نصب] WantedBy=timers.target

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

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

تابلوهای پشتیبانی شده

برد تینکر ایسوس برد اصلی است که همه چیز باید روی آن کار کند. به عنوان ارزان قیمت و بسیار قدرتمند انتخاب شده است.

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 برای نظارت بر دما

برای نظارت بر دما، فقط 2 مرحله را انجام دهید:

  • دستگاه RODOS را به پورت USB وصل کنید
  • ایجاد آیتم داده در zabbix

رابط وب zabbix را باز کنید:

  • بخش پیکربندی → میزبان ها را باز کنید
  • روی Items در خط سرور zabbix کلیک کنید
  • روی Create item کلیک کنید

Buildroot: ایجاد سیستم عامل کراس پلتفرم با سرور zabbix

داده های زیر را وارد کنید:

  • نام - به صلاحدید شما (به عنوان مثال، serverRoomTemp)
  • نوع - عامل zabbix
  • کلید - رودوس
  • نوع عددی
  • واحدها - C
  • دوره ذخیره سازی تاریخچه - دوره ذخیره تاریخ. 10 روز مانده
  • دوره ذخیره سازی روند - دوره ذخیره سازی برای پویایی تغییرات. 30 روز مانده است
  • برنامه جدید - سرور اتاق دما

و دکمه ADD را فشار دهید.
Buildroot: ایجاد سیستم عامل کراس پلتفرم با سرور zabbix

تنظیمات را از طریق رابط وب مدیریت کنید

رابط وب به زبان PHP نوشته شده است. توابع اصلی وجود دارد:

  • مشاهده وضعیت دستگاه
  • تغییر تنظیمات شبکه
    Buildroot: ایجاد سیستم عامل کراس پلتفرم با سرور zabbix
  • تغییر رمز عبور کاربر
  • انتخاب منطقه زمانی
  • پشتیبان گیری/بازیابی/بازنشانی به تنظیمات کارخانه
  • قابلیت اتصال درایو خارجی
  • به روزرسانی سیستم
    Buildroot: ایجاد سیستم عامل کراس پلتفرم با سرور zabbix

ورود به رابط وب با رمز عبور محافظت می شود. صفحه شروع - کتابچه راهنمای کاربر.

آدرس رابط Zabbix: ${ip/dns}/zabbix
آدرس رابط مدیریت: ${ip/dns}/manage
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=output/images/qemu.qcow2,format=qcow2,aio=threads -device virtio-scsi-pci,id=scsi0 -drive file=output/images/external.qcow2,format=qcow2,aio=threads

این دستور سیستمی را با 4 هسته، 2048 رم، 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 کرده و از طریق ساتا متصل شوید.

نتیجه

در این فرآیند، من علاقه مند به ساخت یک محصول آماده برای استفاده شدم - با یک رابط نه چندان زیبا (من دوست ندارم آنها را بنویسم)، اما رابطی که کار می کند و پیکربندی آن آسان است.

آخرین تلاش برای نصب zabbix-appliance در KVM نشان داد که این مرحله درست بوده است (پس از اتمام نصب، سیستم راه اندازی نمی شود). شاید من دارم کار اشتباهی می کنم 😉

مصالح

https://buildroot.org/

منبع: www.habr.com

اضافه کردن نظر