Buildroot: Ndërtoni një firmware multi-platform me zabbix-server

Buildroot: Ndërtoni një firmware multi-platform me zabbix-server

Historia e detyrës

Kompani tĂ« vogla nga njĂ«ra anĂ«, kanĂ« nevojĂ« pĂ«r monitorim tĂ« kualitetit tĂ« infrastrukturĂ«s sĂ« tyre (sidomos nĂ« dritĂ«n e virtualizimit nĂ« rritje), nga ana tjetĂ«r, Ă«shtĂ« e vĂ«shtirĂ« financiarisht pĂ«r ta tĂ« blejnĂ« pajisje tĂ« reja. Problemet me serverĂ«t/aparaturĂ«n shpesh janĂ« tĂ« zakonshme: zakonisht ka 1-3 servera tower tĂ« vendosur afĂ«r vendeve tĂ« punĂ«s ose nĂ« njĂ« niĆŸĂ« tĂ« vogĂ«l.

ËshtĂ« mĂ« e lehtĂ« tĂ« pĂ«rdorĂ«sh njĂ« ndĂ«rtim (distribucion) tĂ« gatshĂ«m, qĂ« mjafton ta ngarkosh nĂ« njĂ« microSD dhe ta vendosĂ«sh nĂ« njĂ« kompjuter tĂ« njohur me njĂ« ploce (beaglebone, familja raspberry pi dhe orange pi, asus tinker board). PĂ«r mĂ« tepĂ«r, kjo pajisje Ă«shtĂ« me çmim tĂ« ulĂ«t dhe mund tĂ« instalohet kudo.

Vendosja e detyrës

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

Si sistem monitorimi u zgjodh zabbix, pasi është një sistem i fuqishëm, falas dhe dokumentuar mirë.

Një çështje e rëndësishme është platforma harduerike. Vendosja e një makine të veçantë për monitorim nuk është gjithashtu një zgjidhje shumë e mirë - ose është e shtrenjtë për të blerë pajisje të reja, ose është e nevojshme të kërkohet për pajisje të vjetra + në firmat e vogla ka shpesh probleme me serverin/harduerin.

Përdorimi i sistemit të ndërtimit buildroot lejon krijimin e zgjidhjeve të specializuara, të cilat mund të përdoren nga personeli me njohuri minimale të sistemit operativ Linux. Ky sistem është miqësor për fillestarët, por në të njëjtën kohë ofron mundësi të gjera për personalizim në duar të zhvilluesve të përvojshëm. Ai është i shkëlqyer për të adresuar nevojën për monitorimin ekonomik, por plotësisht funksional të infrastrukturës IT, i kërkuar minimalisht për përgatitjen e personelit që e përdor atë.

Hapat e zgjidhjes

Fillimisht u vendos të krijohej një firmware për x86_64 për të nisur në qemu, pasi kjo është një zgjidhje e përshtatshme dhe e shpejtë për debugging. Pas kësaj, do të portojë në një kompjuter të vetëm arm (më pëlqeu asus tinker board).

Si sistemi i ndërtimit u përzgjodh buildroot. Fillimisht, paketa zabbix mungonte, prandaj duhej ta portonim. Kishim probleme me lokalizimin në rusisht, 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 tashmë nuk janë të nevojshme).

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

Duke qenë se gjithçka duhet të funksionojë si një firmware (imazh i pandryshueshëm i sistemit + skedarë konfigurimi/të rikthyeshëm), ishte e nevojshme të shkruhen targetet, shërbimet dhe timer-at e veta të systemd (target, service, timer).

U mor vendimi pĂ«r tĂ« ndarĂ« mediumin nĂ« 2 pjesĂ« — njĂ« pjesĂ« me skedarĂ«t e sistemit dhe njĂ« pjesĂ« me konfigurimet dhe skedarĂ«t e bazĂ«s sĂ« tĂ« dhĂ«nave zabbix.

Zgjidhja e problemeve që lidhen me bazën e të dhënave u duk pak më e vështirë. Nuk doja ta vendosja atë direkt në medium. Në të njëjtën kohë, madhësia e bazës mund të arrijë një vëllim që 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ë cilësim 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ërdorej drejtpërdrejt dallas 1820, por ishte më e shpejtë dhe më e lehtë ta lidhja USB.

Si ngarkues për x86_64 u zgjodh grub2. Duhej të shkruaja një konfigurim minimal për fillimin.

Pas debugimit nĂ« qemu, u bĂ« portimi nĂ« asus tinker board. NĂ« strukturĂ«n e mbĂ«shtetjes time, fillimisht u parashikua ndĂ«rshtimi — ndarja e konfigurimeve specifike pĂ«r çdo pllakĂ« (defconfig pllake, ngarkues, gjenerimi i imazhit me njĂ« pjesĂ« tĂ« sistemit) dhe maksimalizimi i uniformitetit nĂ« rregullimin e sistemit tĂ« skedarĂ«ve/krijimin e imazhit me tĂ« dhĂ«na. FalĂ« pĂ«rgatitjes sĂ« tillĂ«, portimi kaloi shpejt.

ËshtĂ« thelbĂ«sore tĂ« lexoni artikujt hyrĂ«s:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Si të ndërtoni

Projekti ruhet në github
Pas klonimit të depot, struktura e skedarëve është si vijon:

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

buildroot-2019.05.tar.gz — arkiv i buildroot-it tĂ« pastĂ«r
overlay — katalogu im me external-tree. Ai mban gjithçka tĂ« nevojshme pĂ«r tĂ« ndĂ«rtuar firmware me buildroot
README.md — pĂ«rshkrimi i projektit dhe udhĂ«zimi nĂ« anglisht.
run_me.sh — skenari qĂ« pĂ«rgatit sistemin e ndĂ«rtimit. Zhvillon buildroot nga arkivi, e lidh me overlay (pĂ«rdor mekanizmin external-tree) dhe lejon zgjedhjen e bordit tĂ« synuar pĂ«r ndĂ«rtim

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

Pas kësaj, mjafton të kaloni në katalogun buildroot-2019.05 dhe të ekzekutoni komandën make.
Pas 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 mediumit pĂ«r regjistrim nĂ« sd-kartĂ« (pĂ«rmes dd ose rufus nĂ«n windows).
  • qemu.qcow2 — imazhi i mediumit pĂ«r ekzekutim nĂ« qemu.
  • external.qcow2 — imazhi external i mediumit pĂ«r bazĂ«n e tĂ« dhĂ«nave
  • monitor-0.9-beta.tar.gz — arkiv pĂ«r pĂ«rditĂ«sim pĂ«rmes ndĂ«rfaqes web

Gjenerimi i udhëzimeve

Nuk ka nevojĂ« tĂ« shkruhet e njĂ«jta udhĂ«zim disa herĂ«. ËshtĂ« mĂ« logjike ta shkruash njĂ« herĂ« nĂ« markdown dhe pastaj ta konvertosh nĂ« PDF pĂ«r shkarkim dhe HTML pĂ«r ndĂ«rfaqen web. Kjo Ă«shtĂ« e mundur falĂ« paketĂ«s pandoc.

Megjithatë, duhet gjeneruar të gjitha këto skedarë para se të ndërtohet ima i sistemit, pasi skiptet post-build tashmë janë të pavlefshme. Prandaj, gjenerimi është kryer në formën e paketës manuals. Mund të shikohet në overlay/package/manuals.

Skedari manuals.mk (i cili bën 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 aktivisht në systemd, prandaj duhej ta bënte edhe unë.
Një nga risitë e këndshme është prania e timerave. Në përgjithësi, për to (dhe jo vetëm për to) shkruhet një artikull të veçantë, por do të flas shkurt.

Ka disa veprime që duhet të kryhen periodikisht. Mua më nevojitej që të nisja logrotate për të pastruar regjistrat e lighttpd dhe php-fpm. Më e zakonshmja do të ishte të shkruaja komandat në cron, por vendosa të përdor timerin monotone systemd. Në këtë mënyrë, logrotate fillohet të nisë përmes një intervali të rreptë kohor.

Natyrisht, ka mundësinë për të krijuar timerë që aktivizohen në data të caktuara, por nuk më nevojitej kjo.
Shembulli i timerit:

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

[Timer]
OnBootSec=1min
OnUnitActiveSec=1min

[Install]
WantedBy=timers.target

- Skedari i shërbimit që thirret nga timeri:
```bash
[Unit]
Description=RODOS temp daemon

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

Përroj të mbështetur

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

Beaglebone black — plaka e parĂ« mbi tĂ« cilĂ«n u testua funksionimi (nĂ« periudhĂ«n e kĂ«rkimit pĂ«r njĂ« plaktĂ« mĂ« tĂ« fuqishme).

Qemu x86_64 — pĂ«rdoret pĂ«r zhvillimin e debug.

Si funksionon

Për gjatë nisjes ndodh rikuperimi në dy faza të cilësimeve:

  • nis skenarin settings_restore (pĂ«rmes shĂ«rbimit). Ai rikthen cilĂ«simet kryesore tĂ« sistemit — zona kohore, lokaliteti, cilĂ«simet e rrjetit dhe etj.
  • nis skenarin prepare (pĂ«rmes shĂ«rbimit) — kĂ«tu pĂ«rgatitet zabbix, databaza, IP dĂ«rgohet nĂ« konsolĂ«.

Në fillim të funksionimit, përcaktohet madhësia e seksionit të dytë të kartës SD. Nëse ka hapësirë të paemëruar, mbajtësit do të ri-përndahen, dhe seksioni për të dhënat do të zërë të gjithë hapësirën e lirë. Kjo bëhet për të zvogëluar madhësinë e imazhit të instalimit (sdcard.img). Për më tepër, në këtë moment krijohet katalogu i punës postgresql. Prandaj, fillimi i parë me një mbajtës të ri do të zgjasë më shumë se pasuesit.

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

Kujdes! Kur lidhet një disk i jashtëm (po ashtu edhe kur ndërpritet ose zëvendësohet), është e nevojshme të bëhet një backup dhe rikuperim i cilësimeve!

Për monitorimin e temperaturës përdoret pajisja RODOS 5. Prodhuesi ofron kodin burimor të utilitetit të tij për punë me pajisjen. Kur sistemi është aktivizuar, aktivizohet një timer rodos, i cili nis këtë utilitet çdo minutë. Temperatura aktuale regjistrohet në skedarin /tmp/rodos_current_temp, pas së cilës zabbix mund të monitorojë këtë skedar si sensor.

Mbajtësi për ruajtjen e konfigurimeve montohet në katalogun /data.

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

Sistemi po fillon, ju lutemi prisni

Pasi të përfundojnë punët përgatitore, ai do të zëvendësohet me shfaqjen e IP adresës:

adresa aktuelle ip 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Ă« portin usb
  • krijoni njĂ« elementi tĂ« dhĂ«nash nĂ« zabbix

Hapni ndërfaqen web të zabbix-it:

  • Hapni seksionin Konfigurimi → Hosts
  • Klikoni nĂ« Items nĂ« rreshtin e serverit tonĂ« zabbix
  • Klikoni nĂ« Krijo element

Buildroot: Ndërtoni një firmware multi-platform me zabbix-server

Këtu shkruani të dhënat e mëposhtme:

  • emri — sipas dĂ«shirĂ«s tuaj (p.sh., serverRoomTemp)
  • Tipi — zabbix agent
  • ÇelĂ«si — rodos
  • Tipi — numĂ«rik
  • NjĂ«sitĂ« — C
  • Periudha e ruajtjes sĂ« historisĂ« — periudha e ruajtjes sĂ« historisĂ«. E lashĂ« 10 ditĂ«
  • Periudha e ruajtjes sĂ« tendencave — periudha e ruajtjes sĂ« dinamikĂ«s sĂ« ndryshimeve. E lashĂ« 30 ditĂ«
  • Aplikimi i ri — temperatura e dhomĂ«s sĂ« serverit

Dhe klikoni butonin SHTO.
Buildroot: Ndërtoni një firmware multi-platform me zabbix-server

Menaxhimi i konfigurimeve përmes ndërfaqes web

Ndërfaqja web është shkruar në php. Ka funksione kryesore:

  • shikimi i gjendjes sĂ« pajisjes
  • ndryshimi i cilĂ«simeve rrjet
    Buildroot: Ndërtoni një firmware multi-platform me zabbix-server
  • ndryshimi i fjalĂ«kalimit tĂ« pĂ«rdoruesit
  • zgjedhja e zonĂ«s kohore
  • kopjimi/rikthimi/rivendosja nĂ« gjendjen fabrika
  • mundĂ«sia e lidhjes sĂ« diskut tĂ« jashtĂ«m
  • PĂ«rditĂ«simi i sistemit
    Buildroot: Ndërtoni një firmware multi-platform me zabbix-server

Hyrja në ndërfaqen e webit është e mbrojtur me fjalëkalim. Faqja e fillimit është udhëzimi.

Adresa e ndërfaqes zabbix: ${ip/dns}/zabbix
Adresa e ndërfaqes së menaxhimit: ${ip/dns}/manage
Buildroot: Ndërtoni një firmware multi-platform me zabbix-server

Fillimi 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ë niste sistemin me 4 bërthama, 2048 RAM, KVM të aktivizuar, një kartë rrjeti në urën bridge0 dhe dy disqe: për sistemin dhe një të jashtëm 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

Pastaj importoni ato në virtualbox dhe lidheni përmes sata.

Përfundimi

NĂ« proces, u bĂ«ra kurioz tĂ« bĂ«j njĂ« produkt tĂ« gatshĂ«m pĂ«r punĂ« — me njĂ« ndĂ«rfaqe jo shumĂ« tĂ« bukur (nuk i dua tĂ« shkruaj), por funksionale dhe e lehtĂ« pĂ«r t'u konfigurur.

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 fillon). Ndoshta po bĂ«j diçka tĂ« gabuar 😉

Materialet

https://buildroot.org/

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster