Buildroot: Cross-platform firmware meitsje mei zabbix-server

Buildroot: Cross-platform firmware meitsje mei zabbix-server

Probleem skiednis

Lytse bedriuwen, oan 'e iene kant, hawwe hege kwaliteit tafersjoch op har ynfrastruktuer nedich (benammen yn it ljocht fan wiidferspraat virtualisaasje), oan' e oare kant is it finansjeel lestich foar har om nije apparatuer te keapjen. Server-/hardwareproblemen binne ek gewoan: faak binne d'r 1-3 toerservers neist brûker wurkstasjons of yn in lytse niche / kast.

It is makliker te brûken in ready-made gearkomste (ferdieling), dat jo gewoan moatte uploade nei in microSD card en ynfoegje yn in mienskiplike single-board kompjûter (beaglebone, raspberry pi en oranje pi famyljes, asus tinker board). Derneist is sokke apparatuer goedkeap en kin oeral ynstalleare wurde.

Probleemintwurding

Op in protte manieren ûntwikkele it projekt as in soarte fan laboratoariumwurk mei de mooglikheid om de resultaten ta te passen.

Zabbix waard keazen as it tafersjochsysteem omdat it in krêftich, fergees en goed dokumintearre systeem is.

It probleem mei it hardwareplatfoarm is akuut wurden. hardware.

It brûken fan it buildroot-bouwsysteem lit jo spesjalisearre oplossingen meitsje dy't kinne wurde eksploitearre troch personiel mei minimale kennis fan Linux-bestjoeringssystemen. Dit systeem is freonlik foar begjinners, mar biedt tagelyk genôch oanpassingsmooglikheden yn 'e hannen fan in betûfte ûntwikkelder. It is perfekt foar it oplossen fan it probleem fan goedkeape, mar folslein funksjonele tafersjoch fan IT-ynfrastruktuer, mei minimale easken foar de oplieding fan it personiel dat it wurket.

Oplossingsstappen

It waard besletten om yn earste ynstânsje firmware te meitsjen foar x86_64 om te rinnen yn qemu, om't dit in handige en rappe oplossing is foar debuggen. Dan portearje it nei in earm single-board komputer (ik mocht fan it asus tinker board).

buildroot waard selektearre as it bousysteem. Yn it earstoan mist it it zabbix-pakket, dus it moast wurde oerdroegen mei de Russyske locale, dy't oplost waarden troch it tapassen fan de passende patches (notysje: yn nijere ferzjes fan buildroot binne dizze patches net mear nedich).

It portearjen fan it zabbix-pakket sels sil wurde beskreaun yn in apart artikel.

Sûnt alles moat wurkje as firmware (net te feroarjen systeemôfbylding + herstelbere konfiguraasje / databankbestannen), wie it nedich om jo eigen systeemdoelen, tsjinsten en timers te skriuwen (doel, tsjinst, timer).

It waard besletten om de media te splitsen yn 2-seksjes - in seksje mei systeembestannen en in seksje mei feroare konfiguraasjes en zabbix-databasebestannen.

It oplossen fan problemen yn ferbân mei de databank die bliken wat dreger te wêzen. Ik woe it net direkt op 'e media pleatse. Tagelyk kin de grutte fan 'e databank in grutte berikke dy't de grutte fan in mooglike ramdisk grutter is. Dêrom waard in kompromisoplossing keazen: de databank leit op 'e twadde dieling fan' e SD-kaart (moderne SLC-kaarten hawwe oant 30 skriuwsyklusen), mar d'r is in ynstelling dy't it brûken fan eksterne media mooglik makket (bygelyks usb- hdd).

Temperatuermonitoring waard útfierd fia it RODOS-5-apparaat. Fansels kinne jo de Dallas 1820 direkt brûke, mar it wie flugger en makliker om in USB yn te stekken.

grub86 waard selektearre as de bootloader foar x64_2. It wie nedich om in minimale konfiguraasje te skriuwen om it te starten.

Nei it debuggen op qemu, waard it oerdroegen oan it asus tinkerboard. De struktuer fan myn overlay wie yn earste ynstânsje bedoeld om cross-platfoarm te wêzen - it tawizen fan konfiguraasjes spesifyk foar elk boerd (board defconfig, bootloader, it generearjen fan in ôfbylding mei in systeempartition) en maksimale uniformiteit by it oanpassen fan it bestânsysteem / it meitsjen fan in ôfbylding mei gegevens. Troch sa'n tarieding gie it portearjen fluch.

It is tige oan te rieden om de ynliedende artikels te lêzen:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Hoe te sammeljen

It projekt wurdt opslein op github
Nei it klonen fan it repository wurdt de folgjende triemstruktuer krigen:

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

buildroot-2019.05.tar.gz - skjin buildroot-argyf
overlay is myn map mei eksterne-beam. Dit is wêr alles wat jo nedich binne om de firmware te bouwen mei buildroot wurdt opslein.
README.md - beskriuwing fan it projekt en hânlieding yn it Ingelsk.
run_me.sh is in skript dat it bousysteem taret. Wreidet buildroot út fan it argyf, hechtet der in overlay oan (fia it eksterne beammeganisme) en lit jo it doelboerd selektearje foar montage

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

Gean hjirnei gewoan nei de map buildroot-2019.05 en fier it kommando make.
Sadree't de bou foltôge is, sille alle bouresultaten yn 'e útfier / ôfbyldings map wêze:

[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

Fereaske triemmen:

  • sdcard.img - mediaôfbylding foar opname op in SD-kaart (fia dd of rufus ûnder wibdows).
  • qemu.qcow2 - mediaôfbylding om te rinnen yn qemu.
  • external.qcow2 - eksterne media ôfbylding foar de databank
  • monitor-0.9-beta.tar.gz - argyf foar bywurkjen fia de webynterface

Generaasje fan gidsen

It is net wurdich om deselde ynstruksjes ferskate kearen te skriuwen. En it meast logyske ding is om it ien kear te skriuwen yn markdown, en dan omsette nei PDF foar downloaden en html foar de webynterface. Dit is mooglik troch it pandoc-pakket.

Tagelyk moatte al dizze bestannen generearre wurde foardat it systeemôfbylding gearstald is, dy post-build-skripts binne al nutteloos. Dêrom wurdt de generaasje dien yn 'e foarm fan in hânboekpakket. Jo kinne sjen op overlay / pakket / hânboeken.

It bestân manuals.mk (dat al it wurk docht)

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

De Linux-wrâld beweecht aktyf nei systemd, en ik moast it ek dwaan.
Ien fan 'e noflike ynnovaasjes is de oanwêzigens fan timers. Yn 't algemien wurdt in apart artikel oer har skreaun (en net allinich oer har), mar ik sil it jo koart fertelle.

D'r binne aksjes dy't periodyk moatte wurde útfierd. Ik moast logrotate útfiere om de lighttpd- en php-fpm-logs te wiskjen. It gewoane ding soe wêze om de kommando's yn cron te skriuwen, mar ik besleat de systemd monotone timer te brûken. Dus logrotate rint op in strang tiidsinterval.

Fansels is it mooglik om timers te meitsjen dy't op bepaalde datums fjoerje, mar ik hie dit net nedich.
Foarbyld fan timer:

  • Timer triem
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer] OnBootSec=1min
OnUnitActiveSec=1min

[Ynstallearje] WantedBy=timers.target

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

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

Stipe boards

Asus tinker board is it haadboerd wêrop alles moat wurkje. Selektearre as goedkeap en heul krêftich.

Beaglebone swart is it earste boerd wêrop operaasje waard hifke (by de seleksje fan in machtiger boerd).

Qemu x86_64 - brûkt foar debuggen ûntwikkeling.

Hoe't it wurket

By it opstarten komt in twa-etappe restauraasje fan ynstellings foar:

  • it útfieren fan it settings_restore-skript (fia de tsjinst). It herstelt basissysteemynstellingen - tiidsône, locale, netwurkynstellingen, ensfh.
  • it tariede skript útfiere (fia de tsjinst) - hjir wurde zabbix en de databank taret, de IP wurdt útfierd nei de konsole.

As jo ​​​​it earst begjinne, wurdt de grutte fan 'e twadde dieling fan' e SD-kaart bepaald. As d'r noch net-allokearre romte is, wurdt de media opnij ferdield, en de gegevensseksje nimt alle frije romte yn. Dit wurdt dien om de grutte fan de ynstallaasjeôfbylding (sdcard.img) te ferminderjen. Derneist wurdt de postgresql-wurkmap op dit punt oanmakke. Dêrom sil de earste lansearring mei in nije drager langer duorje dan de folgjende.

By it ferbinen fan in eksterne skiif, siket it op it momint fan opstarten nei in frije skiif en formattearret it yn ext4 mei it eksterne label.

Oandacht! By it ferbinen fan in eksterne skiif (lykas it loskoppelen of ferfangen), moatte jo in reservekopy meitsje en de ynstellingen weromsette!

It RODOS 5-apparaat wurdt brûkt foar temperatuermonitoring. De fabrikant leveret de boarnekoade fan har nut foar it wurkjen mei it apparaat. As it systeem ynskeakele is, begjint de rodos-timer, dy't dit hulpprogramma ien kear yn 'e minút rint. De hjoeddeistige temperatuer wurdt skreaun nei de triem /tmp/rodos_current_temp, wêrnei't zabbix dizze triem as sensor kin kontrolearje.

De konfiguraasje opslachmedia is monteard yn 'e /data-map.

By it opstarten fan it systeem en it tarieden op operaasje, ferskynt it folgjende berjocht yn 'e konsole:

System starting, please wait

Nei it foltôgjen fan it tariedende wurk sil it feroarje nei it werjaan fan it IP-adres:

current ip 192.168.1.32
Ready to work

It ynstellen fan zabbix foar temperatuermonitoring

Om de temperatuer te kontrolearjen, nim dan gewoan 2 stappen:

  • ferbine it RODOS-apparaat oan 'e USB-poarte
  • meitsje gegevens item yn zabbix

Iepenje de zabbix-webynterface:

  • Iepenje de seksje Konfiguraasje → Hosts
  • Klikje op Items yn 'e line fan ús zabbix-tsjinner
  • Klikje op Item oanmeitsje

Buildroot: Cross-platform firmware meitsje mei zabbix-server

Fier de folgjende gegevens yn:

  • namme - nei jo goedtinken (bygelyks serverRoomTemp )
  • Type - zabbix agent
  • Key - Rodos
  • Type-numerike
  • Ienheden - C
  • Skiednis opslach perioade - skiednis opslach perioade. lofts 10 dagen
  • Trend opslachperioade - opslachperioade foar de dynamyk fan feroaringen. 30 dagen oerbleaun
  • Nije applikaasje - tsjinner Room Temp

En druk op de ADD knop.
Buildroot: Cross-platform firmware meitsje mei zabbix-server

Behear ynstellings fia web ynterface

De webynterface is skreaun yn PHP. D'r binne haadfunksjes:

  • sjoch apparaat status
  • feroarje netwurk ynstellings
    Buildroot: Cross-platform firmware meitsje mei zabbix-server
  • brûker wachtwurd feroarje
  • tiidsône seleksje
  • reservekopy / weromsette / fabryk weromsette
  • mooglikheid om te ferbinen in eksterne skiif
  • Systeemupdate
    Buildroot: Cross-platform firmware meitsje mei zabbix-server

Oanmelde by de webynterface is wachtwurd beskerme. Startside - hânboek.

Zabbix-ynterface-adres: ${ip/dns}/zabbix
Behearynterfaceadres: ${ip/dns}/manage
Buildroot: Cross-platform firmware meitsje mei zabbix-server

Running yn 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

Dit kommando sil in systeem begjinne mei 4 kearnen, 2048 RAM, KVM ynskeakele, in netwurkkaart op bridge0 en twa skiven: ien foar it systeem en ien ekstern foar postgresql.

Ofbyldings kinne wurde konvertearre en rinne yn Virtualbox:

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

Ymportearje se dan yn virtualbox en ferbine fia sata.

konklúzje

Yn it proses waard ik ynteressearre yn it meitsjen fan in klear te brûken produkt - mei in net heul moaie ynterface (ik skriuw se net leuk), mar ien dy't wurket en maklik te konfigurearjen is.

De lêste besykjen om zabbix-apparaat yn KVM te ynstallearjen liet sjen dat dizze stap korrekt wie (nei't de ynstallaasje foltôge is, begjint it systeem net). Miskien doch ik wat ferkeard 😉

Materialen

https://buildroot.org/

Boarne: www.habr.com

Add a comment