Buildroot: Stvaranje firmvera za više platformi sa zabbix-poslužiteljem

Buildroot: Stvaranje firmvera za više platformi sa zabbix-poslužiteljem

Povijest problema

Male tvrtke, s jedne strane, trebaju kvalitetan nadzor svoje infrastrukture (posebno u svjetlu raširene virtualizacije), s druge strane, financijski im je teško nabaviti novu opremu. Problemi s poslužiteljem/hardverom također su česti: često postoje 1-3 tower poslužitelja pored korisničkih radnih stanica ili u maloj niši/ormaru.

Lakše je koristiti gotovu montažu (distribuciju) koju samo trebate učitati na microSD karticu i umetnuti u uobičajeno jednopločno računalo (obitelji beaglebone, raspberry pi i orange pi, asus tinker board). Osim toga, takva oprema je jeftina i može se instalirati bilo gdje.

Formuliranje problema

Projekt se u mnogočemu razvio kao svojevrsni laboratorijski rad s mogućnošću primjene rezultata.

Zabbix je odabran kao sustav za nadzor jer je moćan, besplatan i dobro dokumentiran sustav.

Problem s hardverskom platformom postao je akutan.Stavljanje zasebnog stroja pod nadzor također nije dobro rješenje - ili je skupo kupiti novu opremu ili tražiti staru opremu + u malim tvrtkama česti su problemi s poslužiteljem/ hardver.

Korištenje buildroot sustava za izgradnju omogućuje vam stvaranje specijaliziranih rješenja kojima može upravljati osoblje s minimalnim znanjem o operativnim sustavima Linux. Ovaj sustav je prijateljski nastrojen prema početnicima, ali u isto vrijeme pruža široke mogućnosti prilagodbe u rukama iskusnog programera. Savršen je za rješavanje problema jeftinog, ali potpuno funkcionalnog nadzora IT infrastrukture, uz minimalne zahtjeve za obuku osoblja koje njome upravlja.

Koraci rješenja

Odlučeno je da se prvo stvori firmware za x86_64 koji će se izvoditi u qemu, budući da je to prikladno i brzo rješenje za otklanjanje pogrešaka. Zatim ga prebacite na računalo s jednom pločom (sviđala mi se Asusova tinker ploča).

buildroot je odabran kao sustav za izgradnju. U početku mu nedostaje zabbix paket, pa ga je bilo potrebno prenijeti.Bilo je problema s ruskim lokalitetom, koji su riješeni primjenom odgovarajućih zakrpa (napomena: u novijim verzijama buildroot-a te zakrpe više nisu potrebne).

Prijenos samog zabbix paketa bit će opisan u zasebnom članku.

Budući da bi sve trebalo raditi kao firmware (nepromjenjiva slika sustava + datoteke konfiguracije/baze podataka koje se mogu oporaviti), bilo je potrebno napisati vlastite systemd ciljeve, usluge i mjerače vremena (target, service, timer).

Odlučeno je da se medij podijeli u 2 odjeljka - odjeljak sa sistemskim datotekama i odjeljak s promjenjivim konfiguracijama i datotekama zabbix baze podataka.

Rješavanje problema vezanih uz bazu podataka pokazalo se malo težim. Nisam to htio plasirati direktno u medije. U isto vrijeme, veličina baze podataka može doseći veličinu koja premašuje veličinu mogućeg ramdiska. Stoga je odabrano kompromisno rješenje: baza podataka nalazi se na drugoj particiji SD kartice (moderne SLC kartice imaju do 30 ciklusa pisanja), ali postoji postavka koja dopušta korištenje vanjskih medija (na primjer, usb- hdd).

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

grub86 je odabran kao bootloader za x64_2. Za pokretanje je bilo potrebno napisati minimalnu konfiguraciju.

Nakon otklanjanja pogrešaka na qemu-u, prenesen je na asus tinker ploču. Struktura mog preklapanja isprva je trebala biti višeplatformska - dodjeljivanje konfiguracija specifičnih za svaku ploču (defconfig ploče, bootloader, generiranje slike sa sistemskom particijom) i maksimalna uniformnost u prilagodbi datotečnog sustava/stvaranje slike s podacima. Zbog takve pripreme portiranje je prošlo brzo.

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

Kako sastaviti

Projekt je pohranjen na githubu
Nakon kloniranja repozitorija dobiva se sljedeća struktura datoteka:

[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 s vanjskim stablom. Ovdje je pohranjeno sve što vam je potrebno za izgradnju firmware-a pomoću buildroot-a.
README.md - opis projekta i priručnik na engleskom jeziku.
run_me.sh je skripta koja priprema sustav za izgradnju. Proširuje buildroot iz arhive, pričvršćuje sloj na njega (putem mehanizma vanjskog stabla) i omogućuje vam odabir ciljne ploče za sastavljanje

[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 u direktorij buildroot-2019.05 i pokrenite naredbu make.
Nakon završetka izgradnje, 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

Potrebne datoteke:

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

Generacija vodiča

Ne isplati se pisati iste upute nekoliko puta. A najlogičnije je da to jednom napišete u markdownu, pa 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 moraju biti generirane prije sastavljanja slike sustava; te skripte nakon izgradnje već su beskorisne. Stoga se generiranje vrši u obliku paketa priručnika. Možete pogledati sloj/paket/priručnike.

Datoteka manuals.mk (koja obavlja 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 aktivno prelazi na systemd, a i ja sam to morao učiniti.
Jedna od ugodnih inovacija je prisutnost mjerača vremena. Općenito, o njima (i ne samo o njima) piše se poseban članak, ali reći ću vam ukratko.

Postoje radnje koje se moraju izvoditi povremeno. Morao sam pokrenuti logrotate da obrišem zapise lighttpd i php-fpm. Uobičajena stvar bi bila pisanje naredbi u cron-u, ali odlučio sam koristiti systemd monotoni mjerač vremena. Dakle, logrotate radi u strogom vremenskom intervalu.

Naravno, moguće je napraviti timere koji se aktiviraju na određene datume, ali meni to nije trebalo.
Primjer mjerača vremena:

  • Datoteka mjerača vremena
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer] OnBootSec=1 min
OnUnitActiveSec=1 min

[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 raditi. 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 pogrešaka.

Kako to radi

Prilikom pokretanja dolazi do dvostupanjskog vraćanja postavki:

  • pokretanje skripte settings_restore (putem usluge). Vraća osnovne postavke sustava - vremensku zonu, lokalizaciju, mrežne postavke itd.
  • pokretanje skripte za pripremu (putem usluge) - ovdje se pripremaju zabbix i baza podataka, IP se ispisuje na konzolu.

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

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

Pažnja! Prilikom povezivanja vanjskog pogona (kao i odspajanja ili zamjene), morate napraviti sigurnosnu kopiju i vratiti postavke!

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

Medij za pohranjivanje konfiguracije montiran je u /data direktorij.

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

System starting, please wait

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

current ip 192.168.1.32
Ready to work

Postavljanje zabbixa za praćenje temperature

Za praćenje temperature, samo napravite 2 koraka:

  • spojite RODOS uređaj na USB priključak
  • stvoriti podatkovnu stavku u zabbixu

Otvorite zabbix web sučelje:

  • Otvorite odjeljak Konfiguracija → Domaćini
  • Kliknite na Stavke u retku našeg zabbix poslužitelja
  • Kliknite na Create item

Buildroot: Stvaranje firmvera za više platformi sa zabbix-poslužiteljem

Unesite sljedeće podatke:

  • ime - po vlastitom nahođenju (na primjer, ServerRoomTemp )
  • Vrsta - zabbix agent
  • Ključ - Rodos
  • Vrsta-numerički
  • Jedinice - C
  • Razdoblje pohranjivanja povijesti — razdoblje pohranjivanja povijesti. ostalo 10 dana
  • Razdoblje pohranjivanja trenda—razdoblje pohranjivanja dinamike promjena. Preostalo 30 dana
  • Nova aplikacija - server Sobna temp

I pritisnite tipku DODAJ.
Buildroot: Stvaranje firmvera za više platformi sa zabbix-poslužiteljem

Upravljanje postavkama putem web sučelja

Web sučelje je napisano u PHP-u. Postoje glavne funkcije:

  • pogledajte status uređaja
  • mijenjanje mrežnih postavki
    Buildroot: Stvaranje firmvera za više platformi sa zabbix-poslužiteljem
  • mijenjanje korisničke lozinke
  • izbor vremenske zone
  • sigurnosno kopiranje/vraćanje/vraćanje na tvorničke postavke
  • mogućnost povezivanja vanjskog pogona
  • Ažuriranje sustava
    Buildroot: Stvaranje firmvera za više platformi sa zabbix-poslužiteljem

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

Adresa Zabbix sučelja: ${ip/dns}/zabbix
Adresa sučelja za upravljanje: ${ip/dns}/manage
Buildroot: Stvaranje firmvera za više platformi sa zabbix-poslužiteljem

Izvođenje 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 -uređaj 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 naredba će pokrenuti sustav sa 4 jezgre, 2048 RAM-a, omogućenim KVM-om, mrežnom karticom na bridge0 i dva diska: jedan za sustav i jedan vanjski 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 spojite preko sata.

Zaključak

U procesu sam se zainteresirao za izradu proizvoda gotovog za korištenje - s ne baš lijepim sučeljem (ne volim ih pisati), ali onim koje radi i lako ga je konfigurirati.

Posljednji pokušaj instaliranja zabbix-uređaja u KVM pokazao je da je ovaj korak bio ispravan (nakon što je instalacija završena, sustav se ne pokreće). Možda radim nešto krivo 😉

Materijali

https://buildroot.org/

Izvor: www.habr.com

Dodajte komentar