Buildroot: Erstellt Cross-Plattform Firmware mat zabbix-Server

Buildroot: Erstellt Cross-Plattform Firmware mat zabbix-Server

Problem Geschicht

Kleng Betriber, engersäits, brauche qualitativ héichwäerteg Iwwerwaachung vun hirer Infrastruktur (besonnesch am Liicht vun der verbreeter Virtualiséierung), op der anerer Säit ass et finanziell schwéier fir si nei Ausrüstung ze kafen. Server / Hardware Problemer sinn och heefeg: dacks ginn et 1-3 Tuerm Serveren nieft Benotzer Aarbechtsstatiounen oder an enger klenger Nisch / Kleederschaaf.

Et ass méi einfach eng fäerdeg Versammlung (Verdeelung) ze benotzen, déi Dir just op eng MicroSD Kaart eropluede musst an an e gemeinsame Singleboard Computer (Beaglebone, Raspberry Pi an Orange Pi Famillen, Asus Tinker Board) setzen. Zousätzlech ass esou Ausrüstung bëlleg a kann iwwerall installéiert ginn.

Problemerklärung

A ville Weeër huet de Projet sech als eng Aart Laboraarbecht entwéckelt mat der Méiglechkeet d'Resultater anzesetzen.

Zabbix gouf als Iwwerwaachungssystem gewielt well et e mächtege, gratis a gutt dokumentéiert System ass.

D'Thema vun der Hardwareplattform ass akut ginn, eng separat Maschinn ënner Iwwerwaachung ze setzen ass och net eng ganz gutt Léisung - entweder et ass deier fir nei Ausrüstung ze kafen, oder fir al Ausrüstung ze sichen + a klenge Betriber ginn et dacks Probleemer mat Server/ Hardware.

D'Benotzung vum Buildroot Build System erlaabt Iech spezialiséiert Léisungen ze kreéieren déi vu Personal mat minimalem Wëssen iwwer Linux Betribssystemer bedriwwe kënne ginn. Dëse System ass frëndlech fir Ufänger, awer gläichzäiteg bitt vill Personnalisatiounsméiglechkeeten an den Hänn vun engem erfuerene Entwéckler. Et ass perfekt fir de Problem vun der preiswerter, awer voll funktionneller Iwwerwaachung vun der IT-Infrastruktur ze léisen, mat minimalen Ufuerderunge fir d'Ausbildung vum Personal dat et bedreift.

Léisung Schrëtt

Et gouf beschloss fir d'éischt Firmware fir x86_64 ze kreéieren fir a qemu ze lafen, well dëst eng praktesch a séier Léisung fir Debugging ass. Dann port et op en Aarm Single-Board Computer (Ech hunn den asus Tinker Board gär).

Buildroot gouf als Build System ausgewielt. Am Ufank feelt et dem Zabbix-Package, sou datt et muss portéiert ginn.Et ware Problemer mat der russescher Lokalitéit, déi geléist goufen andeems Dir déi entspriechend Patches applizéiert (Notiz: an nei Versioune vu Buildroot sinn dës Patches net méi gebraucht).

Porting vum Zabbix Package selwer gëtt an engem separaten Artikel beschriwwen.

Well alles sollt als Firmware funktionnéieren (onverännerbar Systembild + erhuelbar Konfiguratioun / Datebankdateien), war et néideg fir Är eege Systemziler, Servicer an Timer ze schreiwen (Zil, Service, Timer).

Et gouf decidéiert d'Medien an 2 Sektiounen opzedeelen - eng Sektioun mat Systemdateien an eng Sektioun mat verännerbaren Konfiguratiounen an zabbix Datebankdateien.

D'Léisung vu Problemer am Zesummenhang mat der Datebank huet sech e bësse méi schwéier erausgestallt. Ech wollt et net direkt op de Medien setzen. Zur selwechter Zäit kann d'Gréisst vun der Datebank eng Gréisst erreechen déi d'Gréisst vun enger méiglecher Ramdisk iwwerschreift. Dofir gouf eng Kompromissléisung gewielt: d'Datebank ass op der zweeter Sektioun vun der SD Kaart (modern SLC Kaarten hunn bis zu 30 Schreifzyklen), awer et gëtt eng Astellung déi d'Benotzung vun externe Medien erlaabt (zum Beispill USB- hdd).

Temperatur Iwwerwaachung gouf duerch den RODOS-5 Apparat implementéiert. Natierlech kënnt Dir den Dallas 1820 direkt benotzen, awer et war méi séier a méi einfach e USB ze pluggen.

grub86 gouf als Bootloader fir x64_2. Et war néideg eng minimal Configuratioun ze schreiwen fir se ze starten.

Nom Debugging op qemu gouf et op den asus Tinker Board portéiert. D'Struktur vu menger Iwwerlagerung war ufanks geduecht fir Cross-Plattform ze sinn - allokéieren Konfiguratiounen spezifesch fir all Board (Bord defconfig, Bootloader, Generéiere vun engem Bild mat enger Systempartition) a maximal Uniformitéit beim Personnalisatioun vum Dateiesystem / Erstellt e Bild mat Daten. Wéinst esou Virbereedung ass Porting séier gaangen.

Et ass héich recommandéiert d'Aféierungsartikelen ze liesen:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Wéi ze versammelen

De Projet gëtt op github gespäichert
Nom Klonen vum Repository gëtt déi folgend Dateistruktur kritt:

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

buildroot-2019.05.tar.gz - propper Buildroot Archiv
overlay ass mäi Verzeechnes mat externen Bam. Dëst ass wou alles wat Dir braucht fir d'Firmware ze bauen mat Buildroot gespäichert ass.
README.md - Projet Beschreiwung an Handbuch op Englesch.
run_me.sh ass e Skript dat de Bausystem virbereet. Erweidert Buildroot aus dem Archiv, befestegt en Iwwerlager derbäi (iwwer den externen Bammechanismus) an erlaabt Iech d'Zilplat fir de Bau ze wielen

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

Duerno gitt einfach an de buildroot-2019.05 Verzeichnis a lafen de Make Kommando.
Wann de Bau fäerdeg ass, sinn all d'Bauresultater am Output / Biller Verzeechnes:

[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

Néideg Dateien:

  • sdcard.img - Medienbild fir op eng SD Kaart opzehuelen (iwwer dd oder rufus ënner Wibdows).
  • qemu.qcow2 - Medienbild fir am qemu ze lafen.
  • external.qcow2 - extern Medien Bild fir d'Datebank
  • monitor-0.9-beta.tar.gz - Archiv fir d'Aktualiséierung iwwer d'Webinterface

Generatioun vu Guiden

Et ass net derwäert déi selwecht Instruktioune e puer Mol ze schreiwen. An déi logeschst Saach ass et eemol am Markdown ze schreiwen, an dann op PDF konvertéieren fir erofzelueden an HTML fir de Webinterface. Dëst ass méiglech dank dem Pandoc Package.

Zur selwechter Zäit musse all dës Dateie generéiert ginn ier de Systembild gesammelt gëtt; dës Post-Build Scripte si scho nëtzlos. Dofir gëtt d'Generatioun a Form vun engem Handbuch Package gemaach. Dir kënnt Iwwerlagerung / Package / Handbuch kucken.

D'manuals.mk Datei (déi all d'Aarbecht mécht)

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

D'Linux Welt bewegt sech aktiv op systemd, an ech hunn et och missen maachen.
Eng vun den agreabelen Innovatiounen ass d'Präsenz vun Timer. Am Allgemengen gëtt en separaten Artikel iwwer si geschriwwen (an net nëmmen iwwer si), awer ech wäert Iech kuerz soen.

Et ginn Aktiounen déi periodesch musse gemaach ginn. Ech hu misse Logrotate lafen fir d'lighttpd a php-fpm Logbicher ze läschen. Déi üblech Saach wier d'Befehle am Cron ze schreiwen, awer ech hunn decidéiert de systemd monotone Timer ze benotzen. Also logrotate leeft mat engem strikten Zäitintervall.

Natierlech ass et méiglech Timer ze kreéieren déi op bestëmmten Datumen brennen, awer ech hunn dat net gebraucht.
Timer Beispill:

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

[Timer] OnBootSec=1min
OnUnitActiveSec=1min

[Installéieren] WantedBy=timers.target

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

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

Ënnerstëtzt Brieder

Asus Tinker Board ass den Haaptplat op deem alles soll funktionnéieren. Ausgewielt als bëlleg a ganz mächteg.

Beaglebone schwaarz ass den éischte Board op deem d'Operatioun getest gouf (während der Auswiel vun engem méi mächtege Board).

Qemu x86_64 - benotzt fir Debugging Entwécklung.

Wéi et schafft

Beim Startup geschitt eng zweestufeg Restauratioun vun Astellungen:

  • Lafen den Settings_restore Skript (iwwer de Service). Et restauréiert d'Basis Systemastellungen - Zäitzone, Lokalitéit, Netzwierkastellungen, etc.
  • Lafen de Preparatiounsskript (iwwer de Service) - hei sinn zabbix an d'Datebank virbereet, d'IP gëtt op d'Konsole erausginn.

Wann Dir et fir d'éischt ufänkt, gëtt d'Gréisst vun der zweeter Partition vun der SD Kaart bestëmmt. Wann et nach ëmmer net allokéiert Plaz ass, ginn d'Medien opgedeelt, an d'Datesektioun hëlt all fräi Plaz op. Dëst gëtt gemaach fir d'Gréisst vum Installatiounsbild ze reduzéieren (sdcard.img). Zousätzlech gëtt de Postgresql Aarbechtsverzeechnes op dësem Punkt erstallt. Dofir wäert den éischte Start mat engem neien Carrier méi laang sinn wéi déi spéider.

Wann Dir en externen Drive verbënnt, sicht et am Moment vum Start no engem gratis Drive a formatéiert en an ext4 mam externen Label.

Opgepasst! Wann Dir en externen Drive verbënnt (sou wéi se trennt oder ersetzt), musst Dir e Backup maachen an d'Astellunge restauréieren!

De RODOS 5 Apparat gëtt fir Temperatur Iwwerwaachung benotzt. Den Hiersteller liwwert de Quellcode vu sengem Utility fir mam Apparat ze schaffen. Wann Dir de System uschalt, fänkt de Rodos Timer un, deen dësen Utility eemol pro Minutt leeft. Déi aktuell Temperatur gëtt an d'Datei /tmp/rodos_current_temp geschriwwen, duerno kann zabbix dës Datei als Sensor iwwerwaachen.

D'Konfiguratiounsspeichermedien sinn am /data Verzeichnis montéiert.

Wann Dir de System start an et op d'Operatioun virbereet, erschéngt de folgende Message an der Konsole:

System starting, please wait

Nodeems d'Virbereedungsaarbecht ofgeschloss ass, ännert et sech op d'IP Adress ze weisen:

current ip 192.168.1.32
Ready to work

Astelle Zabbix fir Temperatur Iwwerwachung

Fir d'Temperatur ze iwwerwaachen, maacht just 2 Schrëtt:

  • verbënnt de RODOS-Gerät an den USB Hafen
  • schafen daten Element an zabbix

Öffnen der Zabbix Web Interface:

  • Öffnen d'Sektioun Configuratioun → Hosts
  • Klickt op Artikelen an der Linn vun eisem Zabbix Server
  • Klickt op Element erstellen

Buildroot: Erstellt Cross-Plattform Firmware mat zabbix-Server

Gitt déi folgend Donnéeën un:

  • Numm - no Ärem Diskretioun (zum Beispill ServerRoomTemp )
  • Typ - Zabbix Agent
  • Schlëssel - Rodos
  • Typ-numeresch
  • Eenheeten - C
  • Geschicht Stockage Period - Geschicht Stockage Period. lénks 10 Deeg
  • Trend Stockage Period - Stockage Period fir d'Dynamik vun Ännerungen. Lénks 30 Deeg
  • Nei Applikatioun - Server Sall Temp

An dréckt den ADD Knäppchen.
Buildroot: Erstellt Cross-Plattform Firmware mat zabbix-Server

Managen Astellungen iwwer Web Interface

De Webinterface ass a PHP geschriwwen. Et ginn Haaptfunktiounen:

  • gesinn Apparat Status
  • änneren Reseau Astellunge
    Buildroot: Erstellt Cross-Plattform Firmware mat zabbix-Server
  • Benotzer Passwuert änneren
  • Zäit Zone Auswiel
  • Backupsatellit / Restauréieren / Fabréck zréckgesat
  • Fäegkeet fir en externen Drive ze verbannen
  • Systemaktualiséierung
    Buildroot: Erstellt Cross-Plattform Firmware mat zabbix-Server

Login op de Web Interface ass Passwuert geschützt. Start Säit - Handbuch.

Zabbix Interface Adress: ${ip/dns}/zabbix
Management Interface Adress: ${ip/dns}/manage
Buildroot: Erstellt Cross-Plattform Firmware mat zabbix-Server

Lafen an 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 Datei=output/images/qemu.qcow2,format=qcow2,aio=threads -device virtio-scsi-pci,id=scsi0 -drive file=output/images/external.qcow2,format=qcow2,aio=threads

Dëse Kommando start e System mat 4 Cores, 2048 RAM, KVM aktivéiert, eng Netzwierkkaart op Bridge0 an zwee Scheiwen: eng fir de System an een extern fir postgresql.

Biller kënnen ëmgewandelt a lafen an Virtualbox:

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

Import se dann an d'Virtualbox a verbënnt iwwer sata.

Konklusioun

Am Prozess hunn ech mech interesséiert fir e prett-ze-benotzen Produkt ze maachen - mat engem net ganz schéinen Interface (ech schreiwen se net gär), awer een deen funktionnéiert an ass einfach ze konfiguréieren.

De leschte Versuch fir den Zabbix-Apparat an KVM z'installéieren huet gewisen datt dëse Schrëtt richteg war (no der Installatioun ofgeschloss ass, fänkt de System net un). Vläicht maachen ech eppes falsch 😉

Material

https://buildroot.org/

Source: will.com

Setzt e Commentaire