„Buildroot“: kelių platformų programinės aparatinės įrangos kūrimas naudojant „zabbix-server“.

„Buildroot“: kelių platformų programinės aparatinės įrangos kūrimas naudojant „zabbix-server“.

Problemos istorija

Mažoms įmonėms, viena vertus, reikalinga kokybiška infrastruktūros stebėsena (ypač atsižvelgiant į plačiai paplitusią virtualizaciją), kita vertus, joms finansiškai sunku įsigyti naują įrangą. Serverio/techninės įrangos problemos taip pat dažnos: dažnai šalia vartotojų darbo vietų arba nedidelėje nišoje/spintoje yra 1-3 bokštiniai serveriai.

Paprasčiau naudoti paruoštą komplektą (paskirstymą), kurį tereikia įkelti į „microSD“ kortelę ir įdėti į bendrą vienos plokštės kompiuterį (beaglebone, raspberry pi ir orange pi šeimos, asus tinker board). Be to, tokia įranga yra nebrangi ir gali būti montuojama bet kur.

Problemos teiginys

Daugeliu atžvilgių projektas vystėsi kaip laboratorinis darbas su galimybe pritaikyti rezultatus.

„Zabbix“ buvo pasirinkta kaip stebėjimo sistema, nes tai galinga, nemokama ir gerai dokumentuota sistema.

Problema su aparatine platforma tapo aktuali Atskiros mašinos stebėjimas taip pat nėra labai geras sprendimas - arba brangu pirkti naują įrangą, arba ieškoti senos įrangos + mažose įmonėse dažnai kyla problemų su serveriu/. aparatūra.

Naudojant buildroot kūrimo sistemą galima sukurti specializuotus sprendimus, kuriuos gali valdyti personalas, turintis minimalių žinių apie Linux operacines sistemas. Ši sistema yra draugiška pradedantiesiems, tačiau tuo pat metu suteikia daug pritaikymo galimybių patyrusio kūrėjo rankose. Puikiai tinka spręsti nebrangaus, bet pilnai veikiančio IT infrastruktūros stebėjimo problemą, keliant minimalius reikalavimus ją eksploatuojančio personalo mokymui.

Sprendimo žingsniai

Buvo nuspręsta iš pradžių sukurti programinę-aparatinę įrangą, skirtą x86_64, kad ji veiktų qemu, nes tai patogus ir greitas derinimo sprendimas. Tada prijunkite jį prie vienos plokštės kompiuterio (man patiko asus tinker plokštė).

buildroot buvo pasirinkta kaip kūrimo sistema. Iš pradžių jai trūko zabbix paketo, todėl jį teko perkelti. Kilo problemų su rusiška lokale, kurios buvo išspręstos pritaikius atitinkamas pataisas (pastaba: naujesniose buildroot versijose šių pataisų nebereikia).

Paties „zabbix“ paketo perkėlimas bus aprašytas atskirame straipsnyje.

Kadangi viskas turėtų veikti kaip programinė įranga (nekeičiamas sistemos vaizdas + atkuriami konfigūracijos/duomenų bazės failai), reikėjo parašyti savo sisteminius taikinius, paslaugas ir laikmačius (target, service, timer).

Nuspręsta mediją padalinti į 2 skyrius – skyrių su sistemos failais ir skyrių su keičiamomis konfigūracijomis ir zabbix duomenų bazės failais.

Su duomenų baze susijusių problemų sprendimas pasirodė kiek sunkesnis. Nenorėjau to pateikti tiesiai į žiniasklaidą. Tuo pačiu metu duomenų bazės dydis gali viršyti galimo ramdisko dydį. Todėl buvo pasirinktas kompromisinis sprendimas: duomenų bazė yra antrajame SD kortelės skaidinyje (šiuolaikinės SLC kortelės turi iki 30 000 rašymo ciklų), tačiau yra nustatymas, leidžiantis naudoti išorines laikmenas (pavyzdžiui, usb- hdd).

Temperatūros stebėjimas buvo įgyvendintas per RODOS-5 įrenginį. Žinoma, galite naudoti Dallas 1820 tiesiogiai, tačiau prijungti USB buvo greičiau ir lengviau.

grub86 buvo pasirinktas kaip x64_2 įkrovos įkroviklis. Norint jį paleisti, reikėjo parašyti minimalią konfigūraciją.

Po qemu derinimo jis buvo perkeltas į asus tinker plokštę. Iš pradžių mano perdangos struktūra buvo skirta įvairioms platformoms – kiekvienai plokštei būdingų konfigūracijų paskirstymas (plokštės defconfig, bootloader, vaizdo generavimas su sistemos skaidiniu) ir maksimalus vienodumas derinant failų sistemą/kuriant vaizdą su duomenimis. Dėl tokio pasiruošimo portavimas vyko greitai.

Labai rekomenduojama perskaityti įvadinius straipsnius:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Kaip surinkti

Projektas saugomas github
Klonavus saugyklą, gaunama tokia failų struktūra:

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

buildroot-2019.05.tar.gz – išvalykite buildroot archyvą
perdanga yra mano katalogas su išoriniu medžiu. Čia saugoma viskas, ko reikia norint sukurti programinę-aparatinę įrangą naudojant „buildroot“.
README.md - projekto aprašymas ir vadovas anglų kalba.
run_me.sh yra scenarijus, parengiantis kūrimo sistemą. Išplečia "buildroot" iš archyvo, pritvirtina prie jo perdangą (per išorinio medžio mechanizmą) ir leidžia pasirinkti tikslinę plokštę surinkimui

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

Po to tiesiog eikite į buildroot-2019.05 katalogą ir paleiskite komandą make.
Kai kūrimas bus baigtas, visi kūrimo rezultatai bus išvesties / vaizdų kataloge:

[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

Reikalingi failai:

  • sdcard.img - medijos vaizdas, skirtas įrašyti į SD kortelę (per dd arba rufus po langais).
  • qemu.qcow2 – medijos vaizdas, kurį reikia paleisti qemu.
  • external.qcow2 – išorinės laikmenos vaizdas duomenų bazei
  • monitor-0.9-beta.tar.gz – archyvas, skirtas atnaujinti naudojant žiniatinklio sąsają

Vadovų karta

Neverta kelis kartus rašyti tų pačių nurodymų. O logiškiausias dalykas yra vieną kartą įrašyti į žymėjimą, o tada konvertuoti į PDF atsisiuntimui ir į html žiniatinklio sąsajai. Tai įmanoma dėl pandoc paketo.

Tuo pačiu metu visi šie failai turi būti sugeneruoti prieš surenkant sistemos vaizdą. Todėl generavimas atliekamas kaip vadovų paketas. Galite peržiūrėti perdangą / pakuotę / vadovus.

Failas manuals.mk (kuris atlieka visą darbą)

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

Linux pasaulis aktyviai pereina prie systemd, ir aš taip pat turėjau tai padaryti.
Viena iš malonių naujovių yra laikmačių buvimas. Apskritai apie juos (ir ne tik apie juos) rašomas atskiras straipsnis, bet trumpai papasakosiu.

Yra veiksmų, kuriuos reikia atlikti periodiškai. Man reikėjo paleisti logrotate, kad išvalyčiau lighttpd ir php-fpm žurnalus. Įprasta būtų rašyti komandas cron, bet aš nusprendžiau naudoti sisteminį monotoninį laikmatį. Taigi logrotate veikia griežtu laiko intervalu.

Žinoma, galima sukurti laikmačius, kurie užsidega tam tikromis datomis, bet man to nereikėjo.
Laikmačio pavyzdys:

  • Laikmačio failas
    
    [Unit]
    Description=RODOS temp daemon timer

[Laikmatis] OnBootSec=1min
OnUnitActiveSec=1min

[Įdiegti] WantedBy=timers.target

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

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

Palaikomos lentos

„Asus tinker board“ yra pagrindinė plokštė, kurioje viskas turėtų veikti. Pasirinktas kaip nebrangus ir labai galingas.

Beaglebone black yra pirmoji lenta, ant kurios buvo išbandytas veikimas (renkantis galingesnę lentą).

Qemu x86_64 – naudojamas derinimo kūrimui.

Kaip tai veikia

Paleidžiant parametrai atkuriami dviem etapais:

  • paleisdamas settings_restore scenarijų (per paslaugą). Jis atkuria pagrindinius sistemos nustatymus – laiko juostą, lokalę, tinklo nustatymus ir kt.
  • paleisti paruošimo scenarijų (per paslaugą) - čia paruošiamas zabbix ir duomenų bazė, IP išvedamas į konsolę.

Kai pirmą kartą paleidžiate, nustatomas antrojo SD kortelės skaidinio dydis. Jei vis dar yra nepaskirstytos vietos, laikmena perskirstoma, o duomenų skyrius užima visą laisvą vietą. Tai daroma siekiant sumažinti diegimo vaizdo (sdcard.img) dydį. Be to, šiuo metu sukuriamas postgresql darbo katalogas. Štai kodėl pirmasis paleidimas naudojant naują vežėją užtruks ilgiau nei vėlesni.

Prijungus išorinį diską, paleidimo metu jis ieško laisvo disko ir suformatuoja jį į ext4 su išorine etikete.

Dėmesio! Prijungiant išorinį diską (taip pat jį atjungiant ar keičiant), reikia pasidaryti atsarginę kopiją ir atkurti nustatymus!

RODOS 5 įrenginys naudojamas temperatūros stebėjimui Gamintojas pateikia savo naudingumo šaltinio kodą darbui su įrenginiu. Kai sistema įjungiama, paleidžiamas rodos laikmatis, kuris šią priemonę paleidžia kartą per minutę. Dabartinė temperatūra įrašoma į failą /tmp/rodos_current_temp, po kurio zabbix gali stebėti šį failą kaip jutiklį.

Konfigūracijos laikmena yra sumontuota / data kataloge.

Paleidžiant sistemą ir ruošiant ją darbui, pulte pasirodo toks pranešimas:

System starting, please wait

Baigus parengiamuosius darbus, jis pasikeis į IP adreso rodymą:

current ip 192.168.1.32
Ready to work

Zabbix nustatymas temperatūros stebėjimui

Norėdami stebėti temperatūrą, atlikite 2 veiksmus:

  • prijunkite RODOS įrenginį prie USB prievado
  • sukurti duomenų elementą „zabbix“.

Atidarykite „zabbix“ žiniatinklio sąsają:

  • Atidarykite skyrių Konfigūracija → Prieglobos
  • Mūsų zabbix serverio eilutėje spustelėkite Elementai
  • Spustelėkite Sukurti elementą

„Buildroot“: kelių platformų programinės aparatinės įrangos kūrimas naudojant „zabbix-server“.

Įveskite šiuos duomenis:

  • vardas – savo nuožiūra (pavyzdžiui, serverRoomTemp )
  • Tipas – zabbix agentas
  • Raktas – Rodos
  • Tipas-skaitinis
  • Vienetai – C
  • Istorijos saugojimo laikotarpis — istorijos saugojimo laikotarpis. liko 10 dienų
  • Tendencijos saugojimo laikotarpis – pokyčių dinamikos saugojimo laikotarpis. Liko 30 dienų
  • Nauja programa – serveris Kambario temp

Ir paspauskite mygtuką PRIDĖTI.
„Buildroot“: kelių platformų programinės aparatinės įrangos kūrimas naudojant „zabbix-server“.

Tvarkykite nustatymus naudodami žiniatinklio sąsają

Žiniatinklio sąsaja parašyta PHP. Yra pagrindinės funkcijos:

  • peržiūrėti įrenginio būseną
  • keisti tinklo nustatymus
    „Buildroot“: kelių platformų programinės aparatinės įrangos kūrimas naudojant „zabbix-server“.
  • pakeisti vartotojo slaptažodį
  • laiko juostos pasirinkimas
  • atsarginė kopija / atkūrimas / gamyklinių parametrų atkūrimas
  • galimybė prijungti išorinį diską
  • Sistemos atnaujinimas
    „Buildroot“: kelių platformų programinės aparatinės įrangos kūrimas naudojant „zabbix-server“.

Prisijungimas prie žiniatinklio sąsajos yra apsaugotas slaptažodžiu. Pradinis puslapis – vadovas.

„Zabbix“ sąsajos adresas: ${ip/dns}/zabbix
Valdymo sąsajos adresas: ${ip/dns}/manage
„Buildroot“: kelių platformų programinės aparatinės įrangos kūrimas naudojant „zabbix-server“.

Bėgimas 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=gijos -įrenginys virtio-scsi-pci,id=scsi0 -drive file=output/images/external.qcow2,format=qcow2,aio=gijos

Ši komanda paleis sistemą su 4 branduoliais, 2048 RAM, įjungta KVM, tinklo plokšte Bridge0 ir dviem diskais: vienas sistemai ir vienas išorinis postgresql.

Vaizdus galima konvertuoti ir paleisti „Virtualbox“:

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

Tada importuokite juos į virtualią dėžę ir prisijunkite per sata.

išvada

Proceso metu susidomėjau gaminti paruoštą naudoti produktą - su ne itin gražia sąsaja (nemėgstu jų rašyti), bet veikiančią ir lengvai konfigūruojamą.

Paskutinis bandymas įdiegti zabbix prietaisą KVM parodė, kad šis veiksmas buvo teisingas (baigus diegti, sistema nepasileidžia). Galbūt aš darau kažką ne taip 😉

Medžiagos

https://buildroot.org/

Šaltinis: www.habr.com

Добавить комментарий