Buildroot: Platformok közötti firmware létrehozása zabbix-szerverrel

Buildroot: Platformok közötti firmware létrehozása zabbix-szerverrel

Problématörténet

A kisvállalkozásoknak egyrészt szükségük van infrastruktúrájuk minőségi monitorozására (különösen a széles körben elterjedt virtualizáció tükrében), másrészt anyagilag is nehézkes az új berendezések beszerzése. Gyakoriak a szerver/hardver problémák is: gyakran 1-3 toronyszerver található a felhasználói munkaállomások mellett vagy egy kis fülkében/szekrényben.

Egyszerűbb a kész összeállítás (elosztás) használata, amit csak egy microSD kártyára kell feltölteni, és be kell helyezni egy közös egylapos számítógépbe (beaglebone, raspberry pi és orange pi családok, asus tinker board). Ezenkívül az ilyen berendezések olcsók, és bárhol felszerelhetők.

Probléma nyilatkozat

A projekt sok szempontból egyfajta laboratóriumi munkaként fejlődött, az eredmények alkalmazási lehetőségével.

A Zabbix-ot azért választották felügyeleti rendszernek, mert ez egy hatékony, ingyenes és jól dokumentált rendszer.

A hardverplatform problémája akuttá vált.A külön gép felügyelet alá helyezése sem túl jó megoldás - vagy drága az új berendezés beszerzése, vagy a régi berendezések keresése + kis cégeknél gyakoriak a szerverrel/ hardver.

A buildroot build rendszer használatával olyan speciális megoldásokat hozhat létre, amelyeket a Linux operációs rendszerekkel kapcsolatos minimális ismeretekkel rendelkező személyzet üzemeltethet. Ez a rendszer kezdők számára barátságos, ugyanakkor bőséges testreszabási lehetőséget biztosít egy tapasztalt fejlesztő kezében. Kiválóan alkalmas az informatikai infrastruktúra olcsó, de teljesen működőképes monitorozásának problémájának megoldására, az azt üzemeltető személyzet képzésének minimális követelményeivel.

A megoldás lépései

Úgy döntöttek, hogy először az x86_64 firmware-t készítik, hogy qemu-ban futhassanak, mivel ez egy kényelmes és gyors megoldás a hibakereséshez. Utána csatlakoztasd egy karú, egylapos számítógépre (nekem az asus tinker board tetszett).

buildroot lett kiválasztva build rendszerként. Kezdetben hiányzik belőle a zabbix csomag, ezért portolni kellett.Az orosz nyelvi beállítással voltak problémák, amiket a megfelelő javítások alkalmazásával sikerült megoldani (megjegyzés: a buildroot újabb verzióiban ezekre a javításokra már nincs szükség).

Magának a zabbix csomagnak a portolásáról egy külön cikkben lesz szó.

Mivel mindennek firmware-ként kell működnie (változhatatlan rendszerkép + helyreállítható konfigurációs/adatbázis fájlok), ezért saját rendszeres célokat, szolgáltatásokat és időzítőket kellett írni (cél, szolgáltatás, időzítő).

Úgy döntöttek, hogy a médiát 2 részre osztják fel - egy részre a rendszerfájlokkal és egy szakaszra, amely megváltoztatható konfigurációkkal és zabbix adatbázis fájlokkal.

Az adatbázissal kapcsolatos problémák megoldása kicsit nehezebbnek bizonyult. Nem akartam közvetlenül a médiára helyezni. Ugyanakkor az adatbázis mérete elérheti a lehetséges ramdisk méretét is. Ezért egy kompromisszumos megoldást választottak: az adatbázis az SD-kártya második partícióján található (a modern SLC-kártyák akár 30 000 írási ciklussal is rendelkeznek), de van olyan beállítás, amely lehetővé teszi külső adathordozók (pl. usb- hdd).

A hőmérséklet felügyelet a RODOS-5 készüléken keresztül valósult meg. Természetesen közvetlenül is használhatja a Dallas 1820-at, de gyorsabb és egyszerűbb volt az USB csatlakoztatása.

A grub86 lett kiválasztva az x64_2 rendszerbetöltőjeként. Minimális konfigurációt kellett írni az indításhoz.

A qemu hibakeresése után átkerült az asus tinker kártyára. Az átfedésem felépítése kezdetben többplatformos volt – minden kártyához specifikus konfigurációk kiosztása (defconfig, bootloader, kép generálása rendszerpartícióval) és maximális egységesség a fájlrendszer testreszabásában/kép létrehozásában adatokkal. Az ilyen előkészítésnek köszönhetően gyorsan ment a portolás.

Erősen ajánlott elolvasni a bevezető cikkeket:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Hogyan kell összeállítani

A projektet a github tárolja
A tároló klónozása után a következő fájlszerkezetet kapjuk:

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

buildroot-2019.05.tar.gz - buildroot archívumának tisztítása
az overlay az én könyvtáram külső fával. Itt található minden, ami a firmware buildroot segítségével történő felépítéséhez szükséges.
README.md - a projekt leírása és a kézikönyv angol nyelven.
A run_me.sh egy szkript, amely előkészíti a build rendszert. Kibővíti a buildrootot az archívumból, egy overlay-t csatol hozzá (a külső fa mechanizmuson keresztül), és lehetővé teszi az összeszerelés céltáblájának kiválasztását

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

Ezután lépjen a buildroot-2019.05 könyvtárba, és futtassa a make parancsot.
A felépítés befejezése után az összes összeállítás eredménye az output/images könyvtárban lesz:

[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

Szükséges fájlok:

  • sdcard.img - médiakép SD-kártyára rögzítéshez (dd-n vagy rufuson keresztül wibdows alatt).
  • qemu.qcow2 – a qemu-ban futtatandó médiakép.
  • external.qcow2 - külső adathordozó kép az adatbázishoz
  • monitor-0.9-beta.tar.gz - archívum a webes felületen keresztüli frissítéshez

Útmutatók generációja

Nem érdemes többször leírni ugyanazt az utasítást. A leglogikusabb pedig az, hogy egyszer beírod a markdown-ba, majd PDF-be konvertálod letöltéshez és html-be a webes felületre. Ez a pandoc csomagnak köszönhetően lehetséges.

Ugyanakkor ezeket a fájlokat a rendszerkép összeállítása előtt létre kell hozni; ezek az utólagos szkriptek már használhatatlanok. Ezért a generálás egy kézikönyvcsomag formájában történik. Megnézheti a fedvényt/csomagot/kézikönyveket.

A manuals.mk fájl (amely minden munkát elvégez)

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

A Linux világ aktívan átáll a systemd felé, és nekem is meg kellett tennem.
Az egyik kellemes újítás az időzítők jelenléte. Általában külön cikk készül róluk (és nem csak róluk), de röviden elmondom.

Vannak olyan műveletek, amelyeket rendszeresen el kell végezni. A logrotate-ot kellett futtatnom a lighttpd és a php-fpm naplók törléséhez. A szokásos dolog az lenne, hogy a parancsokat cronban írjuk, de úgy döntöttem, hogy a systemd monoton időzítőt használom. Tehát a logrotate szigorú időintervallumban fut.

Természetesen lehet olyan időzítőket készíteni, amelyek bizonyos dátumokon kapcsolnak be, de erre nem volt szükségem.
Példa időzítőre:

  • Időzítő fájl
    
    [Unit]
    Description=RODOS temp daemon timer

[Időzítő] OnBootSec=1 perc
OnUnitActiveSec=1 perc

[Telepítés] WantedBy=timers.target

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

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

Támogatott táblák

Az Asus tinderboard az alaplap, amelyen mindennek működnie kell. Olcsónak és nagyon erősnek választották.

A Beaglebone black az első tábla, amelyen a működést tesztelték (egy erősebb tábla kiválasztása során).

Qemu x86_64 - hibakeresési fejlesztéshez használatos.

Hogyan működik

Indításkor a beállítások kétlépcsős visszaállítása történik:

  • a settings_restore szkript futtatása (a szolgáltatáson keresztül). Visszaállítja az alapvető rendszerbeállításokat - időzóna, területi beállítások, hálózati beállítások stb.
  • előkészítő szkript futtatása (a szolgáltatáson keresztül) - itt a zabbix és az adatbázis előkészítve, az IP kimenet a konzolra.

Amikor először indítja el, a rendszer meghatározza az SD-kártya második partíciójának méretét. Ha még mindig van fel nem osztott terület, az adathordozó újraparticionálódik, és az adatszakasz elfoglalja az összes szabad helyet. Ez a telepítési lemezkép (sdcard.img) méretének csökkentése érdekében történik. Ezenkívül ezen a ponton jön létre a postgresql munkakönyvtár. Ez az oka annak, hogy az első indítás egy új hordozóval hosszabb lesz, mint a későbbiek.

Külső meghajtó csatlakoztatásakor az indítás pillanatában szabad meghajtót keres, és külső címkével ext4-re formázza.

Figyelem! Külső meghajtó csatlakoztatásakor (valamint leválasztásakor vagy cseréjekor) biztonsági mentést kell készíteni és a beállításokat vissza kell állítani!

Hőmérsékletfigyelésre a RODOS 5 készülék szolgál, melynek segédprogramjának forráskódját a gyártó biztosítja a készülékkel való munkához. A rendszer bekapcsolásakor elindul a rodos időzítő, amely percenként egyszer futtatja ezt a segédprogramot. Az aktuális hőmérséklet a /tmp/rodos_current_temp fájlba kerül, ami után a zabbix ezt a fájlt érzékelőként tudja figyelni.

A konfigurációs adathordozó a /data könyvtárba van felszerelve.

A rendszer indításakor és üzembe helyezésekor a következő üzenet jelenik meg a konzolon:

System starting, please wait

Az előkészítő munka befejezése után az IP-cím megjelenítésére változik:

current ip 192.168.1.32
Ready to work

A zabbix beállítása hőmérséklet-felügyelethez

A hőmérséklet figyeléséhez csak 2 lépést kell tennie:

  • csatlakoztassa a RODOS eszközt az USB porthoz
  • hozzon létre adatelemet a zabbixban

Nyissa meg a zabbix webes felületét:

  • Nyissa meg a Konfiguráció → Gazdagépek részt
  • Kattintson a Tételek elemre a zabbix szerverünk sorában
  • Kattintson az Elem létrehozása gombra

Buildroot: Platformok közötti firmware létrehozása zabbix-szerverrel

Adja meg a következő adatokat:

  • név – saját belátása szerint (például serverRoomTemp )
  • Típus - zabbix ügynök
  • Kulcs - Rodos
  • Típus-numerikus
  • Egységek - C
  • Előzmények tárolási időszaka — előzmények tárolási időszaka. maradt 10 nap
  • Trend tárolási időszak – a változások dinamikájának tárolási időszaka. 30 nap maradt
  • Új alkalmazás - szerver Szobahőm

És nyomja meg az ADD gombot.
Buildroot: Platformok közötti firmware létrehozása zabbix-szerverrel

Beállítások kezelése webes felületen keresztül

A webes felület PHP nyelven íródott. Vannak fő funkciói:

  • az eszköz állapotának megtekintése
  • hálózati beállítások módosítása
    Buildroot: Platformok közötti firmware létrehozása zabbix-szerverrel
  • felhasználói jelszó megváltoztatása
  • időzóna kiválasztása
  • biztonsági mentés/visszaállítás/gyári visszaállítás
  • külső meghajtó csatlakoztatásának képessége
  • Rendszerfrissítés
    Buildroot: Platformok közötti firmware létrehozása zabbix-szerverrel

A webes felületre történő bejelentkezés jelszóval védett. Kezdőlap - kézikönyv.

Zabbix interfész címe: ${ip/dns}/zabbix
A kezelőfelület címe: ${ip/dns}/manage
Buildroot: Platformok közötti firmware létrehozása zabbix-szerverrel

Futás qemu-ban

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=szálak -device virtio-scsi-pci,id=scsi0 -drive file=output/images/external.qcow2,format=qcow2,aio=szálak

Ez a parancs elindít egy rendszert 4 maggal, 2048 RAM-mal, KVM engedélyezett, hálózati kártyával a bridge0-n és két lemezzel: egy a rendszerhez és egy külső a postgresql-hez.

A képek konvertálhatók és futtathatók a Virtualboxban:

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

Ezután importálja őket a virtualboxba, és csatlakozzon a sata-n keresztül.

Következtetés

Eközben elkezdett érdekelni egy használatra kész termék készítése - nem túl szép felülettel (nem szeretem ezeket írni), de működik és könnyen konfigurálható.

A zabbix-appliance KVM-ben történő telepítésének legutóbbi kísérlete azt mutatta, hogy ez a lépés helyes volt (a telepítés befejezése után a rendszer nem indul el). Lehet, hogy valamit rosszul csinálok 😉

anyagok

https://buildroot.org/

Forrás: will.com

Hozzászólás