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

Bleni hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera đŸ”„ Bli hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera | ProHoster