Buildroot: Monialustaisen laiteohjelmiston luominen zabbix-palvelimella

Buildroot: Monialustaisen laiteohjelmiston luominen zabbix-palvelimella

Ongelmahistoria

Pienet yritykset toisaalta tarvitsevat infrastruktuurinsa laadukasta seurantaa (etenkin laajalle levinneen virtualisoinnin valossa), toisaalta niiden on taloudellisesti vaikeaa hankkia uusia laitteita. Palvelin/laitteisto-ongelmat ovat myös yleisiä: usein 1-3 tornipalvelinta on käyttäjien työasemien vieressä tai pienessä nichessä/kaapissa.

On helpompi käyttää valmiita kokoonpanoa (jakelua), joka tarvitsee vain ladata microSD-kortille ja laittaa tavalliseen yksilevytietokoneeseen (beaglebone-, raspberry pi- ja orange pi -perheet, asus tinker board). Lisäksi tällaiset laitteet ovat edullisia ja ne voidaan asentaa minne tahansa.

Ongelma

Projekti kehittyi monella tapaa eräänlaisena laboratoriotyönä, jossa oli mahdollisuus soveltaa tuloksia.

Zabbix valittiin valvontajärjestelmäksi, koska se on tehokas, ilmainen ja hyvin dokumentoitu järjestelmä.

Laitealustan ongelma on kärjistynyt.. Erillisen koneen valvonta ei myöskään ole kovin hyvä ratkaisu - joko uusien laitteiden hankinta on kallista, tai vanhojen laitteiden etsiminen + pienissä yrityksissä usein ongelmia palvelimen kanssa/ laitteisto.

Buildroot build -järjestelmän avulla voit luoda erikoistuneita ratkaisuja, joita voivat käyttää henkilöstö, jolla on vain vähän Linux-käyttöjärjestelmien tuntemusta. Tämä järjestelmä on ystävällinen aloittelijoille, mutta tarjoaa samalla runsaasti räätälöintimahdollisuuksia kokeneen kehittäjän käsissä. Se sopii erinomaisesti IT-infrastruktuurin halvan, mutta täysin toimivan valvonnan ongelman ratkaisemiseen, ja sitä käyttävän henkilöstön koulutusvaatimukset ovat minimaaliset.

Ratkaisun vaiheet

Aluksi päätettiin luoda laiteohjelmisto x86_64:lle toimimaan qemussa, koska tämä on kätevä ja nopea ratkaisu virheenkorjaukseen. Sitten liitä se käsivarteen yksilevyiseen tietokoneeseen (pidin asus tinker boardista).

buildroot valittiin rakennusjärjestelmäksi. Aluksi siitä puuttui zabbix-paketti, joten se jouduttiin siirtämään.Venäläisen kielen kanssa oli ongelmia, jotka ratkaistiin käyttämällä sopivia korjaustiedostoja (huom: buildrootin uudemmissa versioissa näitä korjauksia ei enää tarvita).

Itse zabbix-paketin siirtäminen kuvataan erillisessä artikkelissa.

Koska kaiken pitäisi toimia laiteohjelmistona (muuttumaton järjestelmäkuva + palautettavat konfiguraatio-/tietokantatiedostot), oli tarpeen kirjoittaa omat järjestelmäkohteet, palvelut ja ajastimet (kohde, palvelu, ajastin).

Media päätettiin jakaa kahteen osaan - osioon järjestelmätiedostot ja osaan, jossa on muutettavat konfiguraatiot ja zabbix-tietokantatiedostot.

Tietokantaan liittyvien ongelmien ratkaiseminen osoittautui hieman vaikeammaksi. En halunnut laittaa sitä suoraan mediaan. Samalla tietokannan koko voi saavuttaa koon, joka ylittää mahdollisen muistilevyn koon. Siksi valittiin kompromissiratkaisu: tietokanta sijaitsee SD-kortin toisella osiolla (nykyaikaisissa SLC-korteissa on jopa 30 000 kirjoitusjaksoa), mutta siellä on asetus, joka mahdollistaa ulkoisen median käytön (esim. hdd).

Lämpötilan valvonta toteutettiin RODOS-5-laitteella. Voit tietysti käyttää Dallas 1820:tä suoraan, mutta USB:n liittäminen oli nopeampaa ja helpompaa.

grub86 valittiin x64_2:n käynnistyslataimeksi. Sen käynnistämiseksi piti kirjoittaa pieni konfiguraatio.

Kun qemulla oli virheenkorjaus, se siirrettiin asus tinker boardille. Peittokuvani rakenne oli alun perin tarkoitus olla monikäyttöinen - jokaiselle levylle ominaisten asetusten allokointi (levyn defconfig, käynnistyslatain, kuvan luominen järjestelmäosion avulla) ja maksimaalinen yhtenäisyys tiedostojärjestelmän mukauttamisessa / kuvan luomisessa tiedoilla. Tällaisen valmistelun ansiosta siirtäminen sujui nopeasti.

On erittäin suositeltavaa lukea johdantoartikkelit:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Kuinka koota

Projekti on tallennettu githubiin
Arkiston kloonauksen jälkeen saadaan seuraava tiedostorakenne:

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

buildroot-2019.05.tar.gz - puhdista buildroot-arkisto
peittokuva on hakemistoni ulkoisen puun kanssa. Tähän on tallennettu kaikki, mitä tarvitset laiteohjelmiston rakentamiseen buildrootin avulla.
README.md - hankkeen kuvaus ja käsikirja englanniksi.
run_me.sh on skripti, joka valmistelee koontijärjestelmän. Laajentaa buildrootin arkistosta, liittää siihen peitteen (ulkoisen puumekanismin kautta) ja antaa sinun valita koottavan kohdelevyn

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

Mene tämän jälkeen vain buildroot-2019.05-hakemistoon ja suorita make-komento.
Kun koonti on valmis, kaikki koontitulokset ovat tulos/kuvahakemistossa:

[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

Vaaditut tiedostot:

  • sdcard.img - mediakuva tallennettavaksi SD-kortille (dd:n tai rufuksen kautta wibdowsin alla).
  • qemu.qcow2 - qemussa suoritettava mediakuva.
  • external.qcow2 - tietokannan ulkoinen mediakuva
  • monitor-0.9-beta.tar.gz - arkisto verkkokäyttöliittymän kautta päivitettäväksi

Oppaiden sukupolvi

Ei kannata kirjoittaa samoja ohjeita useaan kertaan. Ja loogisin asia on kirjoittaa se kerran markdowniin ja muuntaa sitten PDF-muotoon lataamista varten ja html-muotoon verkkokäyttöliittymää varten. Tämä on mahdollista pandoc-paketin ansiosta.

Samanaikaisesti kaikki nämä tiedostot on luotava ennen kuin järjestelmäkuva on koottu; nuo jälkikoonnin skriptit ovat jo hyödyttömiä. Siksi sukupolvi tehdään käsikirjapaketin muodossa. Voit katsoa peittokuvaa/pakettia/opasta.

Manuals.mk-tiedosto (joka tekee kaiken työ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

Linux-maailma siirtyy aktiivisesti systemd-järjestelmään, ja minunkin piti tehdä se.
Yksi miellyttävistä innovaatioista on ajastimien läsnäolo. Yleensä heistä (eikä vain heistä) kirjoitetaan erillinen artikkeli, mutta kerron sinulle lyhyesti.

On toimintoja, jotka on suoritettava säännöllisesti. Minun piti suorittaa logrotate tyhjentääkseni lighttpd- ja php-fpm-lokit. Tavallinen asia olisi kirjoittaa komennot cronilla, mutta päätin käyttää systemd-monotonista ajastinta. Joten logrotate toimii tiukasti aikavälillä.

Tietenkin on mahdollista luoda ajastimia, jotka laukeavat tiettyinä päivinä, mutta en tarvinnut tätä.
Esimerkki ajastimesta:

  • Ajastintiedosto
    
    [Unit]
    Description=RODOS temp daemon timer

[Ajastin] OnBootSec=1 min
OnUnitActiveSec=1 min

[Asenna] WantedBy=times.target

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

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

Tuetut levyt

Asus tinker board on emolevy, jolla kaiken pitäisi toimia. Valittu edulliseksi ja erittäin tehokkaaksi.

Beaglebone black on ensimmäinen lauta, jolla testattiin toimintaa (tehokkaamman laudan valinnassa).

Qemu x86_64 - käytetään virheenkorjauskehitykseen.

Miten se toimii

Käynnistyksen yhteydessä asetusten palautus tapahtuu kaksivaiheisesti:

  • Settings_restore-komentosarjan suorittaminen (palvelun kautta). Se palauttaa järjestelmän perusasetukset - aikavyöhyke, kieli, verkkoasetukset jne.
  • valmisteluskriptin suorittaminen (palvelun kautta) - tässä zabbix ja tietokanta valmistetaan, IP tulostetaan konsoliin.

Kun käynnistät sen ensimmäisen kerran, SD-kortin toisen osion koko määritetään. Jos varaamatonta tilaa on vielä jäljellä, media ositetaan uudelleen ja tietoosio vie kaiken vapaan tilan. Tämä tehdään asennuskuvan (sdcard.img) koon pienentämiseksi. Lisäksi postgresql-työhakemisto luodaan tässä vaiheessa. Tästä syystä ensimmäinen julkaisu uudella operaattorilla on pidempi kuin myöhemmät.

Kun kytket ulkoisen aseman, se etsii käynnistyshetkellä vapaan aseman ja alustaa sen ext4:ksi ulkoisella tunnisteella.

Huomio! Kun liität ulkoisen aseman (sekä irrotat tai vaihdat sen), sinun on tehtävä varmuuskopio ja palautettava asetukset!

Lämpötilan valvontaan käytetään laitetta RODOS 5. Valmistaja toimittaa apuohjelman lähdekoodin laitteen kanssa työskentelyyn. Kun järjestelmä käynnistetään, rodos-ajastin käynnistyy, joka käynnistää tämän apuohjelman kerran minuutissa. Nykyinen lämpötila kirjoitetaan tiedostoon /tmp/rodos_current_temp, jonka jälkeen zabbix voi valvoa tätä tiedostoa anturina.

Määritysten tallennusväline on asennettu /data-hakemistoon.

Kun järjestelmä käynnistetään ja valmistetaan käyttöön, konsoliin tulee seuraava viesti:

System starting, please wait

Valmistelutyön jälkeen se muuttuu näyttämään IP-osoite:

current ip 192.168.1.32
Ready to work

Zabbixin asettaminen lämpötilan valvontaan

Seuraa lämpötilaa tekemällä vain 2 vaihetta:

  • liitä RODOS-laite USB-porttiin
  • Luo tietokohde zabbixissa

Avaa zabbix-verkkokäyttöliittymä:

  • Avaa osio Asetukset → Isännät
  • Napsauta Kohteet zabbix-palvelimemme riviltä
  • Napsauta Luo kohde

Buildroot: Monialustaisen laiteohjelmiston luominen zabbix-palvelimella

Syötä seuraavat tiedot:

  • nimi - oman harkintasi mukaan (esimerkiksi serverRoomTemp )
  • Tyyppi - zabbix-agentti
  • Avain - Rodos
  • Tyyppi-numeerinen
  • Yksiköt - C
  • Historian tallennusaika — historian säilytysaika. jäljellä 10 päivää
  • Trendin tallennusaika — muutosten dynamiikan tallennusaika. Jäljellä 30 päivää
  • Uusi sovellus - palvelin Huonelämpötila

Ja paina LISÄÄ-painiketta.
Buildroot: Monialustaisen laiteohjelmiston luominen zabbix-palvelimella

Hallitse asetuksia verkkokäyttöliittymän kautta

Verkkokäyttöliittymä on kirjoitettu PHP:llä. Siinä on päätoiminnot:

  • katso laitteen tila
  • verkkoasetusten muuttaminen
    Buildroot: Monialustaisen laiteohjelmiston luominen zabbix-palvelimella
  • käyttäjän salasanan vaihtaminen
  • aikavyöhykkeen valinta
  • varmuuskopiointi/palautus/tehdasasetusten palautus
  • mahdollisuus liittää ulkoinen asema
  • Järjestelmän päivitys
    Buildroot: Monialustaisen laiteohjelmiston luominen zabbix-palvelimella

Verkkokäyttöliittymään kirjautuminen on suojattu salasanalla. Aloitussivu - käsikirja.

Zabbix-käyttöliittymän osoite: ${ip/dns}/zabbix
Hallintaliittymän osoite: ${ip/dns}/manage
Buildroot: Monialustaisen laiteohjelmiston luominen zabbix-palvelimella

Juokse qemussa

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 -asematiedosto=tulostus/kuvat/qemu.qcow2,format=qcow2,aio=langat -laite virtio-scsi-pci,id=scsi0 -asematiedosto=lähtö/kuvat/ulkoinen.qcow2,format=qcow2,aio=säikeet

Tämä komento käynnistää järjestelmän, jossa on 4 ydintä, 2048 RAM, KVM käytössä, verkkokortti bridge0:ssa ja kaksi levyä: yksi järjestelmälle ja toinen ulkoinen postgresql:lle.

Kuvat voidaan muuntaa ja ajaa Virtualboxissa:

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

Tuo ne sitten virtualboxiin ja muodosta yhteys satan kautta.

Johtopäätös

Samalla innostuin valmistamaan käyttövalmis tuote - jolla ei ole kovin kaunis käyttöliittymä (en pidä niiden kirjoittamisesta), mutta joka toimii ja on helppo konfiguroida.

Viimeinen yritys asentaa zabbix-laite KVM:ään osoitti, että tämä vaihe oli oikein (järjestelmä ei käynnisty asennuksen jälkeen). Ehkä teen jotain väärin 😉

tarvikkeet

https://buildroot.org/

Lähde: will.com

Lisää kommentti