إعداد أدوات إدارة الشبكة (NUT) من نقطة الصفر لإدارة UPS متصلة محليًا

تكوين Network UPS Tools على Linux باستخدام Eaton 5E650iUSB UPS كمثال


وصف


تعد خدمة Linux NUT (Network UPS Tools) مجموعة من برامج المراقبة والتحكم لمختلف وحدات تزويد الطاقة غير المنقطعة (المشار إليها فيما يلي بـ UPS). يمكن الحصول على قائمة كاملة من النماذج المدعومة من خلال الاطلاع على قائمة برامج التشغيل في ملف /usr/share/nut/driver.list .


يصف الدليل كيفية تعطيل جهاز الكمبيوتر من قبل وكيل NUT في حالة فقدان الجهد في الشبكة باستخدام مثال Eaton 5E 650iUSB UPS على توزيعات تشبه Ubuntu. للاستخدام تحت توزيعات أخرى ، استخدم مدير الحزم الخاص بالتوزيع أو التجميع من أكواد المصدر. يمكن تنزيل أحدث إصدار من Network UPS Tools على GitHub من رابط الارتباط .


تثبيت البندق


تحتاج أولاً إلى تثبيت NUT:


root@hostname~# apt install nut 

عمل نسخة احتياطية من المجلد مع ملفات التكوين NUT:


  root@hostname~# cp -r /etc/nut /etc/nut.orig 

أضف الآن توجيهًا يشير إلى أن UPS متصلة بهذا الكمبيوتر وليس بالجهاز البعيد:


  root@hostname~# echo "MODE=standalone" > /etc/nut/nut.conf 

الآن قم بتوصيل UPS بالكمبيوتر وشاهد إخراج الأمر lsusb :


  root@hostname~# lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse Bus 001 Device 003: ID 1a2c:2124 China Resource Semico Co., Ltd Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS 

نحن نبحث عن ما إذا كان يتم دعم UPS بواسطة خدمة NUT. يمكنك إما مشاهدته يدويًا أو عرض خطوط تحمل الاسم التجاري لـ UPS ، على سبيل المثال:


  root@hostname~# grep Eaton /usr/share/nut/driver.list ... "Eaton" "ups" "5" "5E650iUSB" "USB port" "usbhid-ups" ... 

الآن بعد أن قررنا برنامج التشغيل ، يمكنك تكوين NUT.


حماية ملف التكوين


يجب تعيين الأذونات الصحيحة والمالكين لملفات التكوين NUT


  root@hostname~# chown root:nut /etc/nut/* root@hostname~# chmod 640 /etc/nut/* 

إعداد NUT


ضبط السائق وطريقة الاتصال ووقت الاغلاق


أضف الأسطر إلى نهاية ملف /etc/nut/ups.conf أو قم بإنشاء سطر جديد بالمحتويات التالية:


  root@hostname~# nano /etc/nut/ups.conf #    NUT.         [eaton] #   driver = usbhid-ups #  .           port = auto #        offdelay = 90 #          ondelay = 5 #   desc = "Eaton 5E 650iUSB" 

تكوين الوصول إلى مجموعة نظام NUT إلى UPS عبر USB


لكي يتمكن NUT من الوصول إلى واجهة USB الخاصة بـ UPS ، يلزمك كتابة قاعدة وصول لـ udev .


udev هو نظام إدارة جهاز Linux. بفضل udev ، توجد الأجهزة المتصلة حاليًا فقط في مجلد / dev .


قم بتشغيل الأمر


  root@hostname~# lsusb 

وابحث عن الخط المقابل لـ UPS. في مثالنا ، هذا


 Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS 

حيث يذهب idVendor بعد id: idProduct ( 0463: ffff )


الآن قم بإنشاء ملف قاعدة لـ udev :


  root@hostname~# /etc/udev/rules.d/90-nut-ups.rules # Eaton 5E650iUSB ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0463", ATTR{idProduct}=="ffff", MODE="0660", GROUP="nut" 

بعد إنشاء القاعدة ، يجب إعادة تشغيل خدمة udev :


  root@hostname~# service udev restart 

بعد ذلك ، قم بفصل كبل USB وإعادة توصيله من UPS. بعد ذلك ، قم بتشغيل الأمر للتحقق من صحة قاعدة udev :


 root@hostname~# upsdrvctl start Network UPS Tools - UPS driver controller 2.7.4 Network UPS Tools - Generic HID driver 0.41 (2.7.4) USB communication driver 0.33 Using subdriver: MGE HID 1.39 

إذا كان الإخراج هو نفسه تقريبا ، ثم يتم تكوين كل شيء بشكل صحيح.


تكوين عناوين ومنافذ NUT للاستماع إلى اتصالات NUT


أضف الأسطر في نهاية ملف /etc/nut/upsd.conf أو قم بإنشاء سطر جديد بالمحتويات التالية:


  root@hostname~# nano /etc/nut/upsd.conf #  Loopback    3493 LISTEN 127.0.0.1 3493 

ضع في اعتبارك أنه يجب كتابة LISTEN بحروف كبيرة ، وإلا فلن يعمل شيء.


تكوين ملف تعريف المستخدم للوصول إلى NUT


ننشئ مستخدم upmonitor دون حق تسجيل الدخول والمجلد الرئيسي ، مع UID أقل من 1000 ، بحيث يعتبر بمثابة خدمة وليس على شاشة تسجيل دخول المستخدم ، ومع GID من مجموعة الجوز .


تعرف على GID لمجموعة الجوز :


  root@hostname~# cat /etc/group | grep nut:x: nut:x:134: 

الآن نلتقط UID للمستخدم. إما أن نختار برنامجًا لا يكاد يستخدمه أي برنامج ، على سبيل المثال ، 339 ، أو ننفذ:


 root@hostname~# cat /etc/passwd | grep [  100  1000] 

وإذا لم يتم عرض أي شيء ، فسيكون معرف المستخدم مجانيًا ويمكن استخدامه لإنشاء مستخدم upmonitor :


 root@hostname~# useradd -d /dev/null -s /usr/sbin/nologin -u 339 -g 134 -p UPSPASS upsmonitor 

أضف الآن هذا المستخدم إلى ملف تعريف المستخدم NUT /etc/nut/upsd.users :


 root@hostname~# nano /etc/nut/upsd.users #   [upsmonitor] #   password = UPSPASS #      ,     .. actions = SET #          upscmd instcmds = ALL #       NUT upsmon master 

إعدادات مراقبة الجوز


أضف الأسطر إلى نهاية ملف /etc/nut/upsmon.conf أو أنشئ سطرًا جديدًا بالمحتويات التالية:


 root@hostname~# nano /etc/nut/upsmon.conf #   eaton  localhost     upsmonitor MONITOR eaton@localhost 1 upsmonitor UPSPASS master #    MINSUPPLIES 1 #    NUT,      NOTIFYCMD /sbin/upssched #           POLLFREQ 5 #           POLLFREQALERT 5 #      NUT    HOSTSYNC 15 #  NUT                "" DEADTIME 15 #  ,  ,           POWERDOWNFLAG /etc/killpower #          NOTIFYMSG ONLINE "UPS %s on line power" #           NOTIFYMSG ONBATT "UPS %s on battery" #             NOTIFYMSG LOWBATT "UPS %s battery is low" #          NOTIFYMSG FSD "UPS %s: forced shutdown in progress" #           NOTIFYMSG COMMOK "Communications with UPS %s established" #           , ,    USB  NOTIFYMSG COMMBAD "Communications with UPS %s lost" #                        NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding" #            NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced" #            NOTIFYMSG NOCOMM "UPS %s is unavailable" #            NUT upsmon NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible" #     ,   NOTIFYFLAG. # SYSLOG        ,   /var/log/syslog # WALL          # EXEC   ,    /etc/nut/upsshed.conf,    NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC NOTIFYFLAG FSD SYSLOG+WALL+EXEC NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC #           (12 ) RBWARNTIME 43200 #  NUT      ,    NOCOMM  300  NOCOMMWARNTIME 300 #       FINALDELAY 5 

اختبار الاتصال


دعونا نرى ما يمكن أن تقدمه UPS عن حالتها:


  root@hostname~# upsc eaton@localhost battery.charge: 100 battery.runtime: 1964 battery.type: PbAc device.mfr: EATON device.model: 5E 650i device.type: ups driver.name: usbhid-ups driver.parameter.offdelay: 60 driver.parameter.pollfreq: 30 driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.parameter.synchronous: no driver.version: 2.7.4 driver.version.data: MGE HID 1.39 driver.version.internal: 0.41 input.voltage: 228.0 outlet.1.status: on outlet.desc: Main Outlet outlet.id: 1 outlet.switchable: no output.frequency: 50.0 output.frequency.nominal: 50 output.voltage: 226.0 output.voltage.nominal: 230 ups.beeper.status: enabled ups.delay.shutdown: 60 ups.firmware: 03.08.0018 ups.load: 18 ups.mfr: EATON ups.model: 5E 650i ups.power.nominal: 650 ups.productid: ffff ups.start.battery: yes ups.status: OL ups.timer.shutdown: -1 ups.vendorid: 0463 

جميع الحقول أكثر أو أقل وضوحًا أو تم تعريفها من قبلنا في ملفات التكوين مسبقًا. يتم عرض رموز حالة UPS في الحقل ups.status: ويمكن أن تأخذ القيم:


  • OL - يتم تشغيل النظام بواسطة شبكة ؛
  • OB - يعمل النظام على طاقة البطارية ؛
  • LB - يعمل النظام على بطارية مفرغة.

UPS الأوامر الداخلية والمتغيرات


يمكن لـ UPS إصدار الأوامر مباشرة من وحدة التحكم باستخدام الأمر upscmd . يمكن الحصول على قائمة بالأوامر المتاحة عن طريق تشغيل الأمر:


  root@hostname~# upscmd -l eaton@localhost Instant commands supported on UPS [eaton]: beeper.disable - Disable the UPS beeper beeper.enable - Enable the UPS beeper beeper.mute - Temporarily mute the UPS beeper beeper.off - Obsolete (use beeper.disable or beeper.mute) beeper.on - Obsolete (use beeper.enable) load.off - Turn off the load immediately load.off.delay - Turn off the load with a delay (seconds) shutdown.stop - Stop a shutdown in progress 

الصافرة. * تتحكم الإعدادات في إنذار UPS في حالة فقد الجهد ، يقوم load.off بإيقاف تشغيل جهاز الكمبيوتر فورًا ، ثم تأخير.تحميل تأخير في ثوانٍ قبل إيقاف تشغيل الكمبيوتر ، shutdown.stop - أمر لمقاطعة عملية إيقاف تشغيل جهاز الكمبيوتر.


في بعض UPS ، هناك خيارات أخرى ، على سبيل المثال ، اختبار البطارية أو إيقاف التشغيل . في هذه الحالة ، سيتم إيقاف تشغيل الكمبيوتر ، لكن UPS سترسل إشارة بدء تشغيل الكمبيوتر بمجرد عودة التيار الكهربائي. لكي يعمل هذا ، في BIOS الخاص بجهاز الكمبيوتر ، يجب تمكين الوظيفة المقابلة ، التي توجد عادة في مكان ما في منطقة إعدادات الطاقة.


على سبيل المثال ، قم بإيقاف تشغيل صرير UPS عند انقطاع التيار الكهربائي:


  root@hostname~# upscmd -u upsmonitor -p UPSPASS eaton@localhost beeper.disable 

لتمكين ، استبدل beeper.disable بـ beeper.enable .


تكوين جدولة المهام NUT


أضف الأسطر في نهاية ملف /etc/nut/upssched.conf أو أنشئ سطرًا جديدًا بالمحتويات التالية:


  root@hostname~# nano /etc/nut/upssched.conf # ,       CMDSCRIPT /etc/nut/cmd.sh PIPEFN /tmp/upspipe LOCKFN /tmp/upslock #     case    /etc/nut/cmd.sh AT COMMBAD * EXECUTE commbad AT COMMOK * EXECUTE commok AT NOCOMM * EXECUTE nocomm #      .         AT ONBATT * EXECUTE powerout #  ,      shutdownnow  cmd.sh AT ONBATT * START-TIMER shutdownnow 90 AT LOWBATT * EXECUTE shutdowncritical AT ONLINE * CANCEL-TIMER shutdownnow AT ONLINE * EXECUTE powerup 

الآن نحن بحاجة إلى البرنامج النصي /etc/nut/cmd.sh . قم بإنشائه ، اضبط الحقوق واملأها:


  root@hostname~# touch /etc/nut/cmd.sh root@hostname~# chmod 666 /etc/nut/cmd.sh root@hostname~# nano /etc/nut/cmd.sh #!/bin/sh # logger     syslog case $1 in commbad) logger "UPS communications failure" ;; commok) logger "UPS communications restored" ;; nocomm) logger "UPS communications cannot be established" ;; powerout) #         logger "UPS on battery. Shutdown in 90 seconds...." upscmd -u upsmonitor -p UPSPASS eaton@localhost shutdown.return ;; shutdownnow) logger "UPS has been on battery for 120 seconds. Starting orderly shutdown" #     upsmon -c fsd ;; shutdowncritical) logger "UPS battery level CRITICAL. Shutting down NOW!!!!" #     upsmon -c fsd ;; powerup) logger "UPS on line. Shutdown aborted." #     upscmd -u upsmon -p pass mustek@localhost shutdown.stop ;; *) logger "Unrecognized command: $1" ;; esac 

استنتاج


هذا يكمل الإعداد. يمكنك اختبار بتمزيق UPS خارج المقبس.

Source: https://habr.com/ru/post/ar443736/


All Articles