Buildroot: Creu firmware traws-lwyfan gyda gweinydd zabbix

Buildroot: Creu firmware traws-lwyfan gyda gweinydd zabbix

Hanes problemau

Mae cwmnïau bach, ar y naill law, angen monitro ansawdd uchel eu seilwaith (yn enwedig yng ngoleuni rhithwiroli eang), ar y llaw arall, mae'n anodd yn ariannol iddynt brynu offer newydd. Mae problemau gweinydd/caledwedd hefyd yn gyffredin: yn aml mae 1-3 gweinydd twr wrth ymyl gweithfannau defnyddwyr neu mewn cilfach/closed bach.

Mae'n haws defnyddio gwasanaeth parod (dosbarthiad), y mae'n rhaid i chi ei uwchlwytho i gerdyn microSD a'i fewnosod i gyfrifiadur bwrdd sengl cyffredin (teuluoedd bachlebone, raspberry pi a oren pi, bwrdd tincer asus). Yn ogystal, mae offer o'r fath yn rhad a gellir eu gosod yn unrhyw le.

Datganiad o'r broblem

Mewn sawl ffordd, datblygodd y prosiect fel math o waith labordy gyda'r posibilrwydd o gymhwyso'r canlyniadau.

Dewiswyd Zabbix fel y system fonitro oherwydd ei bod yn system bwerus, rhad ac am ddim sydd wedi'i dogfennu'n dda.

Mae'r broblem gyda'r llwyfan caledwedd wedi dod yn ddifrifol ac nid yw monitro peiriant ar wahân yn ateb da iawn chwaith - naill ai mae'n ddrud prynu offer newydd, neu chwilio am hen offer + mewn cwmnïau bach mae problemau cyson gyda gweinyddwr/ caledwedd.

Mae defnyddio'r system adeiladu root yn caniatáu ichi greu datrysiadau arbenigol y gellir eu gweithredu gan bersonél sydd â gwybodaeth fach iawn am systemau gweithredu Linux. Mae'r system hon yn gyfeillgar i ddechreuwyr, ond ar yr un pryd yn darparu digon o gyfleoedd addasu yn nwylo datblygwr profiadol. Mae'n berffaith ar gyfer datrys y broblem o fonitro seilwaith TG rhad, ond cwbl weithredol, heb fawr o ofynion ar gyfer hyfforddi'r personél sy'n ei weithredu.

Camau datrysiad

Penderfynwyd i ddechrau creu cadarnwedd ar gyfer x86_64 i redeg yn qemu, gan fod hwn yn ateb cyfleus a chyflym ar gyfer dadfygio. Yna ei gludo i gyfrifiadur bwrdd sengl braich (roeddwn i'n hoffi'r bwrdd tincer asus).

dewiswyd buildroot fel y system adeiladu. I ddechrau, nid oes ganddo'r pecyn zabbix, felly roedd yn rhaid ei borthi Roedd problemau gyda'r locale Rwsiaidd, a gafodd eu datrys trwy gymhwyso'r clytiau priodol (noder: mewn fersiynau mwy diweddar o buildroot, nid oes angen y clytiau hyn mwyach).

Bydd porthi'r pecyn zabbix ei hun yn cael ei ddisgrifio mewn erthygl ar wahân.

Gan y dylai popeth weithio fel cadarnwedd (delwedd system anghyfnewidiol + cyfluniad adferadwy / ffeiliau cronfa ddata), roedd angen ysgrifennu eich targedau systemd, gwasanaethau ac amseryddion eich hun (targed, gwasanaeth, amserydd).

Penderfynwyd rhannu'r cyfryngau yn 2 adran - adran gyda ffeiliau system ac adran gyda configs cyfnewidiol a ffeiliau cronfa ddata zabbix.

Roedd datrys problemau'n ymwneud â'r gronfa ddata ychydig yn fwy anodd. Doeddwn i ddim eisiau ei osod yn uniongyrchol ar y cyfryngau. Ar yr un pryd, gall maint y gronfa ddata gyrraedd maint sy'n fwy na maint disg ram posibl. Felly, dewiswyd datrysiad cyfaddawd: mae'r gronfa ddata wedi'i lleoli ar ail raniad y cerdyn SD (mae gan gardiau SLC modern hyd at 30 o gylchoedd ysgrifennu), ond mae gosodiad sy'n caniatáu defnyddio cyfryngau allanol (er enghraifft, usb- hdd).

Gweithredwyd monitro tymheredd trwy'r ddyfais RODOS-5. Wrth gwrs, gallwch chi ddefnyddio'r Dallas 1820 yn uniongyrchol, ond roedd yn gyflymach ac yn haws plygio USB i mewn.

dewiswyd grub86 fel y cychwynnydd ar gyfer x64_2. Roedd angen ysgrifennu cyfluniad lleiaf posibl i'w lansio.

Ar ôl dadfygio ar qemu, cafodd ei gludo i'r bwrdd tincer asus. Bwriadwyd i strwythur fy nhroshaen yn wreiddiol fod yn draws-lwyfan - dyrannu cyfluniadau penodol i bob bwrdd (defconfig bwrdd, cychwynnydd, cynhyrchu delwedd gyda rhaniad system) a'r unffurfiaeth mwyaf wrth addasu'r system ffeiliau / creu delwedd gyda data. Oherwydd paratoi o'r fath, aeth y porthi yn gyflym.

Argymhellir yn gryf eich bod yn darllen yr erthyglau rhagarweiniol:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Sut i ymgynnull

Mae'r prosiect yn cael ei storio ar github
Ar ôl clonio'r ystorfa, ceir y strwythur ffeil canlynol:

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

buildroot-2019.05.tar.gz - archif buildroot glân
troshaen yw fy cyfeiriadur gyda allanol-coed. Dyma lle mae popeth sydd ei angen arnoch i adeiladu'r firmware gan ddefnyddio buildroot yn cael ei storio.
README.md - disgrifiad o'r prosiect a llawlyfr yn Saesneg.
Mae run_me.sh yn sgript sy'n paratoi'r system adeiladu. Yn ehangu gwraidd adeiladu o'r archif, yn gosod troshaen arno (trwy fecanwaith coed allanol) ac yn caniatáu ichi ddewis y bwrdd targed ar gyfer cydosod

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

Ar ôl hyn, ewch i'r cyfeiriadur buildroot-2019.05 a rhedeg y gorchymyn gwneud.
Unwaith y bydd y gwaith adeiladu wedi'i gwblhau, bydd yr holl ganlyniadau adeiladu yn y cyfeiriadur allbwn / delweddau:

[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

Ffeiliau gofynnol:

  • sdcard.img - delwedd cyfryngau i'w recordio ar gerdyn SD (trwy dd neu rufus o dan wibdows).
  • qemu.qcow2 - delwedd cyfryngau i redeg yn qemu.
  • external.qcow2 - delwedd cyfryngau allanol ar gyfer y gronfa ddata
  • monitor-0.9-beta.tar.gz - archif i'w diweddaru trwy'r rhyngwyneb gwe

Cynhyrchu Tywyswyr

Nid yw'n werth ysgrifennu'r un cyfarwyddiadau sawl gwaith. A'r peth mwyaf rhesymegol yw ei ysgrifennu unwaith mewn markdown, ac yna ei drosi i PDF i'w lawrlwytho a html ar gyfer y rhyngwyneb gwe. Mae hyn yn bosibl diolch i'r pecyn pandoc.

Ar yr un pryd, mae angen cynhyrchu'r holl ffeiliau hyn cyn i ddelwedd y system gael ei chydosod; mae'r sgriptiau ôl-adeiladu hynny eisoes yn ddiwerth. Felly, mae'r genhedlaeth yn cael ei wneud ar ffurf pecyn llawlyfr. Gallwch edrych ar droshaenu/pecyn/llawlyfrau.

Y ffeil manuals.mk (sy'n gwneud yr holl waith)

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

Mae'r byd Linux wrthi'n symud i systemd, ac roedd yn rhaid i mi ei wneud hefyd.
Un o'r datblygiadau newydd dymunol yw presenoldeb amseryddion. Yn gyffredinol, mae erthygl ar wahân yn cael ei hysgrifennu amdanynt (ac nid yn unig amdanynt), ond byddaf yn dweud wrthych yn fyr.

Mae yna gamau gweithredu y mae'n rhaid eu cyflawni o bryd i'w gilydd. Roedd angen i mi redeg logrotate i glirio'r loghttpd a php-fpm logiau. Y peth arferol fyddai ysgrifennu'r gorchmynion yn cron, ond penderfynais ddefnyddio'r amserydd monotonig systemd. Felly mae logrotate yn rhedeg ar gyfnod amser caeth.

Wrth gwrs, mae'n bosibl creu amseryddion sy'n tanio ar ddyddiadau penodol, ond nid oedd angen hyn arnaf.
Enghraifft o amserydd:

  • Ffeil Amserydd
    
    [Unit]
    Description=RODOS temp daemon timer

[Amserydd] OnBootSec=1 munud
OnUnitActiveSec=1 munud

[Gosod] WantedBy=timers.target

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

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

Byrddau â chymorth

Bwrdd tinker Asus yw'r prif fwrdd y dylai popeth weithio arno. Wedi'i ddewis yn rhad ac yn bwerus iawn.

Beaglebone black yw'r bwrdd cyntaf y profwyd y llawdriniaeth arno (yn ystod y dewis o fwrdd mwy pwerus).

Qemu x86_64 - a ddefnyddir ar gyfer datblygu dadfygio.

Sut mae'n gweithio

Ar y cychwyn, mae adferiad dau gam o leoliadau yn digwydd:

  • rhedeg y sgript settings_restore (trwy'r gwasanaeth). Mae'n adfer gosodiadau system sylfaenol - parth amser, locale, gosodiadau rhwydwaith, ac ati.
  • rhedeg y sgript paratoi (trwy'r gwasanaeth) - yma mae zabbix a'r gronfa ddata yn cael eu paratoi, mae'r IP yn allbwn i'r consol.

Pan ddechreuwch ef gyntaf, penderfynir maint ail raniad y cerdyn SD. Os oes lle heb ei ddyrannu o hyd, caiff y cyfryngau ei ailrannu, ac mae'r adran ddata yn cymryd yr holl ofod rhydd. Gwneir hyn er mwyn lleihau maint y ddelwedd gosod (sdcard.img). Yn ogystal, mae'r cyfeiriadur gweithio postgresql yn cael ei greu ar y pwynt hwn. Dyna pam y bydd y lansiad cyntaf gyda chludwr newydd yn hirach na'r rhai dilynol.

Wrth gysylltu gyriant allanol, ar hyn o bryd mae'n chwilio am yriant am ddim ac yn ei fformatio i mewn i ext4 gyda'r label allanol.

Sylw! Wrth gysylltu gyriant allanol (yn ogystal â datgysylltu neu amnewid), mae angen i chi wneud copi wrth gefn ac adfer y gosodiadau!

Defnyddir dyfais RODOS 5 ar gyfer monitro tymheredd.Mae'r gwneuthurwr yn darparu cod ffynhonnell ei ddefnyddioldeb ar gyfer gweithio gyda'r ddyfais. Pan fydd y system yn cael ei droi ymlaen, mae'r amserydd rodos yn cychwyn, sy'n rhedeg y cyfleustodau hwn unwaith y funud. Ysgrifennir y tymheredd presennol i'r ffeil /tmp/rodos_current_temp, ac ar ôl hynny gall zabbix fonitro'r ffeil hon fel synhwyrydd.

Mae'r cyfrwng storio cyfluniad wedi'i osod yn y cyfeiriadur / data.

Wrth gychwyn y system a'i pharatoi ar gyfer gweithredu, mae'r neges ganlynol yn ymddangos yn y consol:

System starting, please wait

Ar ôl cwblhau'r gwaith paratoi, bydd yn newid i ddangos y cyfeiriad IP:

current ip 192.168.1.32
Ready to work

Sefydlu zabbix ar gyfer monitro tymheredd

I fonitro'r tymheredd, cymerwch 2 gam yn unig:

  • cysylltu'r ddyfais RODOS i'r porthladd USB
  • creu eitem ddata yn zabbix

Agorwch y rhyngwyneb gwe zabbix:

  • Agorwch yr adran Configuration → Hosts
  • Cliciwch ar Eitemau yn llinell ein gweinydd zabbix
  • Cliciwch ar Creu eitem

Buildroot: Creu firmware traws-lwyfan gyda gweinydd zabbix

Rhowch y data canlynol:

  • enw - yn ôl eich disgresiwn (er enghraifft, serverRoomTemp )
  • Math - asiant zabbix
  • Allwedd - Rodos
  • Math-rhifol
  • Unedau - C
  • Cyfnod storio hanes — cyfnod storio hanes. gadael 10 diwrnod
  • Cyfnod storio tueddiad - cyfnod storio ar gyfer dynameg newidiadau. Wedi gadael 30 diwrnod
  • Cais newydd - gweinydd Ystafell Temp

A gwasgwch y botwm ADD.
Buildroot: Creu firmware traws-lwyfan gyda gweinydd zabbix

Rheoli gosodiadau trwy ryngwyneb gwe

Mae'r rhyngwyneb gwe wedi'i ysgrifennu yn PHP. Mae yna brif swyddogaethau:

  • gweld statws dyfais
  • newid gosodiadau rhwydwaith
    Buildroot: Creu firmware traws-lwyfan gyda gweinydd zabbix
  • newid cyfrinair defnyddiwr
  • dewis parth amser
  • gwneud copi wrth gefn / adfer / ailosod ffatri
  • y gallu i gysylltu gyriant allanol
  • Diweddariad system
    Buildroot: Creu firmware traws-lwyfan gyda gweinydd zabbix

Mae mewngofnodi i'r rhyngwyneb gwe wedi'i ddiogelu gan gyfrinair. Tudalen gychwyn - llawlyfr.

Cyfeiriad rhyngwyneb Zabbix: ${ip/dns}/zabbix
Cyfeiriad rhyngwyneb rheoli: ${ip/dns}/manage
Buildroot: Creu firmware traws-lwyfan gyda gweinydd zabbix

Rhedeg yn qemu

qemu-system-x86_64 -smp 4 -m 4026M -enable-kvm -machine q35, accel = kvm -device intel-iommu -cpu gwesteiwr -net nic -net pont,br=bridge0 -device virtio-scsi-pci,id= scsi0 -drive file=allbwn/delweddau/qemu.qcow2,format=qcow2,aio=threads -device virtio-scsi-pci,id=scsi0 -drive file=allbwn/delweddau/external.qcow2,format=qcow2,aio=edau

Bydd y gorchymyn hwn yn cychwyn system gyda 4 cores, 2048 RAM, KVM wedi'i alluogi, cerdyn rhwydwaith ar bont 0 a dwy ddisg: un ar gyfer y system ac un allanol ar gyfer postgresql.

Gellir trosi a rhedeg delweddau yn Virtualbox:

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

Yna mewnforiwch nhw i virtualbox a'u cysylltu trwy sata.

Casgliad

Yn y broses, dechreuais ymddiddori mewn gwneud cynnyrch parod i'w ddefnyddio - gyda rhyngwyneb nad yw'n hardd iawn (nid wyf yn hoffi eu hysgrifennu), ond un sy'n gweithio ac sy'n hawdd ei ffurfweddu.

Dangosodd yr ymgais olaf i osod zabbix-appliance yn KVM fod y cam hwn yn gywir (ar ôl cwblhau'r gosodiad, nid yw'r system yn cychwyn). Efallai fy mod yn gwneud rhywbeth o'i le 😉

Deunyddiau

https://buildroot.org/

Ffynhonnell: hab.com

Ychwanegu sylw