Buildroot: การสร้างเฟิร์มแวร์ข้ามแพลตฟอร์มด้วย zabbix-server

Buildroot: การสร้างเฟิร์มแวร์ข้ามแพลตฟอร์มด้วย zabbix-server

ประวัติปัญหา

ในทางกลับกัน บริษัทขนาดเล็กต้องการการตรวจสอบโครงสร้างพื้นฐานคุณภาพสูง (โดยเฉพาะอย่างยิ่งในแง่ของการจำลองเสมือนที่แพร่หลาย) ในทางกลับกัน การซื้ออุปกรณ์ใหม่เป็นเรื่องยากทางการเงินสำหรับพวกเขา ปัญหาเซิร์ฟเวอร์/ฮาร์ดแวร์ก็เป็นเรื่องปกติเช่นกัน โดยมักจะมีเซิร์ฟเวอร์แบบทาวเวอร์ 1-3 เครื่องถัดจากเวิร์กสเตชันของผู้ใช้หรือในช่อง/ตู้เสื้อผ้าขนาดเล็ก

การใช้ชุดประกอบสำเร็จรูป (การกระจาย) ง่ายกว่าซึ่งคุณเพียงแค่ต้องอัปโหลดไปยังการ์ด microSD และใส่ลงในคอมพิวเตอร์บอร์ดเดี่ยวทั่วไป (ตระกูลบีเกิ้ลโบน, ราสเบอร์รี่ pi และตระกูลส้มปี่, ตระกูล asus tinker) นอกจากนี้อุปกรณ์ดังกล่าวยังมีราคาไม่แพงและสามารถติดตั้งได้ทุกที่

คำแถลงปัญหา

ในหลาย ๆ ด้าน โครงการนี้ได้รับการพัฒนาให้เป็นงานห้องปฏิบัติการชนิดหนึ่งที่มีความเป็นไปได้ที่จะนำผลลัพธ์ไปใช้

Zabbix ได้รับเลือกให้เป็นระบบตรวจสอบเนื่องจากเป็นระบบที่มีประสิทธิภาพ ฟรี และมีเอกสารครบถ้วน

ปัญหาเกี่ยวกับแพลตฟอร์มฮาร์ดแวร์กลายเป็นเรื่องรุนแรง การวางเครื่องแยกต่างหากภายใต้การตรวจสอบก็ไม่ใช่วิธีแก้ปัญหาที่ดีนัก - ไม่ว่าจะซื้ออุปกรณ์ใหม่มีราคาแพงหรือมองหาอุปกรณ์เก่า + ในบริษัทขนาดเล็กที่มีปัญหาบ่อยครั้งกับเซิร์ฟเวอร์/ ฮาร์ดแวร์.

การใช้ระบบบิลด์ buildroot ช่วยให้คุณสร้างโซลูชันพิเศษที่สามารถดำเนินการโดยบุคลากรที่มีความรู้ระบบปฏิบัติการ Linux เพียงเล็กน้อย ระบบนี้เป็นมิตรกับผู้เริ่มต้น แต่ในขณะเดียวกันก็ให้โอกาสในการปรับแต่งมากมายในมือของนักพัฒนาที่มีประสบการณ์ เหมาะอย่างยิ่งสำหรับการแก้ปัญหาการตรวจสอบโครงสร้างพื้นฐานด้านไอทีที่ราคาไม่แพง แต่ใช้งานได้เต็มรูปแบบ โดยมีข้อกำหนดขั้นต่ำสำหรับการฝึกอบรมบุคลากรที่ปฏิบัติงาน

ขั้นตอนการแก้ปัญหา

มีการตัดสินใจที่จะเริ่มสร้างเฟิร์มแวร์สำหรับ x86_64 เพื่อให้ทำงานใน qemu เนื่องจากนี่เป็นวิธีแก้ปัญหาที่สะดวกและรวดเร็วสำหรับการดีบัก จากนั้นย้ายไปยังคอมพิวเตอร์บอร์ดเดี่ยวแบบแขน (ฉันชอบบอร์ด asus tinker)

buildroot ถูกเลือกเป็นระบบบิลด์ ในตอนแรก ไม่มีแพ็คเกจ zabbix ดังนั้นจึงต้องย้ายพอร์ต มีปัญหากับภาษารัสเซีย ซึ่งแก้ไขได้โดยใช้แพตช์ที่เหมาะสม (หมายเหตุ: ใน buildroot เวอร์ชันใหม่กว่า แพตช์เหล่านี้ไม่จำเป็นอีกต่อไป)

การย้ายแพ็คเกจ zabbix นั้นจะมีการอธิบายไว้ในบทความแยกต่างหาก

เนื่องจากทุกอย่างควรทำงานเป็นเฟิร์มแวร์ (อิมเมจระบบที่ไม่สามารถเปลี่ยนแปลงได้ + ไฟล์การกำหนดค่า/ฐานข้อมูลที่กู้คืนได้) จึงจำเป็นต้องเขียนเป้าหมาย systemd บริการและตัวจับเวลาของคุณเอง (เป้าหมาย บริการ ตัวจับเวลา)

มีการตัดสินใจที่จะแบ่งสื่อออกเป็น 2 ส่วน - ส่วนที่มีไฟล์ระบบและส่วนที่มีการกำหนดค่าที่เปลี่ยนแปลงได้และไฟล์ฐานข้อมูล zabbix

การแก้ปัญหาที่เกี่ยวข้องกับฐานข้อมูลกลายเป็นเรื่องยากขึ้นเล็กน้อย ฉันไม่ต้องการวางไว้บนสื่อโดยตรง ในเวลาเดียวกัน ขนาดของฐานข้อมูลสามารถเข้าถึงขนาดที่เกินขนาดของ ramdisk ที่เป็นไปได้ ดังนั้นจึงเลือกวิธีแก้ปัญหาการประนีประนอม: ฐานข้อมูลตั้งอยู่บนพาร์ติชันที่สองของการ์ด SD (การ์ด SLC สมัยใหม่มีรอบการเขียนสูงสุด 30 รอบ) แต่มีการตั้งค่าที่อนุญาตให้ใช้สื่อภายนอก (เช่น usb- ฮาร์ดดิสก์)

การตรวจสอบอุณหภูมิดำเนินการผ่านอุปกรณ์ RODOS-5 แน่นอนว่าคุณสามารถใช้ Dallas 1820 ได้โดยตรง แต่การเสียบ USB จะเร็วกว่าและง่ายกว่า

เลือก grub86 เป็น bootloader สำหรับ x64_2 จำเป็นต้องเขียนการกำหนดค่าขั้นต่ำเพื่อเปิดใช้งาน

หลังจากการดีบักบน qemu แล้ว มันก็ถูกย้ายไปยัง asus tinker board ในตอนแรกโครงสร้างของโอเวอร์เลย์ของฉันตั้งใจให้เป็นแบบข้ามแพลตฟอร์ม โดยจัดสรรการกำหนดค่าเฉพาะสำหรับแต่ละบอร์ด (defconfig ของบอร์ด, bootloader, การสร้างอิมเมจด้วยพาร์ติชันระบบ) และความสม่ำเสมอสูงสุดในการปรับแต่งระบบไฟล์/การสร้างอิมเมจด้วยข้อมูล เนื่องจากการเตรียมการดังกล่าว การขนย้ายจึงดำเนินไปอย่างรวดเร็ว

ขอแนะนำอย่างยิ่งให้อ่านบทความเบื้องต้น:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

วิธีการประกอบ

โครงการถูกเก็บไว้บน GitHub
หลังจากการโคลนที่เก็บ จะได้โครงสร้างไฟล์ต่อไปนี้:

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

buildroot-2019.05.tar.gz - ทำความสะอาดไฟล์ buildroot
การซ้อนทับคือไดเร็กทอรีของฉันที่มีแผนผังภายนอก นี่คือที่เก็บทุกสิ่งที่คุณต้องการในการสร้างเฟิร์มแวร์โดยใช้ buildroot
README.md - คำอธิบายโครงการและคู่มือเป็นภาษาอังกฤษ
run_me.sh เป็นสคริปต์ที่เตรียมระบบบิลด์ ขยาย buildroot จากไฟล์เก็บถาวร แนบโอเวอร์เลย์เข้าไป (ผ่านกลไกภายนอกต้นไม้) และอนุญาตให้คุณเลือกบอร์ดเป้าหมายสำหรับการประกอบ

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

หลังจากนี้ เพียงไปที่ไดเร็กทอรี buildroot-2019.05 และรันคำสั่ง make
เมื่อการสร้างเสร็จสมบูรณ์ ผลลัพธ์ของการสร้างทั้งหมดจะอยู่ในไดเร็กทอรี 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

ไฟล์ที่จำเป็น:

  • sdcard.img - ภาพสื่อสำหรับบันทึกลงในการ์ด SD (ผ่าน dd หรือ rufus ภายใต้ wibdows)
  • qemu.qcow2 - อิมเมจสื่อที่จะทำงานใน qemu
  • external.qcow2 - อิมเมจสื่อภายนอกสำหรับฐานข้อมูล
  • monitor-0.9-beta.tar.gz - เก็บถาวรสำหรับการอัพเดตผ่านทางเว็บอินเตอร์เฟส

การสร้างคำแนะนำ

การเขียนคำแนะนำเดียวกันหลายครั้งไม่คุ้มค่า และสิ่งที่สมเหตุสมผลที่สุดคือการเขียนครั้งเดียวในมาร์กดาวน์จากนั้นแปลงเป็น PDF เพื่อดาวน์โหลดและ html สำหรับเว็บอินเตอร์เฟส สิ่งนี้เป็นไปได้ด้วยแพ็คเกจ pandoc

ในเวลาเดียวกัน ไฟล์ทั้งหมดเหล่านี้จำเป็นต้องถูกสร้างขึ้นก่อนที่จะประกอบอิมเมจระบบ สคริปต์หลัง build เหล่านั้นไม่มีประโยชน์แล้ว ดังนั้นการสร้างจึงทำในรูปแบบของแพ็คเกจคู่มือ คุณสามารถดูโอเวอร์เลย์/แพ็คเกจ/คู่มือได้

ไฟล์ manuals.mk (ซึ่งทำงานได้ทั้งหมด)

################################################################################
#
# 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 กำลังเคลื่อนตัวไปสู่ ​​systemd อย่างจริงจัง และฉันก็ต้องทำเช่นกัน
หนึ่งในนวัตกรรมที่น่าพึงพอใจคือการมีตัวจับเวลา โดยทั่วไปมีการเขียนบทความแยกต่างหากเกี่ยวกับพวกเขา (และไม่เพียงเกี่ยวกับพวกเขา) แต่ฉันจะบอกคุณสั้น ๆ

มีการกระทำที่ต้องทำเป็นระยะ ฉันจำเป็นต้องเรียกใช้ logrotate เพื่อล้างบันทึก lighttpd และ php-fpm สิ่งปกติคือการเขียนคำสั่งใน cron แต่ฉันตัดสินใจใช้ตัวจับเวลาแบบ monotonic systemd ดังนั้น logrotate จึงทำงานในช่วงเวลาที่เข้มงวด

แน่นอนว่าคุณสามารถสร้างตัวจับเวลาที่ทำงานในวันที่กำหนดได้ แต่ฉันไม่ต้องการสิ่งนี้
ตัวอย่างตัวจับเวลา:

  • ไฟล์ตัวจับเวลา
    
    [Unit]
    Description=RODOS temp daemon timer

[ตัวจับเวลา] OnBootSec=1 นาที
OnUnitActiveSec=1 นาที

[ติดตั้ง] WantedBy=timers.target

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

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

บอร์ดที่รองรับ

Asus tinker board เป็นกระดานหลักที่ทุกอย่างควรใช้งานได้ คัดสรรมาว่าราคาไม่แพงและทรงพลังมาก

Beaglebone black เป็นบอร์ดแรกที่ทดสอบการทำงาน (ระหว่างการเลือกบอร์ดที่ทรงพลังกว่า)

Qemu x86_64 - ใช้สำหรับการดีบักการพัฒนา

วิธีการทำงาน

เมื่อเริ่มต้นระบบ การคืนค่าการตั้งค่าสองขั้นตอนจะเกิดขึ้น:

  • เรียกใช้สคริปต์ settings_restore (ผ่านบริการ) คืนค่าการตั้งค่าระบบพื้นฐาน - โซนเวลา สถานที่ การตั้งค่าเครือข่าย ฯลฯ
  • เรียกใช้สคริปต์เตรียมการ (ผ่านบริการ) - ที่นี่ zabbix และฐานข้อมูลถูกจัดเตรียมไว้ IP จะถูกส่งออกไปยังคอนโซล

เมื่อคุณเริ่มใช้งานครั้งแรก ขนาดของพาร์ติชันที่สองของการ์ด SD จะถูกกำหนด หากยังมีพื้นที่ที่ไม่ได้จัดสรร สื่อจะถูกแบ่งพาร์ติชันใหม่ และส่วนข้อมูลจะใช้พื้นที่ว่างทั้งหมด ทำเช่นนี้เพื่อลดขนาดของอิมเมจการติดตั้ง (sdcard.img) นอกจากนี้ ไดเร็กทอรีการทำงานของ postgresql จะถูกสร้างขึ้น ณ จุดนี้ นั่นคือเหตุผลว่าทำไมการเปิดตัวครั้งแรกกับผู้ให้บริการรายใหม่จึงนานกว่าครั้งถัดไป

เมื่อเชื่อมต่อไดรฟ์ภายนอก ในขณะที่เริ่มต้นระบบจะค้นหาไดรฟ์ฟรีและจัดรูปแบบเป็น ext4 ด้วยป้ายกำกับภายนอก

ความสนใจ! เมื่อเชื่อมต่อไดรฟ์ภายนอก (รวมถึงการถอดหรือเปลี่ยนไดรฟ์) คุณต้องสำรองข้อมูลและกู้คืนการตั้งค่า!

ใช้สำหรับการตรวจสอบอุณหภูมิอุปกรณ์ RODOS 5 ผู้ผลิตให้ซอร์สโค้ดของยูทิลิตี้สำหรับการทำงานกับอุปกรณ์ เมื่อระบบเปิดอยู่ ตัวจับเวลา rodos จะเริ่มทำงาน ซึ่งจะเรียกใช้ยูทิลิตี้นี้นาทีละครั้ง อุณหภูมิปัจจุบันจะถูกเขียนลงในไฟล์ /tmp/rodos_current_temp หลังจากนั้น zabbix จะสามารถตรวจสอบไฟล์นี้เป็นเซ็นเซอร์ได้

สื่อจัดเก็บข้อมูลการกำหนดค่าถูกเมาท์ในไดเร็กทอรี /data

เมื่อเริ่มต้นระบบและเตรียมการทำงาน ข้อความต่อไปนี้จะปรากฏขึ้นในคอนโซล:

System starting, please wait

หลังจากเสร็จสิ้นงานเตรียมการจะเปลี่ยนเป็นการแสดงที่อยู่ IP:

current ip 192.168.1.32
Ready to work

การตั้งค่า zabbix เพื่อตรวจสอบอุณหภูมิ

หากต้องการติดตามอุณหภูมิ เพียง 2 ขั้นตอน:

  • เชื่อมต่ออุปกรณ์ RODOS เข้ากับพอร์ต USB
  • สร้างรายการข้อมูลใน zabbix

เปิดเว็บอินเตอร์เฟส zabbix:

  • เปิดส่วนการกำหนดค่า → โฮสต์
  • คลิกที่รายการในบรรทัดของเซิร์ฟเวอร์ zabbix ของเรา
  • คลิกที่สร้างรายการ

Buildroot: การสร้างเฟิร์มแวร์ข้ามแพลตฟอร์มด้วย zabbix-server

ป้อนข้อมูลต่อไปนี้:

  • ชื่อ - ขึ้นอยู่กับดุลยพินิจของคุณ (เช่น serverRoomTemp )
  • ประเภท - ตัวแทน zabbix
  • คีย์ - โรดอส
  • ประเภท-ตัวเลข
  • หน่วย - ค
  • ระยะเวลาการเก็บประวัติ — ระยะเวลาการเก็บประวัติ เหลืออีก 10 วัน
  • ระยะเวลาการจัดเก็บเทรนด์—ระยะเวลาการจัดเก็บสำหรับการเปลี่ยนแปลงของการเปลี่ยนแปลง เหลืออีก 30 วัน
  • แอปพลิเคชั่นใหม่ - อุณหภูมิห้องเซิร์ฟเวอร์

และกดปุ่มเพิ่ม
Buildroot: การสร้างเฟิร์มแวร์ข้ามแพลตฟอร์มด้วย zabbix-server

จัดการการตั้งค่าผ่านทางเว็บอินเตอร์เฟส

เว็บอินเตอร์เฟสเขียนด้วย PHP มีหน้าที่หลัก:

  • ดูสถานะอุปกรณ์
  • การเปลี่ยนการตั้งค่าเครือข่าย
    Buildroot: การสร้างเฟิร์มแวร์ข้ามแพลตฟอร์มด้วย zabbix-server
  • การเปลี่ยนรหัสผ่านผู้ใช้
  • การเลือกโซนเวลา
  • สำรอง/กู้คืน/รีเซ็ตเป็นค่าจากโรงงาน
  • ความสามารถในการเชื่อมต่อไดรฟ์ภายนอก
  • การอัปเดตระบบ
    Buildroot: การสร้างเฟิร์มแวร์ข้ามแพลตฟอร์มด้วย zabbix-server

การเข้าสู่ระบบเว็บอินเตอร์เฟสมีการป้องกันด้วยรหัสผ่าน หน้าเริ่มต้น - คู่มือ

ที่อยู่อินเทอร์เฟซของ Zabbix: ${ip/dns}/zabbix
ที่อยู่อินเทอร์เฟซการจัดการ: ${ip/dns}/manage
Buildroot: การสร้างเฟิร์มแวร์ข้ามแพลตฟอร์มด้วย zabbix-server

กำลังวิ่งอยู่ในคิวมู

qemu-system-x86_64 -smp 4 -m 4026M -enable-kvm -machine q35,accel=kvm -อุปกรณ์ intel-iommu -cpu โฮสต์ -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

คำสั่งนี้จะเริ่มต้นระบบด้วย 4 คอร์, 2048 RAM, เปิดใช้งาน KVM, การ์ดเครือข่ายบนบริดจ์ 0 และดิสก์สองตัว: หนึ่งอันสำหรับระบบและอีกอันหนึ่งสำหรับภายนอกสำหรับ postgresql

รูปภาพสามารถแปลงและรันใน Virtualbox:

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

จากนั้นนำเข้าไปยัง virtualbox และเชื่อมต่อผ่าน sata

ข้อสรุป

ในกระบวนการนี้ ฉันเริ่มสนใจที่จะสร้างผลิตภัณฑ์ที่พร้อมใช้งานซึ่งมีอินเทอร์เฟซที่ไม่สวยงามมากนัก (ฉันไม่ชอบเขียนเลย) แต่เป็นผลิตภัณฑ์ที่ใช้งานได้และกำหนดค่าได้ง่าย

ความพยายามครั้งสุดท้ายในการติดตั้ง zabbix-appliance ใน KVM แสดงให้เห็นว่าขั้นตอนนี้ถูกต้อง (หลังจากการติดตั้งเสร็จสิ้น ระบบจะไม่เริ่มทำงาน) บางทีฉันอาจจะทำอะไรผิด😉

วัสดุ

https://buildroot.org/

ที่มา: will.com

เพิ่มความคิดเห็น