Buildroot: Kreiranje firmvera za više platformi sa zabbix-serverom

Buildroot: Kreiranje firmvera za više platformi sa zabbix-serverom

Istorija problema

Malim kompanijama, s jedne strane, potreban je kvalitetan nadzor nad svojom infrastrukturom (posebno u svjetlu raširene virtuelizacije), s druge strane, finansijski im je teško nabaviti novu opremu. Problemi sa serverom/hardverom su takođe uobičajeni: često postoje 1-3 tower servera pored korisničkih radnih stanica ili u maloj niši/ormanu.

Lakše je koristiti gotovi sklop (distribuciju) koji samo treba da učitate na microSD karticu i ubacite u uobičajeni jednostruki računar (familije beaglebone, raspberry pi i orange pi, asus tinker board). Osim toga, takva oprema je jeftina i može se instalirati bilo gdje.

Izjava o problemu

U mnogome se projekat razvijao kao neka vrsta laboratorijskog rada sa mogućnošću primjene rezultata.

Zabbix je izabran kao sistem za nadzor jer je moćan, besplatan i dobro dokumentovan sistem.

Problem sa hardverskom platformom je postao akutan. Stavljanje posebne mašine pod nadzor takođe nije dobro rešenje - ili je skupo kupovati novu opremu, ili tražiti staru opremu + u malim firmama su česti problemi sa serverom/ hardver.

Korištenje buildroot build sistema omogućava vam da kreirate specijalizirana rješenja kojima može upravljati osoblje s minimalnim znanjem o Linux operativnim sistemima. Ovaj sistem je prijateljski raspoložen za početnike, ali u isto vrijeme pruža široke mogućnosti prilagođavanja u rukama iskusnog programera. Savršen je za rješavanje problema jeftinog, ali potpuno funkcionalnog praćenja IT infrastrukture, uz minimalne zahtjeve za obuku osoblja koje njome upravlja.

Koraci rješenja

Odlučeno je da se inicijalno kreira firmver za x86_64 koji će raditi u qemu-u, jer je ovo zgodno i brzo rješenje za otklanjanje grešaka. Zatim ga povežite na računar sa jednom pločom (sviđala mi se asus tinker board).

buildroot je odabran kao sistem izgradnje. U početku mu nedostaje zabbix paket, pa ga je trebalo portirati.Postojali su problemi sa ruskim lokalom, koji su riješeni primjenom odgovarajućih zakrpa (napomena: u novijim verzijama buildroot-a ove zakrpe više nisu potrebne).

Portiranje samog zabbix paketa će biti opisano u posebnom članku.

Pošto bi sve trebalo da radi kao firmver (nepromenljiva slika sistema + povratne datoteke konfiguracije/baze podataka), bilo je potrebno da napišete sopstvene sistemske ciljeve, servise i tajmere (cilj, servis, tajmer).

Odlučeno je da se medij podijeli na 2 sekcije - dio sa sistemskim datotekama i odjeljak sa promjenjivim konfiguracijama i zabbix datotekama baze podataka.

Rješavanje problema vezanih za bazu podataka pokazalo se malo težim. Nisam želeo da to plasiram direktno u medije. U isto vrijeme, veličina baze podataka može doseći veličinu koja premašuje veličinu mogućeg ramdisk-a. Stoga je odabrano kompromisno rješenje: baza podataka se nalazi na drugoj particiji SD kartice (moderne SLC kartice imaju do 30 ciklusa upisivanja), ali postoji postavka koja omogućava korištenje vanjskih medija (npr. hdd).

Praćenje temperature je realizovano preko uređaja RODOS-5. Naravno, Dallas 1820 možete koristiti direktno, ali bilo je brže i lakše priključiti USB.

grub86 je odabran kao pokretač za x64_2. Bilo je potrebno napisati minimalnu konfiguraciju za pokretanje.

Nakon otklanjanja grešaka na qemu-u, portiran je na asus tinker board. Struktura mog preklapanja je prvobitno bila zamišljena da bude višeplatformska - dodeljivanje konfiguracija specifičnih za svaku ploču (defconfig ploče, bootloader, generisanje slike sa sistemskom particijom) i maksimalna uniformnost u prilagođavanju sistema datoteka/kreiranju slike sa podacima. Zbog takve pripreme, prenos je prošao brzo.

Toplo je preporučljivo pročitati uvodne članke:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Kako sastaviti

Projekat je pohranjen na github-u
Nakon kloniranja spremišta, dobija se sljedeća struktura datoteke:

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

buildroot-2019.05.tar.gz - čista buildroot arhiva
overlay je moj direktorij sa vanjskim stablom. Ovo je mjesto gdje je pohranjeno sve što vam je potrebno da napravite firmver koristeći buildroot.
README.md - opis projekta i priručnik na engleskom jeziku.
run_me.sh je skripta koja priprema sistem izgradnje. Proširuje buildroot iz arhive, pričvršćuje preklapanje na njega (preko mehanizma vanjskog stabla) i omogućava vam da odaberete ciljnu ploču za sklapanje

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

Nakon ovoga, samo idite na buildroot-2019.05 direktorij i pokrenite naredbu make.
Kada se izgradnja završi, svi rezultati izgradnje bit će u direktoriju 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

Potrebni fajlovi:

  • sdcard.img - medijska slika za snimanje na SD karticu (preko dd ili rufusa pod wibdows).
  • qemu.qcow2 - medijska slika za pokretanje u qemu.
  • external.qcow2 - slika eksternog medija za bazu podataka
  • monitor-0.9-beta.tar.gz - arhiva za ažuriranje preko web interfejsa

Generacija vodiča

Ne isplati se pisati ista uputstva nekoliko puta. I najlogičnije je da ga jednom napišete u markdownu, a zatim ga pretvorite u PDF za preuzimanje i html za web sučelje. To je moguće zahvaljujući pandoc paketu.

U isto vrijeme, sve ove datoteke treba generirati prije nego što se sastavi slika sistema; te skripte nakon izgradnje su već beskorisne. Stoga se generiranje vrši u obliku paketa priručnika. Možete pogledati preklapanje/paket/priručnike.

Datoteka manuals.mk (koja radi sav posao)

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

Svijet Linuxa se aktivno seli na systemd, a i ja sam to morao učiniti.
Jedna od prijatnih inovacija je prisustvo tajmera. Općenito, o njima (i ne samo o njima) piše se poseban članak, ali ću vam ukratko reći.

Postoje radnje koje se moraju izvoditi periodično. Trebao sam pokrenuti logrotate da obrišem lighttpd i php-fpm dnevnike. Uobičajena stvar bi bila pisati komande u cron, ali sam odlučio da koristim sistemski monotoni tajmer. Dakle, logrotate radi u strogom vremenskom intervalu.

Naravno, moguće je kreirati tajmere koji se aktiviraju na određene datume, ali meni ovo nije trebalo.
Primjer tajmera:

  • Tajmer fajl
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer] OnBootSec=1min
OnUnitActiveSec=1min

[Instaliraj] WantedBy=timers.target

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

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

Podržane ploče

Asus tinker board je glavna ploča na kojoj bi sve trebalo da radi. Odabrano kao jeftino i vrlo moćno.

Beaglebone black je prva ploča na kojoj je testiran rad (prilikom odabira jače ploče).

Qemu x86_64 - koristi se za razvoj otklanjanja grešaka.

Kako to funkcioniše

Prilikom pokretanja dolazi do vraćanja postavki u dvije faze:

  • pokretanje skripte settings_restore (preko servisa). Vraća osnovne postavke sistema - vremensku zonu, lokalizaciju, mrežne postavke itd.
  • pokretanje skripte pripreme (preko servisa) - ovdje su zabbix i baza podataka pripremljeni, IP se izlazi na konzolu.

Kada ga prvi put pokrenete, određuje se veličina druge particije SD kartice. Ako još uvijek ima nedodijeljenog prostora, medij se ponovo particionira, a odjeljak podataka zauzima sav slobodan prostor. Ovo se radi kako bi se smanjila veličina instalacijske slike (sdcard.img). Dodatno, u ovom trenutku se kreira postgresql radni direktorij. Zato će prvo lansiranje s novim nosačem biti duže od sljedećih.

Prilikom povezivanja eksternog diska, u trenutku pokretanja traži slobodan disk i formatira ga u ext4 sa eksternom oznakom.

Pažnja! Prilikom povezivanja eksternog diska (kao i isključivanja ili zamjene), potrebno je napraviti sigurnosnu kopiju i vratiti postavke!

Za praćenje temperature koristi se uređaj RODOS 5. Proizvođač daje izvorni kod svog uslužnog programa za rad sa uređajem. Kada se sistem uključi, pokreće se rodos tajmer, koji pokreće ovaj uslužni program jednom u minuti. Trenutna temperatura se upisuje u datoteku /tmp/rodos_current_temp, nakon čega zabbix može pratiti ovu datoteku kao senzor.

Konfiguracijski medij za pohranu je montiran u /data direktorij.

Prilikom pokretanja sistema i pripreme za rad, na konzoli se pojavljuje sljedeća poruka:

System starting, please wait

Nakon završetka pripremnih radova, promijenit će se u prikaz IP adrese:

current ip 192.168.1.32
Ready to work

Postavljanje zabbixa za praćenje temperature

Da biste pratili temperaturu, samo napravite 2 koraka:

  • povežite RODOS uređaj na USB port
  • kreirajte stavku podataka u zabbixu

Otvorite zabbix web sučelje:

  • Otvorite odjeljak Konfiguracija → Hostovi
  • Kliknite na stavke u liniji našeg zabbix servera
  • Kliknite na Kreiraj stavku

Buildroot: Kreiranje firmvera za više platformi sa zabbix-serverom

Unesite sljedeće podatke:

  • naziv - po vašem nahođenju (na primjer, serverRoomTemp )
  • Tip - zabbix agent
  • Ključ - Rodos
  • Tip-numerički
  • Jedinice - C
  • Period skladištenja istorije — period skladištenja istorije. ostalo 10 dana
  • Period skladištenja trenda—period skladištenja dinamike promjena. Ostalo 30 dana
  • Nova aplikacija - server Room Temp

I pritisnite dugme DODAJ.
Buildroot: Kreiranje firmvera za više platformi sa zabbix-serverom

Upravljajte postavkama putem web sučelja

Web interfejs je napisan u PHP-u. Postoje glavne funkcije:

  • pogledajte status uređaja
  • mijenjanje mrežnih postavki
    Buildroot: Kreiranje firmvera za više platformi sa zabbix-serverom
  • promjena korisničke lozinke
  • odabir vremenske zone
  • backup/restore/factory reset
  • mogućnost povezivanja eksternog diska
  • Ažuriranje sistema
    Buildroot: Kreiranje firmvera za više platformi sa zabbix-serverom

Prijava na web sučelje je zaštićena lozinkom. Početna stranica - priručnik.

Adresa Zabbix interfejsa: ${ip/dns}/zabbix
Adresa interfejsa upravljanja: ${ip/dns}/manage
Buildroot: Kreiranje firmvera za više platformi sa zabbix-serverom

Pokreće se u 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

Ova komanda će pokrenuti sistem sa 4 jezgra, 2048 RAM-a, omogućen KVM, mrežnu karticu na bridge0 i dva diska: jedan za sistem i jedan eksterni za postgresql.

Slike se mogu pretvoriti i pokrenuti u Virtualboxu:

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

Zatim ih uvezite u virtualbox i povežite se putem sata.

zaključak

U tom procesu sam se zainteresirao za izradu proizvoda spremnog za korištenje - s ne baš lijepim interfejsom (ne volim da ih pišem), ali onim koji radi i koji se lako konfiguriše.

Poslednji pokušaj instaliranja zabbix-uređaja u KVM pokazao je da je ovaj korak ispravan (nakon što se instalacija završi, sistem se ne pokreće). Možda radim nešto pogrešno 😉

Materijali

https://buildroot.org/

izvor: www.habr.com

Dodajte komentar