Buildroot: Creazione di firmware multipiattaforma cù zabbix-server

Buildroot: Creazione di firmware multipiattaforma cù zabbix-server

Storia di u prublema

L'imprese chjuche, da una banda, necessitanu un monitoraghju d'alta qualità di a so infrastruttura (in particulare in vista di a virtualizazione generalizata), da l'altra banda, hè finanziariamente difficiuli per elli cumprà novi equipaghji. I prublemi di u servitore / hardware sò ancu cumuni: spessu ci sò 1-3 servitori di torre vicinu à e stazioni di travagliu di l'utilizatori o in un picculu nichu / armariu.

Hè più faciule d'utilizà una assemblea (distribuzione) pronta, chì vi basta à cullà in una carta microSD è inserisce in un computer unicu cumune (famiglie beaglebone, raspberry pi è orange pi, asus tinker board). Inoltre, tali equipaghji ùn sò micca prezzu è ponu esse stallati in ogni locu.

Formulazione di u prublema

In parechji manere, u prughjettu sviluppatu cum'è una spezia di travagliu di laboratoriu cù a pussibilità di applicà i risultati.

Zabbix hè statu sceltu cum'è u sistema di surviglianza perchè hè un sistema putente, liberu è ben documentatu.

U prublema cù a piattaforma hardware hè diventata acuta Mettendu una macchina separata sottu monitoraghju ùn hè ancu una suluzione assai bona - o hè caru per cumprà un equipamentu novu, o per circà l'equipaggiu anticu + in picculi imprese ci sò prublemi frequenti cù u servitore /. hardware.

Utilizà u sistema di creazione di buildroot permette di creà suluzioni specializate chì ponu esse operate da u persunale cun cunniscenza minima di i sistemi operativi Linux. Stu sistema hè amichevule à i principianti, ma à u stessu tempu furnisce assai opportunità di persunalizazione in manu di un sviluppatore espertu. Hè perfettu per risolve u prublema di u monitoraghju di prezzu, ma cumpletamente funziunale di l'infrastruttura IT, cù requisiti minimi per a furmazione di u persunale chì l'operanu.

Passi di suluzione

Hè statu decisu di creà inizialmente firmware per x86_64 per eseguisce in qemu, postu chì questa hè una suluzione còmuda è rapida per debugging. Allora portà à un computer unicu di bracciu (mi piacia l'asus tinker board).

buildroot hè statu sceltu cum'è u sistema di creazione. In principiu, ùn mancava u pacchettu zabbix, cusì hà da esse purtatu Ci sò stati prublemi cù u locale russo, chì sò stati risolti cù l'applicazioni di i patches appropritati (nota: in e versioni più recenti di buildroot, sti patches ùn sò più necessarii).

Portà u pacchettu zabbix stessu serà descrittu in un articulu separatu.

Siccomu tuttu duverebbe travaglià cum'è firmware (immubiliare l'imaghjini di u sistema + i schedarii di cunfigurazione / basa di dati recuperabili), era necessariu di scrive u vostru propiu sistema di destinazione, servizii è timers (target, service, timer).

Hè statu decisu di split the media in 2 sezioni - una seccione cù i schedarii di u sistema è una seccione cù cunfigurazione cambiabile è i schedarii di basa di dati zabbix.

Risolve i prublemi ligati à a basa di dati hè diventatu un pocu più difficiule. Ùn vulia micca mette direttamente nantu à i media. À u listessu tempu, a dimensione di a basa di dati pò ghjunghje à una dimensione chì supera a dimensione di un pussibili ramdisk. Per quessa, hè stata scelta una suluzione di cumprumissu: a basa di dati hè situata nantu à a seconda partizione di a carta SD (carti SLC muderni anu finu à 30 000 cicli di scrittura), ma ci hè un paràmetru chì permette l'usu di media esterni (per esempiu, usb- hdd).

U monitoraghju di a temperatura hè stata implementata per mezu di u dispusitivu RODOS-5. Di sicuru, pudete aduprà u Dallas 1820 direttamente, ma era più veloce è più faciule per cunnette un USB.

grub86 hè statu sceltu cum'è u bootloader per x64_2. Era necessariu di scrive una cunfigurazione minima per lancià.

Dopu avè debugging in qemu, hè statu purtatu à a tavola asus tinker. A struttura di a mo overlay hè stata inizialmente pensata à esse cross-platform - assigning configs specifichi per ogni bordu (board defconfig, bootloader, genering an image with a system partition) è a massima uniformità in a persunalizazione di u sistema di fugliale / creazione di una maghjina cù dati. A causa di tale preparazione, u porting hè andatu prestu.

Hè assai cunsigliatu di leghje l'articuli introduttivi:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Cume riunisce

U prughjettu hè guardatu in github
Dopu a clonazione di u repository, a struttura di u schedariu seguente hè ottenuta:

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

buildroot-2019.05.tar.gz - pulisce l'archiviu buildroot
overlay hè u mo cartulare cù l'arburu esternu. Questu hè induve tuttu ciò chì avete bisognu di custruisce u firmware cù buildroot hè almacenatu.
README.md - descrizzione di u prugettu è manuale in inglese.
run_me.sh hè un script chì prepara u sistema di creazione. Expands buildroot da l'archiviu, attache un overlay à questu (via u mecanismu di l'arburu esternu) è vi permette di selezziunà a tavola di destinazione per l'assemblea.

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

Dopu questu, basta à andà in u cartulare buildroot-2019.05 è eseguite u cumandamentu make.
Una volta chì a custruzione hè cumpleta, tutti i risultati di a custruzzione seranu in u cartulare 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

Files richiesti:

  • sdcard.img - media image per a registrazione nantu à una carta SD (via dd o rufus sottu wibdows).
  • qemu.qcow2 - immagine media per eseguisce in qemu.
  • external.qcow2 - imagine media esterna per a basa di dati
  • monitor-0.9-beta.tar.gz - archiviu per l'aghjurnamentu via l'interfaccia web

Generazione di Guide

Ùn vale a pena scrive u listessu struzzioni parechje volte. È a cosa più logica hè di scrive una volta in markdown, è poi cunvertisce in PDF per scaricà è html per l'interfaccia web. Questu hè pussibule grazia à u pacchettu pandoc.

À u listessu tempu, tutti questi schedari devenu esse generati prima chì l'imaghjini di u sistema hè assemblatu quelli scripts post-build sò digià inutili. Dunque, a generazione hè fatta in forma di pacchettu manuali. Pudete vede overlay / pacchettu / manuali.

U schedariu manuals.mk (chì face tuttu u travagliu)

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

U mondu Linux si move attivamente in systemd, è aghju avutu ancu fà.
Una di l'innuvazioni piacevuli hè a presenza di timers. In generale, un articulu separatu hè scrittu annantu à elli (è micca solu nantu à elli), ma vi dicu brevemente.

Ci sò azzioni chì deve esse realizatu periodicamente. Aviu bisognu di eseguisce logrotate per sguassà i logs lighttpd è php-fpm. U solitu seria di scrive i cumandamenti in cron, ma decisu di utilizà u timer monotonicu systemd. Allora logrotate corre à un intervallu di tempu strettu.

Di sicuru, hè pussibule di creà timers chì sparanu in certe date, ma ùn aghju micca bisognu di questu.
Esempiu di timer:

  • Timer File
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer] OnBootSec=1min
OnUnitActiveSec=1min

[Installa] WantedBy=timers.target

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

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

Tavole supportate

Asus tinker board hè a scheda principale nantu à quale tuttu deve travaglià. Sceltu cum'è pocu prezzu è assai putente.

Beaglebone neru hè u primu bordu nantu à quale l'operazione hè stata pruvata (durante a selezzione di un tavulinu più putente).

Qemu x86_64 - utilizatu per u sviluppu di debugging.

Cumu travagliu

À l'iniziu, una restaurazione in dui fasi di i paràmetri si trova:

  • esegue u script settings_restore (via u serviziu). Ripristina i paràmetri di basa di u sistema - fusu orariu, locale, paràmetri di rete, etc.
  • esegue u script di preparazione (via u serviziu) - quì zabbix è a basa di dati sò preparati, l'IP hè uscita à a cunsola.

Quandu avete principiatu, a dimensione di a seconda partizione di a carta SD hè determinata. S'ellu ci hè sempre un spaziu micca allocatu, i media hè ripartizione, è a seccione di dati occupa tuttu u spaziu liberu. Questu hè fattu per riduce a dimensione di l'imaghjini di stallazione (sdcard.img). Inoltre, u cartulare di travagliu postgresql hè creatu à questu puntu. Hè per quessa chì u primu lanciamentu cù un novu traspurtadore duverà più di i successivi.

Quandu cunnette un discu esternu, à u mumentu di l'iniziu cerca un discu liberu è u formate in ext4 cù l'etichetta esterna.

Attenzione ! Quandu cunnette un discu esternu (cum'è disconnecting o rimpiazzà), avete bisognu di fà una copia di salvezza è restaurà i paràmetri!

U dispusitivu RODOS 5 hè utilizatu per u monitoraghju di a temperatura U fabricatore furnisce u codice fonte di a so utilità per travaglià cù u dispusitivu. Quandu u sistema hè attivatu, u cronometru rodos principia, chì eseguisce sta utilità una volta per minutu. A temperatura attuale hè scritta à u schedariu /tmp/rodos_current_temp, dopu chì zabbix pò monitorà stu schedariu cum'è sensor.

I media di almacenamento di cunfigurazione sò muntati in u cartulare /data.

Quandu si principia u sistema è si preparanu per u funziunamentu, u missaghju seguente appare in a cunsola:

System starting, please wait

Dopu avè finitu u travagliu preparatoriu, cambierà à visualizà l'indirizzu IP:

current ip 192.168.1.32
Ready to work

Configurazione di zabbix per u monitoraghju di a temperatura

Per monitorà a temperatura, basta à piglià 2 passi:

  • cunnette u dispusitivu RODOS à u portu USB
  • creà un articulu di dati in zabbix

Aprite l'interfaccia web zabbix:

  • Aprite a sezione Configurazione → Hosts
  • Cliccate nantu à Elementi in a linea di u nostru servitore zabbix
  • Cliccate nant'à Crea articulu

Buildroot: Creazione di firmware multipiattaforma cù zabbix-server

Inserite i seguenti dati:

  • nome - à a vostra discrezione (per esempiu, serverRoomTemp )
  • Type - agent zabbix
  • Chjave - Rodos
  • Tipu-numericu
  • Unità - C
  • Periudu di almacenamiento di a storia - periodu di almacenamiento di a storia. manca 10 ghjorni
  • Periudu di almacenamentu di tendenza - periodu di almacenamentu per a dinamica di cambiamenti. A manca 30 ghjorni
  • Nova applicazione - Server Temp

È appughjà u buttone ADD.
Buildroot: Creazione di firmware multipiattaforma cù zabbix-server

Gestisce i paràmetri via l'interfaccia web

L'interfaccia web hè scritta in PHP. Ci sò funzioni principali:

  • vede u statu di u dispusitivu
  • cambià i paràmetri di a rete
    Buildroot: Creazione di firmware multipiattaforma cù zabbix-server
  • cambià a password d'utilizatore
  • selezzione di u fusu orariu
  • copia di salvezza / risturà / resettore di fabbrica
  • capacità di cunnette un discu esternu
  • Actualizazione di u sistema
    Buildroot: Creazione di firmware multipiattaforma cù zabbix-server

U login à l'interfaccia web hè prutettu da password. Pagina iniziale - manuale.

Indirizzu di l'interfaccia Zabbix: ${ip/dns}/zabbix
Indirizzu di l'interfaccia di gestione: ${ip/dns}/manage
Buildroot: Creazione di firmware multipiattaforma cù zabbix-server

Corsa in 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

Stu cumandimu accuminciarà un sistema cù core 4, 2048 RAM, KVM attivatu, una carta di rete in bridge0 è dui dischi: unu per u sistema è un esternu per postgresql.

L'imaghjini ponu esse cunvertiti è eseguite in Virtualbox:

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

Allora impurtate in virtualbox è cunnette via sata.

cunchiusioni

In u prucessu, sò diventatu interessatu à fà un pruduttu prontu per l'usu - cù una interfaccia micca assai bella (ùn mi piace micca scrive), ma una chì travaglia è hè faciule da cunfigurà.

L'ultimu tentativu di installà zabbix-appliance in KVM hà dimustratu chì stu passu era currettu (dopu chì a stallazione hè finita, u sistema ùn principia micca). Forse facciu qualcosa di male 😉

Materiali

https://buildroot.org/

Source: www.habr.com

Add a comment