Buildroot: Membuat firmware lintas platform dengan zabbix-server

Buildroot: Membuat firmware lintas platform dengan zabbix-server

Riwayat masalah

Perusahaan kecil, di satu sisi, memerlukan pemantauan infrastruktur berkualitas tinggi (terutama mengingat meluasnya virtualisasi), di sisi lain, sulit secara finansial bagi mereka untuk membeli peralatan baru. Masalah server/perangkat keras juga sering terjadi: sering kali terdapat 1-3 server menara di sebelah stasiun kerja pengguna atau di ceruk/lemari kecil.

Lebih mudah menggunakan perakitan (distribusi) yang sudah jadi, yang hanya perlu Anda unggah ke kartu microSD dan masukkan ke komputer papan tunggal umum (keluarga beaglebone, raspberry pi dan orange pi, asus tinker board). Selain itu, peralatan tersebut tidak mahal dan dapat dipasang di mana saja.

Pernyataan masalah

Dalam banyak hal, proyek ini berkembang sebagai semacam pekerjaan laboratorium dengan kemungkinan menerapkan hasilnya.

Zabbix dipilih sebagai sistem pemantauan karena merupakan sistem yang kuat, gratis, dan terdokumentasi dengan baik.

Masalah dengan platform perangkat keras telah menjadi akut. Memantau mesin terpisah juga bukan solusi yang baik - baik mahal untuk membeli peralatan baru, atau mencari peralatan lama + di perusahaan kecil sering terjadi masalah dengan server/ perangkat keras.

Menggunakan sistem buildroot build memungkinkan Anda membuat solusi khusus yang dapat dioperasikan oleh personel dengan pengetahuan minimal tentang sistem operasi Linux. Sistem ini ramah untuk pemula, namun pada saat yang sama memberikan peluang penyesuaian yang luas di tangan pengembang berpengalaman. Ini sempurna untuk memecahkan masalah pemantauan infrastruktur TI yang murah namun berfungsi penuh, dengan persyaratan minimal untuk pelatihan personel yang mengoperasikannya.

Langkah-langkah solusi

Diputuskan untuk awalnya membuat firmware untuk x86_64 untuk dijalankan di qemu, karena ini adalah solusi yang mudah dan cepat untuk debugging. Kemudian porting ke komputer papan tunggal (saya suka papan tinker asus).

buildroot dipilih sebagai sistem build. Awalnya, paket zabbix tidak ada di dalamnya, jadi harus di-porting. Ada masalah dengan lokal Rusia, yang diselesaikan dengan menerapkan patch yang sesuai (catatan: di versi buildroot yang lebih baru, patch ini tidak lagi diperlukan).

Porting paket zabbix sendiri akan dijelaskan pada artikel tersendiri.

Karena semuanya harus berfungsi sebagai firmware (gambar sistem yang tidak dapat diubah + file konfigurasi/database yang dapat dipulihkan), maka perlu untuk menulis target, layanan, dan pengatur waktu sistem Anda sendiri (target, layanan, pengatur waktu).

Diputuskan untuk membagi media menjadi 2 bagian - bagian dengan file sistem dan bagian dengan konfigurasi yang dapat diubah dan file database zabbix.

Memecahkan masalah terkait database ternyata sedikit lebih sulit. Saya tidak ingin menempatkannya langsung di media. Pada saat yang sama, ukuran database bisa mencapai ukuran yang melebihi ukuran ramdisk yang mungkin. Oleh karena itu, solusi kompromi dipilih: database terletak di bagian kedua kartu SD (kartu SLC modern memiliki hingga 30 siklus tulis), tetapi terdapat pengaturan yang memungkinkan penggunaan media eksternal (misalnya, usb- hdd).

Pemantauan suhu diterapkan melalui perangkat RODOS-5. Tentu saja, Anda dapat menggunakan Dallas 1820 secara langsung, tetapi lebih cepat dan mudah jika dihubungkan dengan USB.

grub86 dipilih sebagai bootloader untuk x64_2. Penting untuk menulis konfigurasi minimal untuk meluncurkannya.

Setelah melakukan debug pada qemu, itu porting ke asus tinker board. Struktur overlay saya pada awalnya dimaksudkan untuk lintas platform - mengalokasikan konfigurasi khusus untuk setiap papan (papan defconfig, bootloader, menghasilkan gambar dengan partisi sistem) dan keseragaman maksimum dalam menyesuaikan sistem file/membuat gambar dengan data. Karena persiapan seperti itu, porting berjalan cepat.

Sangat disarankan untuk membaca artikel pengantar:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Bagaimana cara merakit

Proyek ini disimpan di github
Setelah mengkloning repositori, struktur file berikut diperoleh:

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

buildroot-2019.05.tar.gz - bersihkan arsip buildroot
overlay adalah direktori saya dengan pohon eksternal. Di sinilah semua yang Anda perlukan untuk membuat firmware menggunakan buildroot disimpan.
README.md - deskripsi proyek dan manual dalam bahasa Inggris.
run_me.sh adalah skrip yang mempersiapkan sistem build. Memperluas buildroot dari arsip, melampirkan overlay ke dalamnya (melalui mekanisme pohon eksternal) dan memungkinkan Anda memilih papan target untuk perakitan

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

Setelah ini, masuk saja ke direktori buildroot-2019.05 dan jalankan perintah make.
Setelah build selesai, semua hasil build akan berada di direktori 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

File yang diperlukan:

  • sdcard.img - gambar media untuk direkam pada kartu SD (melalui dd atau rufus di bawah wibdows).
  • qemu.qcow2 - gambar media untuk dijalankan di qemu.
  • external.qcow2 - gambar media eksternal untuk database
  • monitor-0.9-beta.tar.gz - arsip untuk diperbarui melalui antarmuka web

Generasi Panduan

Tidak ada gunanya menulis instruksi yang sama beberapa kali. Dan yang paling logis adalah menulisnya sekali dalam penurunan harga, lalu mengubahnya menjadi PDF untuk diunduh dan html untuk antarmuka web. Hal ini dimungkinkan berkat paket pandoc.

Pada saat yang sama, semua file ini perlu dibuat sebelum image sistem dirakit; skrip pasca-pembuatan tersebut sudah tidak berguna. Oleh karena itu pembangkitannya dilakukan dalam bentuk paket manual. Anda dapat melihat overlay/paket/manual.

File manuals.mk (yang melakukan semua pekerjaan)

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

Dunia Linux secara aktif berpindah ke systemd, dan saya harus melakukannya juga.
Salah satu inovasi yang menyenangkan adalah hadirnya pengatur waktu. Secara umum, artikel terpisah sedang ditulis tentang mereka (dan bukan hanya tentang mereka), tapi saya akan memberi tahu Anda secara singkat.

Ada tindakan yang harus dilakukan secara berkala. Saya perlu menjalankan logrotate untuk menghapus log lighttpd dan php-fpm. Hal yang biasa adalah menulis perintah dalam cron, tetapi saya memutuskan untuk menggunakan pengatur waktu monotonik systemd. Jadi logrotate berjalan pada interval waktu yang ketat.

Tentu saja, dimungkinkan untuk membuat pengatur waktu yang menyala pada tanggal tertentu, tetapi saya tidak memerlukannya.
Contoh pengatur waktu:

  • File pengatur waktu
    
    [Unit]
    Description=RODOS temp daemon timer

[Pengatur Waktu] OnBootSec=1 menit
OnUnitActiveSec=1 menit

[Instal] WantedBy=timers.target

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

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

Papan yang didukung

Papan tinker Asus adalah papan utama tempat segala sesuatunya harus berfungsi. Dipilih karena murah dan sangat kuat.

Beaglebone black adalah papan pertama yang pengoperasiannya diuji (selama pemilihan papan yang lebih kuat).

Qemu x86_64 - digunakan untuk debugging pengembangan.

Cara kerjanya

Saat startup, pemulihan pengaturan dua tahap terjadi:

  • menjalankan skrip settings_restore (melalui layanan). Ini mengembalikan pengaturan sistem dasar - zona waktu, lokal, pengaturan jaringan, dll.
  • menjalankan skrip persiapan (melalui layanan) - di sini zabbix dan database disiapkan, IP dikeluarkan ke konsol.

Saat pertama kali diluncurkan, ukuran partisi kedua kartu SD ditentukan. Jika masih ada ruang yang belum terisi, media akan dipartisi ulang, dan bagian data akan menggunakan semua ruang kosong. Hal ini dilakukan untuk memperkecil ukuran gambar instalasi (sdcard.img). Selain itu, direktori kerja postgresql dibuat pada saat ini. Itu sebabnya peluncuran pertama dengan operator baru akan lebih lama dibandingkan peluncuran berikutnya.

Saat menghubungkan drive eksternal, pada saat startup ia mencari drive gratis dan memformatnya menjadi ext4 dengan label eksternal.

Perhatian! Saat menghubungkan drive eksternal (serta melepaskan atau menggantinya), Anda perlu membuat cadangan dan memulihkan pengaturan!

Perangkat RODOS 5 digunakan untuk pemantauan suhu. Pabrikan menyediakan kode sumber utilitasnya untuk bekerja dengan perangkat. Ketika sistem dihidupkan, pengatur waktu rodos dimulai, yang menjalankan utilitas ini satu menit sekali. Suhu saat ini ditulis ke file /tmp/rodos_current_temp, setelah itu zabbix dapat memonitor file ini sebagai sensor.

Media penyimpanan konfigurasi dipasang di direktori /data.

Saat memulai sistem dan mempersiapkannya untuk pengoperasian, pesan berikut muncul di konsol:

System starting, please wait

Setelah menyelesaikan pekerjaan persiapan, itu akan berubah menjadi menampilkan alamat IP:

current ip 192.168.1.32
Ready to work

Menyiapkan zabbix untuk pemantauan suhu

Untuk memantau suhu, cukup lakukan 2 langkah:

  • sambungkan perangkat RODOS ke port USB
  • membuat item data di zabbix

Buka antarmuka web zabbix:

  • Buka bagian Konfigurasi → Host
  • Klik pada Item di baris server zabbix kami
  • Klik Buat item

Buildroot: Membuat firmware lintas platform dengan zabbix-server

Masukkan data berikut:

  • nama - sesuai kebijaksanaan Anda (misalnya, serverRoomTemp )
  • Tipe - agen zabbix
  • Kuncinya adalah Rodos
  • Tipe-numerik
  • Satuan - C
  • Periode penyimpanan riwayat — periode penyimpanan riwayat. tersisa 10 hari
  • Periode penyimpanan tren—periode penyimpanan dinamika perubahan. Tersisa 30 hari
  • Aplikasi baru - Suhu Kamar server

Dan tekan tombol TAMBAHKAN.
Buildroot: Membuat firmware lintas platform dengan zabbix-server

Kelola pengaturan melalui antarmuka web

Antarmuka web ditulis dalam PHP. Ada fungsi utama:

  • melihat status perangkat
  • mengubah pengaturan jaringan
    Buildroot: Membuat firmware lintas platform dengan zabbix-server
  • mengubah kata sandi pengguna
  • pemilihan zona waktu
  • pencadangan/pemulihan/reset pabrik
  • kemampuan untuk menghubungkan drive eksternal
  • Pembaruan sistem
    Buildroot: Membuat firmware lintas platform dengan zabbix-server

Login ke antarmuka web dilindungi kata sandi. Halaman awal - manual.

Alamat antarmuka Zabbix: ${ip/dns}/zabbix
Alamat antarmuka manajemen: ${ip/dns}/manage
Buildroot: Membuat firmware lintas platform dengan zabbix-server

Berjalan di 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

Perintah ini akan memulai sistem dengan 4 core, 2048 RAM, KVM diaktifkan, kartu jaringan di bridge0 dan dua disk: satu untuk sistem dan satu eksternal untuk postgresql.

Gambar dapat dikonversi dan dijalankan di Virtualbox:

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

Kemudian impor ke virtualbox dan sambungkan melalui sata.

Kesimpulan

Dalam prosesnya, saya menjadi tertarik untuk membuat produk siap pakai - dengan antarmuka yang tidak terlalu indah (saya tidak suka menulisnya), tetapi berfungsi dan mudah dikonfigurasi.

Upaya terakhir untuk menginstal zabbix-appliance di KVM menunjukkan bahwa langkah ini benar (setelah instalasi selesai, sistem tidak memulai). Mungkin saya melakukan sesuatu yang salah 😉

Bahan

https://buildroot.org/

Sumber: www.habr.com

Tambah komentar