Buildroot: Krijimi i një firmware të krosplatformat me zabbix-server

Buildroot: Krijimi i një firmware të krosplatformat me zabbix-server

Historia e detyrës

Firmat e vogla nga njëra anë kanë nevojë për një monitorim cilësor të infrastrukturës së tyre (sidomos në dritën e virtualizimit të përhapur), ndërsa nga ana tjetër, është e vështirë financiarisht për ta të blejnë pajisje të reja. Gjithashtu, shpesh hasen probleme me serverët/pajisjet: zakonisht janë 1-3 serverë tower pranë vendet e punës të përdoruesve ose në një niçë të vogël.

Më lehtë është të përdorësh një ndërtim të gatshëm (distributiv), i cili mjafton të ngarkohet në një microSD dhe të vendoset në një kompjuter një-plakë (beaglebone, familja raspberry pi dhe orange pi, asus tinker board). Për më tepër, pajisja e tillë është e lirë dhe mund të instalohet në çdo vend.

Formulimi i detyrës

Në shumë aspekte, projekti u zhvillua si një punë laboratorike me mundësinë e për të aplikuar rezultatet.

Sistemi i monitorimit i përzgjedhur ishte zabbix, pasi është një sistem i fuqishëm, falas dhe i dokumentuar mirë.

Doli një pyetje e mprehtë për platformën harduerike. Të vendosësh një makinë të veçantë për monitorim gjithashtu nuk është një zgjidhje shumë e mirë — ose është shpërndarsht e shtrenjtë për të blerë pajisje të reja, ose duhet të kërkosh të vjetër + në firmat e vogla ka shpesh probleme me serverët/pajisjet.

Përdorimi i sistemit të ndërtimit buildroot lejon krijimin e zgjidhjeve të specializuara që mund të eksploatohen nga personeli me njohuri minimale të sistemeve operative të familjes Linux. Ky sistem është miqësor me fillestarët, por gjithashtu ofron mundësi të gjera për personalizim në duar të zhvilluesve me përvojë. Ai është shumë i përshtatshëm për të zgjidhur problemin e monitorimit të IT-infrastrukturës me kosto të ulët, që është minimalisht kërkues ndaj përgatitjes së personelit që e përdor.

Hapat e zgjidhjes

U vendos fillimisht që të krijohet një firmware për x86_64 për të funksionuar në qemu, pasi është një zgjidhje e përshtatshme dhe e shpejtë për debugging. Pas saj, do të portit në një kompjuter një-plakë arm (më pëlqeu asus tinker board).

Si sistem ndërtimi u zgjodh buildroot. Në fillim, paketa zabbix mungonte në të, kështu që duhej ta portit. Kishim probleme me lokalizimin rus, të cilat u zgjidhën duke aplikuar patch-et përkatëse (shënim: në versionet më të reja të buildroot, këto patch-e nuk janë më të nevojshme).

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

Duke duhet të funksionojë si një firmware (imazhi i palëvizshëm i sistemit + skedarët e rinovueshëm të konfigurimeve/bazës së të dhënave), ishte e nevojshme të shkruhej target, shërbime dhe timer-e systemd.

Ishte marrë vendimi për të ndarë mediumin në dy pjesë — një pjesë me skedarët e sistemit dhe një pjesë me skedarët e ndryshueshëm të konfigurimeve dhe skedarët e bazës së të dhënave zabbix.

Ishte pak më e komplikuar për zgjidhjen e detyrave që lidhen me bazën e të dhënave. Nuk doja që ta vendosja atë drejtpërdrejt në medium. Në të njëjtën kohë, madhësia e bazës mund të arrijë një madhësi që e tejkalon madhësinë e mundshme të ramdisk-it. Prandaj, u zgjodh një zgjidhje kompromisi: baza e të dhënave vendoset në pjesën e dytë të kartës sd (kartat moderne SLC kanë deri në 30,000 cikle shkrimi), por ka një konfigurim që lejon përdorimin e një mediumi të jashtëm (p.sh., usb-hdd).

Monitorimi i temperaturës u realizua përmes pajisjes RODOS-5. Sigurisht, mund të përdorësh dallas 1820 direkt, por ishte më e shpejtë dhe më e lehtë ta lidhja në USB.

Për bootloader-in për x86_64 u zgjodh grub2. Ishte e nevojshme të shkruhej një konfigurim minimal për nisjen.

Pas debugging në qemu, u realizua portimi në asus tinker board. Në strukturën e overlay-it tim fillimisht ishte planifikuar që të kishte një platformë të ndarë — ndarjen e konfigurimeve specifike për secilën bord (defconfig bordi, bootloader, gjenerimi i imazhit me pjesën e sistemit) dhe një shkallë maksimale të uniformitetit në përshtatjen e sistemit të skedarëve/ krijimin e imazhit me të dhëna. Falë kësaj përgatitjeje, portimi kaloi shpejt.

Rrënjësisht rekomandohet të lexoni artikujt hyrës:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Si të grumbulloni

Projekti ruhet në github
Pas klonimit të depozitës, struktura e skedarëve është si më poshtë:

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

buildroot-2019.05.tar.gz — arkivi i buildroot-it të pastër
overlay — katalogu im me tree external. Këtu ruhen të gjitha ato që duhen për të grumbulluar firmware-n me ndihmën e buildroot
README.md — përshkrimi i projektit dhe udhëzimi në anglisht.
run_me.sh — skripti që përgatit sistemin e grumbullimit. Zgjeron buildroot nga arkivi, e lidh atë me overlay (përmes mekanizmit external-tree) dhe lejon të zgjidhni bordin e destinacionit për grumbullim

[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Zgjidhni defconfig, shtypni A për të abortuar. Default [0]

Pas kësaj, mjafton të kaloni në katalogun buildroot-2019.05 dhe të ekzekutoni komandën make.
Pas pas të përfundimit të ndërtimit, të gjitha rezultatet e ndërtimit do të jenë në katalogun 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

Skedarët e nevojshëm:

  • sdcard.img — imazhi i medias për shkrim në kartën SD (nëpërmjet dd ose rufus nën Windows).
  • qemu.qcow2 — imazhi i medias për të filluar në qemu.
  • external.qcow2 — imazhi i media ekstern për bazën e të dhënave
  • monitor-0.9-beta.tar.gz — arkivi për përditësimin përmes ndërfaqes web

Generimi i udhëzimeve

Nuk ka kuptim të shkruash të njëjtën udhëzim disa herë. Është më logjike të shkruash një herë në markdown, pastaj ta konvertosh në PDF për shkarkim dhe HTML për ndërfaqen web. Kjo është e mundur përmes paketës pandoc.

Së bashku me këtë, çdo skedar duhet të gjenerohet para se të ndodhi ndërtimi i imazhit të sistemit, skritp të post-build nuk kanë më kuptim. Prandaj, gjenerimi është realizuar në formën e paketës manuals. Mund ta shikoni në overlay/package/manuals.

Skedari manuals.mk (i cili e bën gjithë punën)

################################################################################
#
# 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 aktivisht në systemd, dhe unë pata nevojë ta bëj këtë gjithashtu.
Një nga risitë e këndshme — prania e timerëve. Në të vërtetë, për ta (dhe jo vetëm për ta) është shkruar një artikull i veçantë, por do të tregoj shkurt.

Ka disa veprime që duhet të kryhen periodikisht. Kam pasur nevojë të nisim logrotate për pastrimin e logeve lighttpd dhe php-fpm. Më e zakonshme do të ishte të shkruaja komandat në cron, por unë vendosa të përdor timer-in monotonic të systemd. Kështu, logrotate fillon çdo interval të rregullt kohor.

Natyrisht, ekziston mundësia për krijimin e timerëve që aktivizohen në data të caktuara, por nuk kisha nevojë për këtë.
Shembulli i timer-it:

  • Skedari i timer-it
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer]
OnBootSec=1min
OnUnitActiveSec=1min

[Install]
WantedBy=timers.target

- Skedari i shërbimit, i thirrur nga timer-i:
```bash
[Unit]
Description=RODOS temp daemon

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

Platformat e mbështetura

Asus tinker board — plaka kryesore, mbi të cilën gjithçka duhet të punojë. Zgjedhur si e lirë dhe mjaft e fuqishme.

Beaglebone black — plaka e parë, mbi të cilën u verifikua funksionimi (në periudhën e kërkimit të një pllake më të fuqishme).

Qemu x86_64 — përdoret për zhvillimin dhe debug-un.

Si funksionon

Në fillim ndodh një rikthim në dy faza të konfigurimeve:

  • fillimi i skritpit settings_restore (nëpërmjet shërbimit). Ai rikthen konfigurimet kryesore të sistemit — zona kohore, lokalizimi, konfigurimet e rrjetit dhe të tjera.
  • aktualizimi i skriptit përgatitor (nëpërmjet shërbimit) - këtu përgatitet zabbix, baza e të dhënave, dhe IP-ja shfaqet në konsolë.

Në fillim të aktivizimit ndodh përcaktimi i madhësisë së pjesës së dytë të kartës SD. Nëse ka vend të papërdorur - mediumi ri strukturohet, ndarja për të dhënat merr gjithë hapësirën e lirë. Kjo bëhet në qëllim të reduktimit të madhësisë së imazhit të instalim (sdcard.img). Për më tepër, në këtë moment krijohet katalogu punues postgresql. Prandaj, aktivizimi i parë me një medium të ri do të zgjasë më shumë se herët e tjera.

Kur lidhet një hard disk i jashtëm, në momentin e fillimit kërkon një disk të lirë dhe e formaton atë në ext4 me etiketë external.

Kujdes! Kur lidhet një hard disk i jashtëm (njësoj si kur shkëputet ose zëvendësohet), është e nevojshme të bëhet një backup dhe rikthimi i konfigurimeve!

Për monitorimin e temperaturës përdoret pajisja RODOS 5. Prodhuesi ofron kodet burimore të utilitarit të tij për punën me pajisjen. Kur sistemi ndizet, aktivizohet një timer rodos, i cili aktivizon këtë utilitar çdo minutë. Temperatura aktuale regjistrohet në skedarin /tmp/rodos_current_temp, pas së cilës zabbix mund të monitorojë këtë skedar si sensor.

Mjeti për ruajtjen e konfigurimit montohet në katalogun /data.

Kur sistemi aktivizohet dhe përgatitet për punë, në konsolë shfaqet mesazhi:

Sistemi po starton, ju lutem prisni

Pas përfundimit të punëve përgatitore, ai do të ndryshojë në shfaqje të IP adresës:

ip aktual 192.168.1.32
Gati për punë

Konfigurimi i zabbix për monitorimin e temperaturës

Për monitorimin e temperaturës, mjafton të bëni 2 hapa:

  • lidheni pajisjen RODOS në портin usb
  • krijoni një element të dhënash në zabbix

Hapim ndërfaqen e ueb-it të zabbix:

  • Hapim seksionin Konfigurimi → Hostet
  • Klikoni mbi Elementet në rreshtin e serverit tonë zabbix
  • Klikoni mbi Krijo element

Buildroot: Krijimi i një firmware të krosplatformat me zabbix-server

Shkruajmë të dhënat e mëposhtme:

  • emri - sipas dëshirës tuaj (për shembull, serverRoomTemp)
  • Lloji - zabbix agent
  • Çelësi - rodos
  • Lloji - numerik
  • Njësitë - °C
  • Periudha e ruajtjes së historisë - periudha e ruajtjes së historisë. E lajmërova 10 ditë
  • Periudha e ruajtjes së tendencave - periudha e ruajtjes së dinamikës së ndryshimeve. E lajmërova 30 ditë
  • Aplikacion i ri - server Room Temp

Dhe klikoni mbi butonin SHTO.
Buildroot: Krijimi i një firmware të krosplatformat me zabbix-server

Menaxhimi i konfigurimeve përmes ndërfaqes së ueb-it

Ndërfaqja e ueb-it është shkruar në php. Ka funksione kryesore:

  • shikimi i gjendjes së pajisjes
  • ndryshimi i konfigurimeve rrjet
    Buildroot: Krijimi i një firmware të krosplatformat me zabbix-server
  • ndryshimi i fjalëkalimit të përdoruesit
  • zgjedhja e zonës kohore
  • backup/rikthim/riparim në fabrikë
  • mundësia e lidhjes së një hard disku të jashtëm
  • Përditësimi i sistemit
    Buildroot: Krijimi i një firmware të krosplatformat me zabbix-server

Hyrja në ndërfaqen web është e mbrojtur me fjalëkalim.Faqja kryesore — udhëzimi.

Adresa e ndërfaqes zabbix: ${ip/dns}/zabbix
Adresa e ndërfaqes së menaxhimit: ${ip/dns}/manage
Buildroot: Krijimi i një firmware të krosplatformat me zabbix-server

Nisja në 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

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

Imazhet mund të konvertohen dhe nisen në Virtualbox:

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

Pas kësaj, importoni ato në virtualbox dhe lidheni përmes sata.

Përfundim

Gjatë procesit më interesoi të bëja një produkt të gatshëm për punë - me një ndërfaqe jo shumë të bukur (nuk më pëlqen t’i shkruaj ato), por funksionon dhe është e thjeshtë për t'u konfiguruar.

Përpjekja e fundit për të instaluar zabbix-appliance në KVM tregoi saktësinë e këtij hapi (pas përfundimit të instalimit, sistemi nuk nis). Ndoshta po bëj diçka të gabuar 😉

Materialet

https://buildroot.org/

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster