Buildroot: Ustvarjanje vdelane programske opreme za več platform s strežnikom zabbix

Buildroot: Ustvarjanje vdelane programske opreme za več platform s strežnikom zabbix

Zgodovina težav

Mala podjetja po eni strani potrebujejo kakovostno spremljanje svoje infrastrukture (zlasti v luči vsesplošne virtualizacije), po drugi strani pa so finančno težko nabaviti novo opremo. Pogoste so tudi težave s strežnikom/strojno opremo: pogosto so poleg uporabniških delovnih postaj ali v majhni niši/omari 1-3 stolpni strežniki.

Lažje je uporabiti že pripravljen sklop (distribucijo), ki ga morate le naložiti na kartico microSD in vstaviti v običajni enokartični računalnik (družine beaglebone, raspberry pi in orange pi, asus tinker board). Poleg tega je takšna oprema poceni in jo je mogoče namestiti kjer koli.

Izjava o težavah

Projekt se je v marsičem razvil kot neke vrste laboratorijsko delo z možnostjo uporabe rezultatov.

Zabbix je bil izbran kot nadzorni sistem, ker je zmogljiv, brezplačen in dobro dokumentiran sistem.

Težava s strojno platformo je postala akutna.Dajanje ločenega stroja pod nadzor prav tako ni dobra rešitev - ali je drago kupiti novo opremo ali iskati staro opremo + v majhnih podjetjih so pogoste težave s strežnikom/ strojna oprema.

Uporaba sistema za izgradnjo buildroot vam omogoča ustvarjanje specializiranih rešitev, ki jih lahko upravlja osebje z minimalnim znanjem operacijskih sistemov Linux. Ta sistem je prijazen do začetnikov, hkrati pa nudi veliko možnosti prilagajanja v rokah izkušenega razvijalca. Popoln je za reševanje problematike poceni, a popolnoma funkcionalnega spremljanja IT infrastrukture z minimalnimi zahtevami po izobraževanju osebja, ki jo upravlja.

Koraki rešitve

Odločeno je bilo, da se najprej ustvari vdelana programska oprema za x86_64 za izvajanje v qemu, saj je to priročna in hitra rešitev za odpravljanje napak. Nato ga prenesite na računalnik z eno ploščo (všeč mi je bila plošča Asus).

buildroot je bil izbran kot gradbeni sistem. Na začetku nima paketa zabbix, zato ga je bilo treba prenesti.. Pojavile so se težave z rusko lokalizacijo, ki so jih rešili z uporabo ustreznih popravkov (opomba: v novejših različicah buildroot ti popravki niso več potrebni).

Prenos samega paketa zabbix bo opisan v ločenem članku.

Ker bi moralo vse delovati kot vdelana programska oprema (nespremenljiva sistemska slika + obnovitvene datoteke konfiguracije/baze podatkov), je bilo potrebno napisati lastne sistemske cilje, storitve in časovnike (target, service, timer).

Odločeno je bilo, da se medij razdeli na 2 razdelka - razdelek s sistemskimi datotekami in razdelek s spremenljivimi konfiguracijami in datotekami baze podatkov zabbix.

Reševanje problemov, povezanih z bazo podatkov, se je izkazalo za nekoliko težje. Nisem želel tega plasirati neposredno v medije. Hkrati lahko velikost baze podatkov doseže velikost, ki presega velikost možnega pomnilniškega diska. Zato je bila izbrana kompromisna rešitev: baza podatkov se nahaja na drugem delu kartice SD (sodobne kartice SLC imajo do 30 zapisovalnih ciklov), vendar obstaja nastavitev, ki omogoča uporabo zunanjih medijev (na primer usb- hdd).

Nadzor temperature je bil izveden preko naprave RODOS-5. Seveda lahko Dallas 1820 uporabljate neposredno, vendar je bilo hitreje in lažje priključiti USB.

grub86 je bil izbran kot zagonski nalagalnik za x64_2. Za zagon je bilo potrebno napisati minimalno konfiguracijo.

Po odpravljanju napak na qemu je bil prenesen na ploščo asus tinker board. Struktura mojega prekrivanja je bila prvotno mišljena kot večplatformska - dodeljevanje konfiguracij, specifičnih za vsako ploščo (defconfig plošče, zagonski nalagalnik, generiranje slike s sistemsko particijo) in največja enotnost pri prilagajanju datotečnega sistema/ustvarjanju slike s podatki. Zaradi takšne priprave je prenos potekal hitro.

Zelo priporočljivo je prebrati uvodne članke:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Kako sestaviti

Projekt je shranjen na githubu
Po kloniranju repozitorija dobimo naslednjo datotečno strukturo:

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

buildroot-2019.05.tar.gz - čisti arhiv buildroot
overlay je moj imenik z zunanjim drevesom. Tukaj je shranjeno vse, kar potrebujete za gradnjo vdelane programske opreme z uporabo buildroot.
README.md - opis projekta in priročnik v angleškem jeziku.
run_me.sh je skript, ki pripravi sistem gradnje. Razširi buildroot iz arhiva, nanj pripne prekrivanje (prek mehanizma zunanjega drevesa) in vam omogoča, da izberete ciljno ploščo za sestavljanje

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

Po tem pojdite v imenik buildroot-2019.05 in zaženite ukaz make.
Ko je gradnja končana, bodo vsi rezultati gradnje v imeniku 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

Zahtevane datoteke:

  • sdcard.img - medijska slika za snemanje na SD kartico (prek dd ali rufus pod wibdows).
  • qemu.qcow2 - medijska slika za zagon v qemu.
  • external.qcow2 - slika zunanjega medija za bazo podatkov
  • monitor-0.9-beta.tar.gz - arhiv za posodabljanje prek spletnega vmesnika

Generacija vodnikov

Večkrat se ne splača pisati istih navodil. In najbolj logično je, da ga enkrat napišete v markdown, nato pa pretvorite v PDF za prenos in html za spletni vmesnik. To je mogoče zaradi paketa pandoc.

Hkrati je treba vse te datoteke generirati, preden se sestavi sistemska slika; ti skripti po izdelavi so že neuporabni. Zato se ustvarjanje izvaja v obliki paketa priročnikov. Ogledate si lahko prekrivanje/paket/priročnike.

Datoteka manuals.mk (ki opravi vse delo)

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

sistemd

Svet Linuxa se aktivno seli na systemd in to sem moral storiti tudi jaz.
Ena od prijetnih novosti je prisotnost časovnikov. Na splošno se o njih (in ne samo o njih) piše ločen članek, vendar vam bom na kratko povedal.

Obstajajo dejanja, ki jih je treba izvajati občasno. Moral sem zagnati logrotate, da počistim dnevnike lighttpd in php-fpm. Običajno bi bilo, da bi ukaze napisali v cron, vendar sem se odločil uporabiti monotoni časovnik systemd. Logrotate se torej izvaja v strogem časovnem intervalu.

Seveda je mogoče ustvariti časovnike, ki se sprožijo na določene datume, vendar tega nisem potreboval.
Primer časovnika:

  • Datoteka časovnika
    
    [Unit]
    Description=RODOS temp daemon timer

[Časovnik] OnBootSec=1 min
OnUnitActiveSec=1min

[Namesti] WantedBy=timers.target

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

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

Podprte plošče

Asus tinker board je glavna plošča, na kateri bi moralo vse delovati. Izbrano kot poceni in zelo zmogljivo.

Beaglebone black je prva deska, na kateri smo testirali delovanje (med izbiro močnejše deske).

Qemu x86_64 - uporablja se za razvoj odpravljanja napak.

Kako deluje?

Ob zagonu pride do dvostopenjske obnovitve nastavitev:

  • zagon skripta settings_restore (prek storitve). Obnovi osnovne sistemske nastavitve - časovni pas, področne nastavitve, omrežne nastavitve itd.
  • zagon pripravljalnega skripta (prek servisa) - tukaj se pripravita zabbix in baza podatkov, IP se izpiše na konzolo.

Ko jo prvič zaženete, se določi velikost druge particije kartice SD. Če je še vedno nedodeljen prostor, se medij ponovno razdeli in razdelek s podatki zavzame ves prosti prostor. To naredimo zato, da zmanjšamo velikost namestitvene slike (sdcard.img). Poleg tega se na tej točki ustvari delovni imenik postgresql. Zato bo prva izstrelitev z novim nosilcem daljša od naslednjih.

Ob priklopu zunanjega diska v trenutku zagona poišče prosti disk in ga formatira v ext4 z oznako external.

Pozor! Pri priključitvi zunanjega diska (pa tudi pri odklopu ali zamenjavi) morate narediti varnostno kopijo in obnoviti nastavitve!

Za spremljanje temperature se uporablja naprava RODOS 5. Proizvajalec zagotavlja izvorno kodo svojega pripomočka za delo z napravo. Ko je sistem vklopljen, se zažene rodos timer, ki zažene ta pripomoček enkrat na minuto. Trenutna temperatura se zapiše v datoteko /tmp/rodos_current_temp, po kateri lahko zabbix spremlja to datoteko kot senzor.

Konfiguracijski pomnilniški medij je nameščen v imeniku /data.

Ob zagonu sistema in njegovi pripravi za delovanje se v konzoli prikaže naslednje sporočilo:

System starting, please wait

Po končanem pripravljalnem delu se bo spremenil v prikaz naslova IP:

current ip 192.168.1.32
Ready to work

Nastavitev zabbixa za spremljanje temperature

Če želite spremljati temperaturo, naredite samo 2 koraka:

  • priključite napravo RODOS na vrata USB
  • ustvari podatkovno postavko v zabbixu

Odprite spletni vmesnik zabbix:

  • Odprite razdelek Konfiguracija → Gostitelji
  • Kliknite na Elemente v vrstici našega strežnika zabbix
  • Kliknite Ustvari element

Buildroot: Ustvarjanje vdelane programske opreme za več platform s strežnikom zabbix

Vnesite naslednje podatke:

  • ime - po vaši presoji (na primer ServerRoomTemp )
  • Tip - agent zabbix
  • Ključ - Rodos
  • Vrsta-številka
  • Enote - C
  • Obdobje shranjevanja zgodovine — obdobje shranjevanja zgodovine. še 10 dni
  • Obdobje shranjevanja trendov - obdobje shranjevanja dinamike sprememb. Ostaja še 30 dni
  • Nova aplikacija - strežnik Sobna temp

In pritisnite gumb DODAJ.
Buildroot: Ustvarjanje vdelane programske opreme za več platform s strežnikom zabbix

Upravljajte nastavitve prek spletnega vmesnika

Spletni vmesnik je napisan v PHP. Obstajajo glavne funkcije:

  • ogled stanja naprave
  • spreminjanje omrežnih nastavitev
    Buildroot: Ustvarjanje vdelane programske opreme za več platform s strežnikom zabbix
  • spreminjanje uporabniškega gesla
  • izbira časovnega pasu
  • varnostno kopiranje/obnovitev/ponastavitev na tovarniške nastavitve
  • možnost priključitve zunanjega diska
  • Posodobitev sistema
    Buildroot: Ustvarjanje vdelane programske opreme za več platform s strežnikom zabbix

Prijava v spletni vmesnik je zaščitena z geslom. Začetna stran - priročnik.

Naslov vmesnika Zabbix: ${ip/dns}/zabbix
Naslov vmesnika za upravljanje: ${ip/dns}/manage
Buildroot: Ustvarjanje vdelane programske opreme za več platform s strežnikom zabbix

Teče 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

Ta ukaz bo zagnal sistem s 4 jedri, 2048 RAM-om, omogočenim KVM, omrežno kartico na bridge0 in dvema diskema: enim za sistem in enim zunanjim za postgresql.

Slike je mogoče pretvoriti in izvajati v Virtualboxu:

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

Nato jih uvozite v virtualbox in se povežite preko sata.

Zaključek

Med tem postopkom me je začelo zanimati izdelava izdelka, pripravljenega za uporabo - z ne preveč lepim vmesnikom (ne maram jih pisati), a takim, ki deluje in ga je enostavno konfigurirati.

Zadnji poskus namestitve naprave zabbix v KVM je pokazal, da je bil ta korak pravilen (po končani namestitvi se sistem ne zažene). Mogoče delam kaj narobe 😉

Materiali

https://buildroot.org/

Vir: www.habr.com

Dodaj komentar