Buildroot: Krijimi i firmuerit ndër-platformë me serverin zabbix

Buildroot: Krijimi i firmuerit ndër-platformë me serverin zabbix

Historia e problemeve

Kompanitë e vogla, nga njëra anë, kanë nevojë për monitorim me cilësi të lartë të infrastrukturës së tyre (veçanërisht në dritën e virtualizimit të përhapur), nga ana tjetër, është e vështirë financiarisht për to të blejnë pajisje të reja. Problemet e serverit/hardware janë gjithashtu të zakonshme: shpesh ka 1-3 serverë kullë pranë stacioneve të punës së përdoruesit ose në një kamare/dollap të vogël.

Është më e lehtë të përdorësh një asamble të gatshme (shpërndarje), të cilën thjesht duhet ta ngarkosh në një kartë microSD dhe ta futësh në një kompjuter të zakonshëm me një tabelë (familjet beaglebone, raspberry pi dhe orange pi, asus tinker board). Për më tepër, pajisje të tilla janë të lira dhe mund të instalohen kudo.

Formulimi i problemit

Në shumë mënyra, projekti u zhvillua si një lloj pune laboratorike me mundësinë e aplikimit të rezultateve.

Zabbix u zgjodh si sistem monitorimi sepse është një sistem i fuqishëm, i lirë dhe i mirë-dokumentuar.

Problemi me platformën harduerike është bërë i mprehtë. Vënia e një makinerie të veçantë nën monitorim nuk është gjithashtu një zgjidhje shumë e mirë - ose është e shtrenjtë të blesh pajisje të reja, ose të kërkosh pajisje të vjetra + në kompanitë e vogla ka probleme të shpeshta me serverin/ hardware.

Përdorimi i sistemit të ndërtimit buildroot ju lejon të krijoni zgjidhje të specializuara që mund të operohen nga personeli me njohuri minimale të sistemeve operative Linux. Ky sistem është miqësor për fillestarët, por në të njëjtën kohë ofron mundësi të shumta personalizimi në duart e një zhvilluesi me përvojë. Është perfekt për zgjidhjen e problemit të monitorimit të lirë, por plotësisht funksional të infrastrukturës së TI-së, me kërkesa minimale për trajnimin e personelit që e operon atë.

Hapat e zgjidhjes

U vendos që fillimisht të krijohej firmware për x86_64 për të ekzekutuar në qemu, pasi kjo është një zgjidhje e përshtatshme dhe e shpejtë për korrigjimin e gabimeve. Pastaj transferojeni atë në një kompjuter me një bord të vetëm (më pëlqeu asus tinker board).

buildroot u zgjodh si sistemi i ndërtimit. Fillimisht i mungon paketa zabbix, ndaj duhej të portohej.Kishte probleme me lokalizimin rus, të cilat u zgjidhën duke aplikuar arna përkatëse (shënim: në versionet më të reja të buildroot, këto arna nuk nevojiten më).

Transportimi i vetë paketës zabbix do të përshkruhet në një artikull të veçantë.

Meqenëse gjithçka duhet të funksionojë si firmware (imazhi i pandryshueshëm i sistemit + skedarët e konfigurimit/bazës së të dhënave të rikuperueshme), ishte e nevojshme të shkruani objektivat, shërbimet dhe kohëmatësit tuaj të sistemit (objektivi, shërbimi, kohëmatësi).

U vendos që media të ndahej në 2 seksione - një seksion me skedarë sistemi dhe një seksion me konfigurime të ndryshueshme dhe skedarë të bazës së të dhënave zabbix.

Zgjidhja e problemeve që lidhen me bazën e të dhënave doli të ishte pak më e vështirë. Nuk doja ta vendosja direkt në media. Në të njëjtën kohë, madhësia e bazës së të dhënave mund të arrijë një madhësi që tejkalon madhësinë e një ramdisku të mundshëm. Prandaj, u zgjodh një zgjidhje kompromisi: baza e të dhënave ndodhet në seksionin e dytë të kartës SD (kartat moderne SLC kanë deri në 30 cikle shkrimi), por ekziston një cilësim që lejon përdorimin e mediave të jashtme (për shembull, usb- HDD).

Monitorimi i temperaturës u zbatua përmes pajisjes RODOS-5. Natyrisht, ju mund të përdorni Dallas 1820 drejtpërdrejt, por ishte më e shpejtë dhe më e lehtë për të lidhur një USB.

grub86 u zgjodh si bootloader për x64_2. Ishte e nevojshme të shkruani një konfigurim minimal për ta nisur atë.

Pas korrigjimit në qemu, ai u transferua në bordin e asus tinker. Struktura e mbivendosjes sime fillimisht ishte menduar të ishte ndër-platformë - shpërndarja e konfigurimeve specifike për çdo tabelë (defconfig, bootloader, gjenerimi i një imazhi me një ndarje të sistemit) dhe uniformiteti maksimal në personalizimin e sistemit të skedarëve/krijimin e një imazhi me të dhëna. Për shkak të përgatitjes së tillë, transportimi shkoi shpejt.

Rekomandohet shumë të lexoni artikujt hyrës:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Si të mblidhen

Projekti ruhet në github
Pas klonimit të depove, merret struktura e mëposhtme e skedarit:

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

buildroot-2019.05.tar.gz - arkiv i pastër buildroot
mbivendosja është drejtoria ime me pemën e jashtme. Këtu ruhet gjithçka që ju nevojitet për të ndërtuar firmuerin duke përdorur buildroot.
README.md - përshkrimi i projektit dhe manuali në anglisht.
run_me.sh është një skript që përgatit sistemin e ndërtimit. Zgjeron buildroot-in nga arkivi, i bashkëngjit një mbivendosje (nëpërmjet mekanizmit të pemës së jashtme) dhe ju lejon të zgjidhni tabelën e synuar për ndërtimin

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

Pas kësaj, thjesht shkoni te drejtoria buildroot-2019.05 dhe ekzekutoni komandën make.
Pasi të përfundojë ndërtimi, të gjitha rezultatet e ndërtimit do të jenë në direktorinë e prodhimit/imazheve:

[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

Skedarët e kërkuar:

  • sdcard.img - imazh mediatik për regjistrim në një kartë SD (nëpërmjet dd ose rufus nën wibdows).
  • qemu.qcow2 - imazh mediatik për t'u ekzekutuar në qemu.
  • external.qcow2 - imazh i medias së jashtme për bazën e të dhënave
  • monitor-0.9-beta.tar.gz - arkiv për përditësim nëpërmjet ndërfaqes në internet

Gjenerimi i Guidave

Nuk ia vlen të shkruani të njëjtat udhëzime disa herë. Dhe gjëja më logjike është ta shkruani atë një herë në shënim, dhe më pas ta konvertoni në PDF për shkarkim dhe html për ndërfaqen në internet. Kjo është e mundur falë paketës pandoc.

Në të njëjtën kohë, të gjithë këta skedarë duhet të krijohen përpara se të montohet imazhi i sistemit; ato skripte pas ndërtimit janë tashmë të padobishme. Prandaj, gjenerimi bëhet në formën e një pakete manualesh. Mund të shikoni mbivendosjen/paketimin/manualet.

Skedari manuals.mk (i cili kryen të gjitha punët)

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

Bota Linux po kalon në mënyrë aktive në systemd, dhe mua më duhej ta bëja gjithashtu.
Një nga risitë e këndshme është prania e kohëmatësve. Në përgjithësi, një artikull i veçantë po shkruhet për ta (dhe jo vetëm për ta), por unë do t'ju tregoj shkurtimisht.

Ka veprime që duhet të kryhen periodikisht. Më duhej të ekzekutoja logrotate për të pastruar regjistrat lighttpd dhe php-fpm. Gjëja e zakonshme do të ishte të shkruaja komandat në cron, por vendosa të përdor kohëmatësin monotonik të sistemuar. Pra, logrotate shkon në një interval kohor të rreptë.

Sigurisht, është e mundur të krijohen kohëmatës që ndezin në data të caktuara, por kjo nuk më duhej.
Shembull i kohëmatësit:

  • Skedari i kohëmatësit
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer] OnBootSec=1min
OnUnitActiveSec=1min

[Instalo] WantedBy=timers.target

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

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

Bordet e mbështetura

Asus tinker board është bordi kryesor në të cilin gjithçka duhet të funksionojë. Zgjedhur si të lira dhe shumë të fuqishme.

Beaglebone black është bordi i parë në të cilin është testuar funksionimi (gjatë zgjedhjes së një bordi më të fuqishëm).

Qemu x86_64 - përdoret për zhvillimin e korrigjimit.

Si punon kjo

Në fillim, ndodh një rivendosje me dy faza të cilësimeve:

  • ekzekutimi i skriptit settings_restore (përmes shërbimit). Ai rikthen cilësimet bazë të sistemit - zonën kohore, vendndodhjen, cilësimet e rrjetit, etj.
  • ekzekutimi i skriptit përgatit (nëpërmjet shërbimit) - këtu përgatiten zabbix dhe baza e të dhënave, IP-ja del në tastierë.

Kur e nisni për herë të parë, përcaktohet madhësia e ndarjes së dytë të kartës SD. Nëse ka ende hapësirë ​​të pandarë, media ndahet dhe seksioni i të dhënave zë të gjithë hapësirën e lirë. Kjo është bërë për të zvogëluar madhësinë e imazhit të instalimit (sdcard.img). Për më tepër, drejtoria e punës postgresql krijohet në këtë pikë. Kjo është arsyeja pse nisja e parë me një operator të ri do të jetë më e gjatë se ato të mëvonshme.

Kur lidh një disk të jashtëm, në momentin e nisjes kërkon një disk të lirë dhe e formaton në ext4 me etiketën e jashtme.

Kujdes! Kur lidhni një disk të jashtëm (si dhe shkëputni ose zëvendësoni atë), duhet të bëni një kopje rezervë dhe të rivendosni cilësimet!

Pajisja RODOS 5 përdoret për monitorimin e temperaturës. Prodhuesi ofron kodin burimor të programit të tij për të punuar me pajisjen. Kur sistemi është i ndezur, fillon kohëmatësi i rodos, i cili e ekzekuton këtë program një herë në minutë. Temperatura aktuale është shkruar në skedarin /tmp/rodos_current_temp, pas së cilës zabbix mund të monitorojë këtë skedar si sensor.

Media e ruajtjes së konfigurimit është montuar në drejtorinë /data.

Kur filloni sistemin dhe e përgatitni atë për funksionim, mesazhi i mëposhtëm shfaqet në tastierë:

System starting, please wait

Pas përfundimit të punës përgatitore, ajo do të ndryshojë në shfaqjen e adresës IP:

current ip 192.168.1.32
Ready to work

Vendosja e zabbix për monitorimin e temperaturës

Për të monitoruar temperaturën, bëni vetëm 2 hapa:

  • lidhni pajisjen RODOS me portën USB
  • krijoni artikullin e të dhënave në zabbix

Hapni ndërfaqen e internetit zabbix:

  • Hapni seksionin Konfigurimi → Hosts
  • Klikoni mbi Artikujt në linjën e serverit tonë zabbix
  • Klikoni mbi Krijo artikull

Buildroot: Krijimi i firmuerit ndër-platformë me serverin zabbix

Futni të dhënat e mëposhtme:

  • emri - sipas gjykimit tuaj (për shembull, serverRoomTemp )
  • Lloji - agjent zabbix
  • Çelësi - Rodos
  • Lloji-numerike
  • Njësitë - C
  • Periudha e ruajtjes së historisë - periudha e ruajtjes së historisë. lënë 10 ditë
  • Periudha e ruajtjes së trendit - periudha e ruajtjes për dinamikën e ndryshimeve. Kanë mbetur 30 ditë
  • Aplikacion i ri - Serveri Room Temp

Dhe shtypni butonin ADD.
Buildroot: Krijimi i firmuerit ndër-platformë me serverin zabbix

Menaxhoni cilësimet përmes ndërfaqes në internet

Ndërfaqja e internetit është e shkruar në PHP. Ka funksione kryesore:

  • shikoni statusin e pajisjes
  • ndryshimi i cilësimeve të rrjetit
    Buildroot: Krijimi i firmuerit ndër-platformë me serverin zabbix
  • ndryshimi i fjalëkalimit të përdoruesit
  • zgjedhja e zonës kohore
  • rezervë/rivendosje/rivendosje në gjendje fabrike
  • aftësia për të lidhur një disk të jashtëm
  • Përditësimi i sistemit
    Buildroot: Krijimi i firmuerit ndër-platformë me serverin zabbix

Hyrja në ndërfaqen e internetit është e mbrojtur me fjalëkalim. Faqja e fillimit - manual.

Adresa e ndërfaqes Zabbix: ${ip/dns}/zabbix
Adresa e ndërfaqes së menaxhimit: ${ip/dns}/manage
Buildroot: Krijimi i firmuerit ndër-platformë me serverin zabbix

Vrapim në qemu

qemu-system-x86_64 -smp 4 -m 4026M -aktivizo-kvm -machine q35,accel=kvm -pajisja intel-iommu -cpu host -net nic -net bridge,br=bridge0 -pajisja 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

Kjo komandë do të nisë një sistem me 4 bërthama, 2048 RAM, KVM të aktivizuar, një kartë rrjeti në bridge0 dhe dy disqe: një për sistemin dhe një të jashtëm për postgresql.

Imazhet mund të konvertohen dhe të ekzekutohen në Virtualbox:

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

Më pas importojini ato në virtualbox dhe lidheni përmes sata.

Përfundim

Në këtë proces, u interesova të bëja një produkt të gatshëm për përdorim - me një ndërfaqe jo shumë të bukur (nuk më pëlqen t'i shkruaj), por që funksionon dhe është e lehtë për t'u konfiguruar.

Përpjekja e fundit për të instaluar zabbix-appliance në KVM tregoi se ky hap ishte i saktë (pas përfundimit të instalimit, sistemi nuk fillon). Ndoshta po bëj diçka të gabuar 😉

Materiale

https://buildroot.org/

Burimi: www.habr.com

Shto një koment