Buildroot: Tvorba multiplatformového firmwaru s zabbix-server

Buildroot: Tvorba multiplatformového firmwaru s zabbix-server

Historie úkolu

Malé firmy potřebují kvalitní monitorování své infrastruktury (zejména s ohledem na rozšířenou virtualizaci), avšak pro ně je finančně obtížné nakupovat nové vybavení. Často se také objevují problémy se servery/hardwarovým vybavením: často jsou vedle pracovních stanic umístěny 1-3 tower servery nebo v malé skříni.

Snazší je použít již hotovou sestavu (distribuci), kterou stačí nahrát na microSD kartu a vložit do běžného jednodeskového počítače (beaglebone, rodina raspberry pi a orange pi, asus tinker board). Kromě toho je takové vybavení dostupné a může být instalováno kdekoli.

Formulace úkolu

V mnoha ohledech projekt vycházel jako laboratoř s možností aplikace výsledků.

Jako systém monitorování byl zvolen zabbix, protože je to silný, zdarma dostupný a dobře zdokumentovaný systém.

Otázka s hardwarovou platformou se stala akutní. Instalace samostatného stroje pro monitorování také není příliš dobré řešení – buď je drahé nakupovat nové vybavení, nebo hledat staré, navíc v malých firmách jsou časté problémy se servery/hardwarovým vybavením.

Použití systému pro sestavování buildroot umožňuje vytvářet specializovaná řešení, která mohou být provozována personálem s minimálními znalostmi operačních systémů rodiny Linux. Tento systém je přívětivý k nováčkům, ale také nabízí široké možnosti pro přizpůsobení v rukou zkušeného vývojáře. Skvěle se hodí pro úkol levného, ale plnohodnotného monitorování IT infrastruktury, minimálně náročného na přípravu personálu, který ji provozuje.

Kroky k řešení

Bylo rozhodnuto původně vytvořit firmware pro x86_64 pro spuštění v qemu, protože to je pohodlné a rychlé řešení pro ladění. Poté byl portován na jednodeskový počítač arm (měli jsme rádi asus tinker board).

Jako systém pro sestavování byl vybrán buildroot. Původně neobsahuje balíček zabbix, takže jsme ho museli portovat. Byly problémy s ruskou lokalizací, které byly vyřešeny aplikací odpovídajících patchů (poznámka: v novějších verzích buildroot tyto patche již nejsou potřeba).

Portování samotného balíčku zabbix bude popsáno v samostatném článku.

Jelikož všechno by mělo fungovat jako firmware (neměnný obraz systému + obnovitelné konfigurační soubory/databáze), bylo nutné napsat vlastní systemd cíle, služby a časovače (target, service, timer).

Bylo rozhodnuto o rozdělení nosiče na 2 oddíly — oddíl se systémovými soubory a oddíl se změnitelnými konfiguracemi a soubory databáze zabbix.

O něco složitější se ukázalo řešení úloh souvisejících s databází. Umístit ji přímo na nosič nechtělo. Zároveň může velikost databáze dosáhnout velikosti překračující možné ramdisk. Proto bylo zvoleno kompromisní řešení: databáze je umístěna na druhém oddílu sd-karty (moderní SLC karty mají až 30 000 cyklů zápisu), ale existuje nastavení, které umožňuje používat externí nosič (například usb-hdd).

Monitorování teploty bylo realizováno prostřednictvím zařízení RODOS-5. Samozřejmě lze použít dallas 1820 přímo, ale rychlejší a snadnější bylo zapojit USB.

Jako zaváděč pro x86_64 byl vybrán grub2. Bylo nutné napsat minimální konfiguraci pro spuštění.

Po ladění na qemu proběhlo portování na asus tinker board. V struktuře mého overlaye byla původně zapracována krosplatformovost — vyčlenění specifických konfigurací pro každou desku (defconfig desky, zaváděč, generování obrazu se systémovým oddílem) a maximální jednotnost v přizpůsobení souborového systému/vytváření obrazu s daty. Díky této přípravě proběhlo portování rychle.

Důrazně doporučuji přečíst úvodní články:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Jak sestavit

Projekt je uložen na githubu
Po naklonování repozitáře vznikne následující struktura souborů:

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

buildroot-2019.05.tar.gz — archiv čistého buildrootu
overlay — můj adresář s external-tree. Právě v něm je uložené vše potřebné, abych vytvořil firmware pomocí buildrootu
README.md — popis projektu a příručka v angličtině.
run_me.sh — skript, který připravuje systém pro sestavení. Rozbaluje buildroot z archivu, připojuje k němu overlay (prostřednictvím mechanismu external-tree) a umožňuje vybrat cílovou desku pro sestavení.

[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Vyberte defconfig, stiskněte A pro zrušení. Výchozí [0]

Poté stačí přejít do adresáře buildroot-2019.05 a vykonat příkaz make.
Po dokončení sestavení budou všechny výsledky v adresáři 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

Potřebné soubory:

  • sdcard.img — obraz nosiče pro zápis na sd kartu (přes dd nebo rufus pod Windows).
  • qemu.qcow2 — obraz nosiče pro spuštění v qemu.
  • external.qcow2 — obraz externího nosiče pro databázi
  • monitor-0.9-beta.tar.gz — archív pro aktualizaci přes webové rozhraní

Generování příruček

Nemá smysl psát stejnou instrukci opakovaně. Nejlogičtější je napsat ji jednou v markdownu a poté převést do PDF pro stažení a html pro webové rozhraní. To je možné díky balíku pandoc.

Kromě toho je třeba generovat všechny tyto soubory před tím, než se sestaví obraz systému, protože post-build skripty už nejsou užitečné. Proto je generace provedena jako balíček manuals. Lze jej nalézt v overlay/package/manuals.

Soubor manuals.mk (který vykonává celou práci)

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

Svět Linuxu se aktivně přechází na systemd, což jsem musel udělat i já.
Z příjemných novinek — možnost používat časovače. O nich (a nejen o nich) se píše samostatný článek, ale stručně to shrnu.

Existují úkoly, které je třeba vykonávat pravidelně. Potřeboval jsem spustit logrotate pro čištění logů lighttpd a php-fpm. Nejvíc bych byl zvyklý napsat příkazy do cronu, ale rozhodl jsem se použít monotónní časovač systemd. Tímto způsobem je logrotate spouštěn v přísně určených časových intervalech.

Samozřejmě, existuje možnost vytvoření časovačů, které se spouští v určité dny, ale to jsem nepotřeboval.
Příklad časovače:

  • Soubor časovače
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer]
OnBootSec=1min
OnUnitActiveSec=1min

[Install]
WantedBy=timers.target

- Soubor služby, kterou časovač vyvolává:
```bash
[Unit]
Description=RODOS temp daemon

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

Podporované desky

Asus tinker board — hlavní deska, na které by vše mělo fungovat. Zvolena jako cenově dostupná a velmi výkonná.

Beaglebone black — první deska, na které byla ověřována funkčnost (během hledání výkonnější desky).

Qemu x86_64 — používá se pro vývoj a ladění.

Jak to funguje

Při spuštění dochází k dvoufázovému obnovení nastavení:

  • spuštění skriptu settings_restore (přes službu). Obnovuje hlavní nastavení systému — časové pásmo, lokalizaci, nastavení sítě atd.
  • spuštění skriptu prepare (přes službu) — zde se připravuje zabbix, databáze, vypisuje se IP do konzole.

Při prvním spuštění dochází k určení velikosti druhé části sd karty. Pokud je ještě volné nezaznamenané místo, nosič se přeformátuje, a oddíl pro data zaujme celé volné místo. To je provedeno za účelem zmenšení velikosti instalačního obrazu (sdcard.img). Kromě toho se v tomto okamžiku vytváří pracovní adresář postgresql. První spuštění s novým nosičem bude proto delší než následná.

Při připojení externího disku systém při startu hledá volný disk a formátuje ho na ext4 s označením external.

Pozor! Při připojení externího disku (a také při jeho odpojení nebo výměně) je nutné provést zálohu a obnovu nastavení!

K monitorování teploty se používá zařízení RODOS 5. Výrobce poskytuje zdrojové kódy své utility pro práci s tímto zařízením. Při spuštění systému se spustí časovač rodos, který spouští tuto utilitu každou minutu. Aktuální teplota je zapisována do souboru /tmp/rodos_current_temp, po čemž může zabbix monitorovat tento soubor jako senzor.

Nosič pro uchování konfigurace se montuje do adresáře /data.

Při spuštění systému a jeho přípravě na práci se v konzoli zobrazí zpráva:

Systém se spouští, prosím čekejte

Po dokončení přípravy se změní na výstup IP adresy:

aktuální ip 192.168.1.32
Připraveno k práci

Nastavení zabbix pro monitorování teploty

Pro monitorování teploty stačí provést 2 kroky:

  • připojit zařízení RODOS k usb portu
  • vytvořit datovou položku v zabbixu

Otevřeme webové rozhraní zabbix:

  • Otevřeme sekci Konfigurace → Hostitelé
  • Klikneme na Položky v řádku našeho zabbix serveru
  • Klikneme na Vytvořit položku

Buildroot: Tvorba multiplatformového firmwaru s zabbix-server

Zadáme následující údaje:

  • název — podle vašeho uvážení (například serverRoomTemp)
  • Typ — zabbix agent
  • Klíč — rodos
  • Typ — číselný
  • Jednotky — C
  • Doba uchovávání historie — doba uchovávání historie. Nechal jsem 10 dní
  • Doba uchovávání trendů — doba uchovávání změn. Nechal jsem 30 dní
  • Nová aplikace — server Room Temp

A klikneme na tlačítko PŘIDAT.
Buildroot: Tvorba multiplatformového firmwaru s zabbix-server

Správa nastavení přes webové rozhraní

Webové rozhraní je napsáno v php. Existují základní funkce:

  • prohlížení stavu zařízení
  • změna síťových nastavení
    Buildroot: Tvorba multiplatformového firmwaru s zabbix-server
  • změna hesla uživatele
  • výběr časového pásma
  • zálohování / obnova / resetování do továrního nastavení
  • možnost připojení externího disku
  • Aktualizace systému
    Buildroot: Tvorba multiplatformového firmwaru s zabbix-server

Přístup do webového rozhraní je chráněn heslem. Úvodní stránka — příručka.

Adresa rozhraní zabbix: ${ip/dns}/zabbix
Adresa rozhraní pro správu: ${ip/dns}/manage
Buildroot: Tvorba multiplatformového firmwaru s zabbix-server

Spuštění 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 -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

Tento příkaz spustí systém se 4 jádry, 2048 RAM, aktivovaným KVM, síťovou kartou na mostu bridge0 a dvěma disky: jeden pro systém a druhý externí pro postgresql.

Obrázky lze převést a spustit ve Virtualboxu:

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

Poté je importujte do VirtualBoxu a připojte je přes SATA.

Závěr

Během tohoto procesu mě zaujalo vytvořit funkční produkt – s ne příliš hezkým rozhraním (nemám rád jejich psaní), ale funkční a snadno konfigurovatelný.

Poslední pokus nainstalovat zabbix-appliance do KVM ukázal správnost tohoto kroku (po dokončení instalace systém nenabíhá). Možná něco dělám špatně 😉

Materiály

https://buildroot.org/

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster