Buildroot: Создавање фирмвер со повеќе платформи со zabbix-сервер

Buildroot: Создавање фирмвер со повеќе платформи со zabbix-сервер

Историја на проблеми

На малите компании, од една страна, им е потребно висококвалитетно следење на нивната инфраструктура (особено во светло на широко распространетата виртуелизација), од друга страна, финансиски им е тешко да купат нова опрема. Проблемите со серверот/хардверот се исто така вообичаени: често има 1-3 сервери за кула до работните станици на корисникот или во мала ниша/плакар.

Полесно е да се користи готов склоп (дистрибуција), што само треба да го поставите на microSD картичка и да го вметнете во заеднички компјутер со една плоча (семејства Beaglebone, Raspberry Pi и Orange Pi, asus tinker board). Покрај тоа, таквата опрема е евтина и може да се инсталира насекаде.

Проблем изјава

На многу начини, проектот се разви како еден вид лабораториска работа со можност за примена на резултатите.

Zabbix е избран за систем за следење бидејќи е моќен, бесплатен и добро документиран систем.

Проблемот со хардверската платформа стана акутен Ставањето посебна машина под мониторинг исто така не е многу добро решение - или е скапо да се набави нова опрема или да се бара стара опрема + во малите компании има чести проблеми со серверот/. хардвер.

Користењето на buildroot build системот ви овозможува да креирате специјализирани решенија со кои може да управува персонал со минимално познавање на оперативните системи Linux. Овој систем е пријателски настроен кон почетниците, но во исто време обезбедува многу можности за прилагодување во рацете на искусен развивач. Совршено е за решавање на проблемот со ефтин, но целосно функционален мониторинг на ИТ инфраструктурата, со минимални барања за обука на персоналот што ја управува.

Чекори за решение

Беше одлучено првично да се создаде фирмвер за x86_64 да работи во qemu, бидејќи ова е практично и брзо решение за дебагирање. Потоа префрлете го на компјутер со една плочка (ми се допадна асус tinker плочката).

buildroot беше избран како систем за градење. Првично, му недостига пакетот zabbix, па затоа мораше да се пренесе.

Пренесувањето на самиот zabbix пакет ќе биде опишано во посебна статија.

Бидејќи сè треба да работи како фирмвер (непроменлива слика на системот + датотеки со конфигурација/база на податоци што може да се обноват), беше неопходно да се напишете сопствени системски цели, услуги и тајмери ​​(цел, услуга, тајмер).

Беше одлучено медиумот да се подели на 2 дела - дел со системски датотеки и дел со променливи конфигурации и датотеки со база на податоци zabbix.

Решавањето на проблемите поврзани со базата на податоци се покажа како малку потешко. Не сакав да го ставам директно на медиумите. Во исто време, големината на базата на податоци може да достигне големина што ја надминува големината на можниот рамдиск. Затоа, беше избрано компромисно решение: базата на податоци се наоѓа на втората партиција на SD-картичката (модерните SLC картички имаат до 30 циклуси за пишување), но постои поставка што дозволува користење на надворешни медиуми (на пример, USB- HDD).

Следењето на температурата беше спроведено преку уредот RODOS-5. Се разбира, можете директно да го користите Dallas 1820, но беше побрзо и полесно да се приклучи USB.

grub86 беше избран како подигнувач за x64_2. Беше неопходно да се напише минимална конфигурација за да се стартува.

По дебагирањето на qemu, тој беше пренесен на таблата со помош на асус. Структурата на мојот преклоп првично беше наменета да биде меѓуплатформска - доделување конфигурации специфични за секоја табла (плочка defconfig, подигнувач, генерирање слика со системска партиција) и максимална униформност во прилагодувањето на датотечниот систем/создавање слика со податоци. Поради таквата подготовка, пренесувањето помина брзо.

Силно се препорачува да ги прочитате воведните написи:
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 е скрипта што го подготвува системот за градење. Го проширува 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 за веб интерфејсот. Ова е можно благодарение на пакетот пандок.

Во исто време, сите овие датотеки треба да се генерираат пред да се состави сликата на системот, тие скрипти по изградбата се веќе бескорисни. Затоа, генерирањето се врши во форма на пакет со прирачници. Можете да погледнете во преклоп/пакет/прирачници.

Датотеката 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

Светот на Linux активно се префрла на systemd, и јас морав да го сторам тоа.
Една од пријатните иновации е присуството на тајмери. Во принцип, се пишува посебна статија за нив (и не само за нив), но ќе ви кажам накратко.

Постојат дејства што мора да се вршат периодично. Требаше да извршам logrotate за да ги исчистам дневниците lighttpd и php-fpm. Вообичаено би било да ги пишувам командите во cron, но решив да го користам системскиот монотоничен тајмер. Значи, логротата работи во строг временски интервал.

Се разбира, можно е да се создадат тајмери ​​кои палат на одредени датуми, но ова не ми требаше.
Пример за тајмер:

  • Датотека со тајмер
    
    [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

Поддржани табли

Asus tinker board е главната плоча на која сè треба да работи. Избран како ефтин и многу моќен.

Beaglebone black е првата табла на која е тестирана операцијата (при изборот на помоќна табла).

Qemu x86_64 - се користи за развој на дебагирање.

Како работи

При стартување, се случува обновување на поставките во две фази:

  • извршување на скриптата settings_restore (преку услугата). Ги враќа основните системски поставки - временска зона, локација, мрежни поставки итн.
  • водење на скрипта за подготовка (преку услугата) - тука се подготвуваат zabbix и базата на податоци, IP се емитува во конзолата.

Кога првпат ќе го стартувате, се одредува големината на втората партиција на SD-картичката. Ако сè уште има нераспределен простор, медиумот повторно се дели, а делот за податоци го зазема целиот слободен простор. Ова е направено со цел да се намали големината на сликата за инсталација (sdcard.img). Дополнително, во овој момент е креиран работниот директориум postgresql. Затоа првото лансирање со нов носач ќе биде подолго од следните.

Кога поврзувате надворешен диск, во моментот на стартување бара слободен диск и го форматира во ext4 со надворешната ознака.

Внимание! Кога поврзувате надворешен диск (како и исклучување или замена), треба да направите резервна копија и да ги вратите поставките!

Уредот RODOS 5 се користи за следење на температурата Производителот го дава изворниот код на неговата алатка за работа со уредот. Кога системот е вклучен, се вклучува тајмерот за родос, кој ја извршува оваа алатка еднаш во минута. Тековната температура е запишана во датотеката /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 сервер
  • Кликнете на Креирај ставка

Buildroot: Создавање фирмвер со повеќе платформи со zabbix-сервер

Внесете ги следните податоци:

  • име - по ваша дискреција (на пример, serverRoomTemp )
  • Тип - агент zabbix
  • Клуч - Родос
  • Тип-нумерички
  • Единици - В
  • Период на складирање на историјата — период на складирање на историјата. остави 10 дена
  • Тренд период на складирање - период на складирање за динамиката на промените. Оставени 30 дена
  • Нова апликација - сервер Room Temp

И притиснете го копчето ADD.
Buildroot: Создавање фирмвер со повеќе платформи со zabbix-сервер

Управувајте со поставките преку веб-интерфејс

Веб интерфејсот е напишан во PHP. Постојат главни функции:

  • погледнете го статусот на уредот
  • менување на мрежните поставки
    Buildroot: Создавање фирмвер со повеќе платформи со zabbix-сервер
  • менување на корисничка лозинка
  • избор на временска зона
  • резервна копија/обновување/фабрички ресетирање
  • можност за поврзување надворешен диск
  • Ажурирање на системот
    Buildroot: Создавање фирмвер со повеќе платформи со zabbix-сервер

Најавувањето на веб-интерфејсот е заштитено со лозинка. Почетна страница - прирачник.

Адреса на интерфејсот на Zabbix: ${ip/dns}/zabbix
Адреса на интерфејсот за управување: ${ip/dns}/manage
Buildroot: Создавање фирмвер со повеќе платформи со zabbix-сервер

Трчање во кему

qemu-system-x86_64 -smp 4 -m 4026M -овозможи-kvm -machine q35,accel=kvm -уред intel-iommu -cpu домаќин -net nic -net bridge,br=bridge0 -device virtio-scsi-pci,id= scsi0 -диск датотека=излез/слики/qemu.qcow2,формат=qcow2,aio=нишки -уред virtio-scsi-pci,id=scsi0 -датотека на диск=излез/слики/external.qcow2,формат=qcow2,aio=нишки

Оваа команда ќе стартува систем со 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 и поврзете се преку сата.

Заклучок

Во тој процес, се заинтересирав да направам производ подготвен за употреба - со не многу убав интерфејс (не ми се допаѓа да ги пишувам), но кој работи и е лесен за конфигурирање.

Последниот обид да се инсталира zabbix-апарат во KVM покажа дека овој чекор е точен (по завршувањето на инсталацијата, системот не се стартува). Можеби правам нешто погрешно 😉

Материјали

https://buildroot.org/

Извор: www.habr.com

Додадете коментар