Buildroot: Vytváření multiplatformního firmwaru pomocí zabbix-serveru

Buildroot: Vytváření multiplatformního firmwaru pomocí zabbix-serveru

Historie problémů

Malé firmy na jednu stranu potřebují kvalitní monitoring své infrastruktury (zejména ve světle rozšířené virtualizace), na druhou stranu je pro ně finančně náročné pořízení nového zařízení. Problémy se serverem/hardwarem jsou také běžné: často jsou 1-3 věžové servery vedle uživatelských pracovních stanic nebo v malém výklenku/skříni.

Jednodušší je použití hotové sestavy (distribuce), kterou stačí nahrát na microSD kartu a vložit do běžného jednodeskového počítače (rodiny beaglebone, raspberry pi a orange pi, deska asus tinker). Kromě toho je takové zařízení levné a může být instalováno kdekoli.

Formulace problému

Projekt se v mnoha ohledech vyvíjel jako druh laboratorní práce s možností aplikace výsledků.

Zabbix byl vybrán jako monitorovací systém, protože se jedná o výkonný, bezplatný a dobře zdokumentovaný systém.

Problém s hardwarovou platformou se stal akutním, hlídání samostatného stroje také není příliš dobré řešení - buď je drahé pořídit nové zařízení, nebo shánět staré zařízení + v malých firmách jsou časté problémy se serverem/ Hardware.

Použití buildroot build systému vám umožňuje vytvářet specializovaná řešení, která mohou obsluhovat pracovníci s minimální znalostí operačních systémů Linux. Tento systém je přátelský k začátečníkům, ale zároveň poskytuje dostatek možností přizpůsobení v rukou zkušeného vývojáře. Je ideální pro řešení problému levného, ​​ale plně funkčního monitoringu IT infrastruktury s minimálními nároky na školení personálu, který ji obsluhuje.

Kroky řešení

Bylo rozhodnuto původně vytvořit firmware pro x86_64 pro běh v qemu, protože se jedná o pohodlné a rychlé řešení pro ladění. Pak jej portujte na jednodeskový počítač s ramenem (líbila se mi deska asus tinker).

buildroot byl vybrán jako systém sestavení. Zpočátku postrádá balíček zabbix, takže musel být portován.Vyskytly se problémy s ruským locale, které byly vyřešeny aplikací příslušných záplat (poznámka: v novějších verzích buildroot již tyto záplaty nejsou potřeba).

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

Vzhledem k tomu, že vše by mělo fungovat jako firmware (neměnný obraz systému + obnovitelné konfigurační/databázové soubory), bylo nutné napsat vlastní systémové cíle, služby a časovače (cíl, služba, časovač).

Bylo rozhodnuto rozdělit média na 2 části – část se systémovými soubory a část s měnitelnými konfiguracemi a databázovými soubory zabbix.

Trochu obtížnější se ukázalo řešení problémů souvisejících s databází. Nechtěl jsem to dávat přímo do médií. Velikost databáze přitom může dosahovat velikosti, která přesahuje velikost možného ramdisku. 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 je zde nastavení, které umožňuje použití externích médií (například usb- hdd).

Sledování teploty bylo realizováno prostřednictvím zařízení RODOS-5. Dallas 1820 samozřejmě můžete použít přímo, ale bylo rychlejší a jednodušší zapojit USB.

grub86 byl vybrán jako zavaděč pro x64_2. Pro spuštění bylo nutné napsat minimální konfiguraci.

Po odladění na qemu byl portován na desku asus tinker. Struktura mého overlay byla původně zamýšlena jako multiplatformní – alokace konfigurací specifických pro každou desku (defconfig desky, bootloader, generování obrazu se systémovým oddílem) a maximální jednotnost v přizpůsobení souborového systému/vytvoření obrazu s daty. Díky takové přípravě šlo portování rychle.

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

Jak se sestavit

Projekt je uložen na githubu
Po klonování úložiště se získá 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 - čistý archiv buildroot
overlay je můj adresář s externím stromem. Zde je uloženo vše, co potřebujete k sestavení firmwaru pomocí buildroot.
README.md - popis projektu a manuál v angličtině.
run_me.sh je skript, který připravuje systém sestavení. Rozbalí kořen buildu z archivu, připojí k němu překryv (prostřednictvím mechanismu externího stromu) a umožní vám vybrat cílovou desku pro sestavení

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

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

Požadované soubory:

  • sdcard.img - mediální obraz pro záznam na SD kartu (přes dd nebo rufus pod wibdows).
  • qemu.qcow2 - mediální obraz ke spuštění v qemu.
  • external.qcow2 - obraz externího média pro databázi
  • monitor-0.9-beta.tar.gz - archiv pro aktualizaci přes webové rozhraní

Generování průvodců

Nemá cenu psát stejný návod několikrát. A nejlogičtější je napsat to jednou v markdown a pak to převést do PDF pro stažení a html pro webové rozhraní. To je možné díky balíčku pandoc.

Všechny tyto soubory je přitom potřeba vygenerovat ještě před sestavením obrazu systému, ty post-build skripty jsou již k ničemu. Generování se proto provádí ve formě balíčku manuálů. Můžete se podívat na překrytí/balíček/příručky.

Soubor manuals.mk (který dělá veškerou 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řesouvá na systemd a musel jsem to udělat také.
Jednou z příjemných novinek je přítomnost časovačů. Obecně se o nich (a nejen o nich) píše samostatný článek, ale řeknu vám to krátce.

Existují akce, které je třeba provádět pravidelně. Potřeboval jsem spustit logrotate, abych vyčistil protokoly lighttpd a php-fpm. Obvyklá věc by byla psát příkazy v cronu, ale rozhodl jsem se použít systemd monotónní časovač. Logrotate tedy běží v přísném časovém intervalu.

Samozřejmě je možné vytvořit časovače, které se spouštějí v určitých datech, ale to jsem nepotřeboval.
Příklad časovače:

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

[Časovač] OnBootSec=1min
OnUnitActiveSec=1min

[Instalovat] WantedBy=timers.target

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

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

Podporované desky

Asus tinker board je základní deska, na které by mělo vše fungovat. Vybrán jako levný a velmi výkonný.

Beaglebone black je první deska, na které byl testován provoz (při výběru výkonnější desky).

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

Jak to funguje?

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

  • spuštění skriptu settings_restore (prostřednictvím služby). Obnoví základní nastavení systému – časové pásmo, národní prostředí, nastavení sítě atd.
  • spuštění přípravného skriptu (přes službu) - zde je připraven zabbix a databáze, IP je vyvedena do konzole.

Při prvním spuštění se určí velikost druhého oddílu karty SD. Pokud stále existuje nepřidělené místo, médium se znovu rozdělí a datová sekce zabere veškerý volný prostor. To se provádí za účelem zmenšení velikosti instalačního obrazu (sdcard.img). V tomto okamžiku je navíc vytvořen pracovní adresář postgresql. Proto bude první spuštění s novým dopravcem delší než následující.

Při připojení externího disku v okamžiku spuštění hledá volný disk a naformátuje jej na ext4 s externím štítkem.

Pozornost! Při připojování externího disku (stejně jako při jeho odpojování či výměně) je potřeba provést zálohu a obnovit nastavení!

Ke sledování teploty slouží zařízení RODOS 5. Výrobce poskytuje zdrojový kód jeho utility pro práci se zařízením. Po zapnutí systému se spustí časovač rodos, který spustí tuto utilitu jednou za minutu. Aktuální teplota se zapíše do souboru /tmp/rodos_current_temp, po kterém může zabbix tento soubor sledovat jako senzor.

Konfigurační úložné médium je připojeno v adresáři /data.

Při spouštění systému a jeho přípravě k provozu se na konzole zobrazí následující zpráva:

System starting, please wait

Po dokončení přípravných prací se změní na zobrazení IP adresy:

current ip 192.168.1.32
Ready to work

Nastavení zabbix pro sledování teploty

Chcete-li sledovat teplotu, stačí provést 2 kroky:

  • připojte zařízení RODOS k portu USB
  • vytvořit datovou položku v zabbix

Otevřete webové rozhraní zabbix:

  • Otevřete sekci Konfigurace → Počítače
  • Klikněte na Položky v řádku našeho serveru zabbix
  • Klikněte na Vytvořit položku

Buildroot: Vytváření multiplatformního firmwaru pomocí zabbix-serveru

Zadejte následující údaje:

  • název – podle vašeho uvážení (například serverRoomTemp )
  • Typ - zabbix agent
  • Klíč - Rodos
  • Typ-numerický
  • Jednotky - C
  • Doba uložení historie — doba uložení historie. zbývá 10 dní
  • Období uložení trendu – období uložení dynamiky změn. Zbývá 30 dní
  • Nová aplikace - server Room Temp

A stiskněte tlačítko PŘIDAT.
Buildroot: Vytváření multiplatformního firmwaru pomocí zabbix-serveru

Spravujte nastavení přes webové rozhraní

Webové rozhraní je napsáno v PHP. Existují hlavní funkce:

  • zobrazit stav zařízení
  • změna nastavení sítě
    Buildroot: Vytváření multiplatformního firmwaru pomocí zabbix-serveru
  • změna uživatelského hesla
  • výběr časového pásma
  • zálohování/obnovení/obnovení továrního nastavení
  • možnost připojení externího disku
  • Aktualizace systému
    Buildroot: Vytváření multiplatformního firmwaru pomocí zabbix-serveru

Přihlášení do webového rozhraní je chráněno heslem. Úvodní stránka - manuál.

Adresa rozhraní Zabbix: ${ip/dns}/zabbix
Adresa rozhraní pro správu: ${ip/dns}/manage
Buildroot: Vytváření multiplatformního firmwaru pomocí zabbix-serveru

Běží 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 -soubor jednotky=output/images/qemu.qcow2,format=qcow2,aio=vlákna -device virtio-scsi-pci,id=scsi0 -soubor jednotky=output/images/external.qcow2,format=qcow2,aio=vlákna

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

Obrázky lze převádět a spouštět 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 se přes sata.

Závěr

V tomto procesu jsem se začal zajímat o vytvoření produktu připraveného k použití - s nepříliš krásným rozhraním (nerad je píšu), ale funguje a snadno se konfiguruje.

Poslední pokus o instalaci zabbix-appliance v KVM ukázal, že tento krok byl správný (po dokončení instalace se systém nespustí). Možná dělám něco špatně 😉

materiály

https://buildroot.org/

Zdroj: www.habr.com

Přidat komentář