Buildroot: Vytváranie multiplatformového firmvéru so serverom zabbix

Buildroot: Vytváranie multiplatformového firmvéru so serverom zabbix

História problémov

Malé firmy na jednej strane potrebujú kvalitný monitoring svojej infraštruktúry (najmä vo svetle rozšírenej virtualizácie), na druhej strane je pre nich finančne náročné nakupovať nové zariadenia. Problémy so serverom/hardvérom sú tiež bežné: často sú 1-3 vežové servery vedľa používateľských pracovných staníc alebo v malom výklenku/skrini.

Jednoduchšie je použiť hotovú zostavu (distribúciu), ktorú stačí nahrať na microSD kartu a vložiť do bežného jednodoskového počítača (rodiny beaglebone, raspberry pi a orange pi, doska asus tinker). Okrem toho je takéto zariadenie lacné a môže byť inštalované kdekoľvek.

Vyhlásenie o probléme

Projekt sa v mnohom vyvinul ako druh laboratórnej práce s možnosťou aplikácie výsledkov.

Zabbix bol vybraný ako monitorovací systém, pretože je to výkonný, bezplatný a dobre zdokumentovaný systém.

Problém s hardvérovou platformou sa stal akútnym, dať pod monitoring samostatného stroja tiež nie je veľmi dobré riešenie - buď je drahé kupovať nové zariadenie, alebo hľadať staré zariadenie + v malých firmách sú časté problémy so serverom/ hardvér.

Použitie buildroot build systému vám umožňuje vytvárať špecializované riešenia, ktoré môžu obsluhovať pracovníci s minimálnymi znalosťami operačných systémov Linux. Tento systém je priateľský k začiatočníkom, no zároveň poskytuje bohaté možnosti prispôsobenia v rukách skúseného vývojára. Je ideálny pre riešenie problému lacného, ​​ale plne funkčného monitorovania IT infraštruktúry s minimálnymi požiadavkami na zaškolenie personálu, ktorý ju obsluhuje.

Kroky riešenia

Bolo rozhodnuté pôvodne vytvoriť firmvér pre x86_64 na spustenie v qemu, pretože ide o pohodlné a rýchle riešenie na ladenie. Potom ho portujte na jednodoskový počítač s ramenom (páčila sa mi doska asus tinker).

buildroot bol vybraný ako systém zostavovania. Spočiatku mu chýba balík zabbix, takže ho bolo treba preniesť, vyskytli sa problémy s ruským lokálom, ktoré sa vyriešili aplikáciou príslušných záplat (poznámka: v novších verziách buildroot už tieto záplaty nie sú potrebné).

Portovanie samotného balíčka zabbix bude popísané v samostatnom článku.

Keďže všetko by malo fungovať ako firmvér (nezmeniteľný obraz systému + obnoviteľné konfiguračné/databázové súbory), bolo potrebné napísať si vlastné systémové ciele, služby a časovače (target, service, timer).

Bolo rozhodnuté rozdeliť médiá na 2 časti – časť so systémovými súbormi a časť s meniteľnými konfiguráciami a databázovými súbormi zabbix.

Riešenie problémov súvisiacich s databázou sa ukázalo byť trochu náročnejšie. Nechcel som to umiestniť priamo do médií. Zároveň môže veľkosť databázy dosiahnuť veľkosť, ktorá presahuje veľkosť možného ramdisku. Preto bolo zvolené kompromisné riešenie: databáza je umiestnená na druhej partícii SD karty (moderné SLC karty majú až 30 000 cyklov zápisu), ale je tu nastavenie umožňujúce použitie externých médií (napríklad usb- hdd).

Monitorovanie teploty bolo realizované prostredníctvom zariadenia RODOS-5. Samozrejme, môžete použiť priamo Dallas 1820, ale bolo rýchlejšie a jednoduchšie zapojiť USB.

grub86 bol vybraný ako bootloader pre x64_2. Na spustenie bolo potrebné napísať minimálnu konfiguráciu.

Po odladení na qemu bol portovaný na dosku asus tinker. Štruktúra môjho prekrytia bola pôvodne zamýšľaná ako multiplatformová – prideľovanie konfigurácií špecifických pre každú dosku (defconfig dosky, bootloader, generovanie obrazu so systémovým oddielom) a maximálna jednotnosť pri prispôsobovaní systému súborov/vytváraní obrazu s údajmi. Vďaka takejto príprave prebehlo portovanie rýchlo.

Dôrazne sa odporúča prečítať si úvodné články:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Ako zostaviť

Projekt je uložený na github
Po naklonovaní úložiska sa získa nasledujúca štruktúra súboru:

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

buildroot-2019.05.tar.gz - čistý archív buildroot
overlay je môj adresár s externým stromom. Tu je uložené všetko, čo potrebujete na zostavenie firmvéru pomocou buildroot.
README.md - popis projektu a manuál v angličtine.
run_me.sh je skript, ktorý pripravuje zostavovací systém. Rozšíri buildroot z archívu, pripojí k nemu prekrytie (prostredníctvom mechanizmu externého stromu) a umožní vám vybrať cieľovú dosku na zostavenie

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

Potom stačí prejsť do adresára buildroot-2019.05 a spustiť príkaz make.
Po dokončení zostavenia budú všetky výsledky zostavenia v adresári output/images:

[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

Požadované súbory:

  • sdcard.img - mediálny obraz pre záznam na SD kartu (cez dd alebo rufus pod wibdows).
  • qemu.qcow2 - mediálny obraz na spustenie v qemu.
  • external.qcow2 - obraz externého média pre databázu
  • monitor-0.9-beta.tar.gz - archív na aktualizáciu cez webové rozhranie

Generovanie sprievodcov

Nemá cenu písať ten istý návod niekoľkokrát. A najlogickejšia vec je napísať to raz v markdown a potom to previesť na PDF na stiahnutie a html na webové rozhranie. To je možné vďaka balíku pandoc.

Všetky tieto súbory je zároveň potrebné vygenerovať pred zostavením obrazu systému, tieto post-build skripty sú už zbytočné. Generovanie sa preto vykonáva vo forme balíka manuálov. Môžete sa pozrieť na prekrytie/balík/príručky.

Súbor manuals.mk (ktorý vykonáva všetku prácu)

################################################################################
#
# 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

Svet Linuxu aktívne prechádza na systemd a musel som to urobiť aj ja.
Jednou z príjemných noviniek je prítomnosť časovačov. Vo všeobecnosti sa o nich (a nielen o nich) píše samostatný článok, ale stručne vám to poviem.

Existujú akcie, ktoré sa musia vykonávať pravidelne. Potreboval som spustiť logrotate, aby som vymazal protokoly lighttpd a php-fpm. Zvyčajná vec by bola písať príkazy v crone, ale rozhodol som sa použiť systemd monotónny časovač. Logrotate teda beží v prísnom časovom intervale.

Samozrejme, je možné vytvoriť časovače, ktoré sa spúšťajú v určitých dátumoch, ale toto som nepotreboval.
Príklad časovača:

  • Súbor časovača
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer] OnBootSec=1 min
OnUnitActiveSec=1min

[Inštalovať] WantedBy=timers.target

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

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

Podporované dosky

Asus tinker board je hlavná doska, na ktorej by malo všetko fungovať. Vybrané ako lacné a veľmi výkonné.

Beaglebone black je prvá doska, na ktorej bola testovaná prevádzka (pri výbere výkonnejšej dosky).

Qemu x86_64 - používa sa na vývoj ladenia.

Ako to funguje

Pri spustení dôjde k dvojstupňovému obnoveniu nastavení:

  • spustenie skriptu settings_restore (cez službu). Obnovuje základné nastavenia systému – časové pásmo, miestne nastavenie, sieťové nastavenia atď.
  • spustenie prípravného skriptu (cez službu) - tu sa pripraví zabbix a databáza, IP sa vypíše do konzoly.

Pri prvom spustení sa určí veľkosť druhého oddielu karty SD. Ak je tam stále nepridelené miesto, médium sa prerozdelí a celý voľný priestor zaberie dátová sekcia. Toto sa robí s cieľom zmenšiť veľkosť inštalačného obrazu (sdcard.img). Okrem toho je v tomto bode vytvorený pracovný adresár postgresql. Preto bude prvé spustenie s novým dopravcom dlhšie ako nasledujúce.

Pri pripojení externého disku v momente spustenia vyhľadá voľný disk a naformátuje ho na ext4 s externým štítkom.

Pozor! Pri pripájaní externého disku (ako aj pri jeho odpájaní alebo výmene) je potrebné urobiť zálohu a obnoviť nastavenia!

Na sledovanie teploty slúži zariadenie RODOS 5. Výrobca poskytuje zdrojový kód jeho utility pre prácu so zariadením. Keď je systém zapnutý, spustí sa časovač rodos, ktorý spustí túto utilitu raz za minútu. Aktuálna teplota sa zapíše do súboru /tmp/rodos_current_temp, po čom môže zabbix tento súbor sledovať ako senzor.

Konfiguračné úložné médium je pripojené v adresári /data.

Pri spustení systému a jeho príprave na prevádzku sa na konzole zobrazí nasledujúca správa:

System starting, please wait

Po dokončení prípravných prác sa zmení na zobrazenie adresy IP:

current ip 192.168.1.32
Ready to work

Nastavenie zabbixu na monitorovanie teploty

Ak chcete sledovať teplotu, urobte 2 kroky:

  • pripojte zariadenie RODOS k portu USB
  • vytvoriť dátovú položku v zabbix

Otvorte webové rozhranie zabbix:

  • Otvorte sekciu Konfigurácia → Hostitelia
  • Kliknite na Položky v riadku nášho servera zabbix
  • Kliknite na Vytvoriť položku

Buildroot: Vytváranie multiplatformového firmvéru so serverom zabbix

Zadajte nasledujúce údaje:

  • názov – podľa vlastného uváženia (napríklad serverRoomTemp )
  • Typ - zabbix agent
  • Kľúč - Rodos
  • Typ-numerický
  • Jednotky - C
  • History storage period — obdobie uloženia histórie. zostáva 10 dní
  • Obdobie uloženia trendu—obdobie uloženia dynamiky zmien. Zostáva 30 dní
  • Nová aplikácia - server Room Temp

A stlačte tlačidlo PRIDAŤ.
Buildroot: Vytváranie multiplatformového firmvéru so serverom zabbix

Spravujte nastavenia cez webové rozhranie

Webové rozhranie je napísané v PHP. Existujú hlavné funkcie:

  • zobraziť stav zariadenia
  • zmena nastavení siete
    Buildroot: Vytváranie multiplatformového firmvéru so serverom zabbix
  • zmena hesla používateľa
  • výber časového pásma
  • zálohovanie/obnovenie/obnovenie továrenských nastavení
  • možnosť pripojenia externého disku
  • Aktualizácia systému
    Buildroot: Vytváranie multiplatformového firmvéru so serverom zabbix

Prihlásenie do webového rozhrania je chránené heslom. Úvodná stránka - manuál.

Adresa rozhrania Zabbix: ${ip/dns}/zabbix
Adresa rozhrania správy: ${ip/dns}/manage
Buildroot: Vytváranie multiplatformového firmvéru so serverom zabbix

Beží v 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 -súbor jednotky=output/images/qemu.qcow2,format=qcow2,aio=vlákna -device virtio-scsi-pci,id=scsi0 -súbor jednotky=output/images/external.qcow2,format=qcow2,aio=vlákna

Tento príkaz spustí systém so 4 jadrami, 2048 RAM, povoleným KVM, sieťovou kartou na bridge0 a dvoma diskami: jeden pre systém a jeden externý pre postgresql.

Obrázky je možné previesť a spustiť vo Virtualboxe:

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

Potom ich importujte do virtualboxu a pripojte sa cez sata.

Záver

V tomto procese som sa začal zaujímať o vytvorenie produktu pripraveného na použitie - s nie príliš krásnym rozhraním (nerád ich píšem), ale také, ktoré funguje a je ľahko konfigurovateľné.

Posledný pokus o inštaláciu zabbix-appliance v KVM ukázal, že tento krok bol správny (po dokončení inštalácie sa systém nespustí). Možno robím niečo zle 😉

Materiály

https://buildroot.org/

Zdroj: hab.com

Pridať komentár