Главная
Главная Руководства FreeBSD › FreeBSD - nut



Автор:

Статья опубликована: 2015-05-30 20:41:10
Последние правки: 2019-09-18 15:57:07

Управляем ИБП. Nut. Устанавливаем, настраиваем, получаем данные. Мне в руки попадались два UPS, APC SmartUPS 700 (com) и Ippon (usb), про них эта статья.

  • Исходные данные
    # uname -sr
    FreeBSD 10.1-RELEASE-p9
    # pkg info | grep nut
    nut-2.7.3                      Network UPS Tools
    

  • Установка
    # cd /usr/ports/sysutils/nut
    # make install clean
    
    Мои настройки:
    [ ] AVAHI     Avahi support
    [ ] BASH      Bash Completion support
    [x] CGI       Web CGI interface
    [ ] DOCS      Build and/or install documentation
    [x] NEON      NEON XML/HTTP support
    [x] OPENSSL   SSL/TLS support via OpenSSL
    [ ] PDU       Powerman PDU support
    [x] SERIAL    SERIAL support
    [x] SNMP      SNMP support
    [x] USB       USB support
    ─────────────────────────────────── IPMI ─────────────────────────────────
    (*) IPMI_OFF  No IPMI support
    ( ) IPMIPSU   Use nut-ipmipsu support (experimental)
    ( ) FREEIPMI  freeipmi support
    

  • /etc/rc.conf
    devfs_enable="YES"
    
    nut_enable="YES"
    nut_flags="-u upsd"
    nut_upsmon_enable="YES"
    nut_upslog_enable="YES"
    nut_upslog_ups="server@127.0.0.1"
    

  • Настройка

    Добавляем в систему пользователя:
    # pw useradd upsd -d /nonexistent -s /usr/sbin/nologin
    
    Даем права на /var/db/nut
    # chown upsd /var/db/nut
    # chmod 0770 /var/db/nut
    

    Конфигурационные файлы хранятся в /usr/local/etc/nut

    Задаем свой UPS в файле /usr/local/etc/nut/ups.conf. Параметры, которые нам нужно задать, весьма просты:

    APC SmartUPS 700
    [server]
     driver = apcsmart
     port = /dev/cuau0
     desc = "Main UPS"
    
    Ippon
    [server]
     driver = blazer_usb
     port = /dev/ugen1.3
     desc = "Main UPS"
    
    Теперь подробнее.
    • driver - драйвер, который используется для работы с UPS. Ищем в /usr/local/etc/nut/drivers.list модель своего UPS, в той же строчке будет название драйвера. Если вашего USP нет, то можно попробовать драйвера от более младшей или старшей модели того же производителя. Если в списке нет вообще ни одной модели UPS как у вас - то придется или купить новый UPS или дождаться когда разработчики добавят вашу модель.
    • port - порт, на котором висит UPS. Мне повезло попробовать и com и usb.
      com - в FreeBSD это порт вида /dev/cuauX.
      usb - /dev/ugenX.X Для определения usb-порта можно использовать утилиту usbconfig:
      # usbconfig
      ugen0.6: <Cypress Semiconductor USB to Serial> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA)
      
      Также, необходимо пользователю upsd дать права чтения/записи в порт (на примере /dev/ugen1.3)
      # chown upsd /dev/ugen1.3
      
      для закрепления прав, добавляем строчки в /etc/devfs.conf
      # ugen1.3
      own             ugen1.3         upsd:wheel
      perm            ugen1.3         660
      
      P.S. (2019-09-02) через пару лет у меня умер APС, временно я поставил тот же самый Ippon USB, который описан в статье, только вместо FreeBSD 10 на сервере уже стояла FreeBSD 11.2 и у меня не вышло дать права на usb по инструкции выше, драйвер писал "No supported devices found.". Потому я в самом начале файла /usr/local/etc/nut/ups.conf написал строчку "user = root":
      user = root
      [server]
       driver = blazer_usb
       port = /dev/ugen1.3
       desc = "Main UPS"
      
      и все проблемы подключения разом решились.
    • desc - даем описание UPS

    /usr/local/etc/nut/upsd.conf - конфигурация демона
    LISTEN 127.0.0.1
    LISTEN IP PORT
    
    указываем директиву на каких IP и порту слушать (порт можно не задавать, тогда будет использоваться 3493)

    /usr/local/etc/nut/upsd.users - список пользователей и что кому можно делать. Настройки там могут быть весьма изощренными, я сделал два пользователя - локального для управления и удаленного - для просмотра значений.
    [user]
     password = USERPASSWORD
    [admin]
     password = ADMINPASSWORD
     upsmon master
    
    user ничего не может менять, admin может всё.

    /usr/local/etc/nut/upsmon.conf - мониторинг и управление. Я скопировал /usr/local/etc/nut/upsmon.conf.sample, в нем раскомментировал все NOTIFYMSF, NOTIFYFLAG, убрал все комментарии, из своего добавил только
    MONITOR server@127.0.0.1 admin ADMINPASSWORD master
    MINSUPPLIES 1
    SHUTDOWNCMD "/sbin/shutdown -p +0"
    
    FINALDELAY 2 - выключить сервер через 2 минуты, как ups выдаст сигнал о низком заряде


  • Запускаем
    # /usr/local/etc/rc.d/nut start
    Network UPS Tools - UPS driver controller 2.7.3
    Network UPS Tools - APC Smart protocol driver 3.1 (2.7.3)
    APC command table version 3.1
    [7] unrecognized
    Starting nut.
    Network UPS Tools upsd 2.7.3
    fopen /var/db/nut/upsd.pid: No such file or directory
    /usr/local/etc/nut/upsd.conf is world readable
    listening on IP port PORT
    listening on 127.0.0.1 port 3493
    Connected to UPS [server]: apcsmart-server
    /usr/local/etc/nut/upsd.users is world readable
    
    # /usr/local/etc/rc.d/nut_upslog start
    Starting nut_upslog.
    Network UPS Tools upslog 2.7.3
    logging status of server@127.0.0.1 to /var/log/ups.log (300s intervals)
    
    # /usr/local/etc/rc.d/nut_upsmon start
    Starting nut_upsmon.
    Network UPS Tools upsmon 2.7.3
    kill: No such process
    UPS: server@127.0.0.1 (master) (power value 1)
    Using power down flag file /etc/killpower
    
  • Мониторинг
    • командная строка (на примере Ippon)
      # upsc server@127.0.0.1
      battery.charge: 100
      battery.voltage: 13.60
      battery.voltage.high: 13.00
      battery.voltage.low: 10.40
      battery.voltage.nominal: 12.0
      device.type: ups
      driver.name: blazer_usb
      driver.parameter.pollinterval: 2
      driver.parameter.port: /dev/ugen1.3
      driver.version: 2.6.5
      driver.version.internal: 0.09
      input.current.nominal: 3.0
      input.frequency: 49.9
      input.frequency.nominal: 50
      input.voltage: 230.8
      input.voltage.fault: 230.8
      input.voltage.nominal: 220
      output.voltage: 230.8
      ups.beeper.status: enabled
      ups.delay.shutdown: 30
      ups.delay.start: 180
      ups.load: 14
      ups.productid: 5161
      ups.status: OL
      ups.temperature: 25.0
      ups.type: offline / line interactive
      ups.vendorid: 0665
      
    • www
      при установке nut записывает директории /usr/local/www/cgi-bin/nut и /usr/local/www/htdocs/nut. Копируем их в cgi-bin и htdocs своего web-сервера. Из /usr/local/etc/nut/upsstats.html.sample делаем копию с именем /usr/local/etc/nut/upsstats.html (содержимое не меняем). Создаем /usr/local/etc/nut/hosts.conf, там прописываем свой UPS
      MONITOR server@127.0.0.1 "Main UPS"
      
      ВНИМАТЕЛЬНО ЧИТАЕМ /usr/local/etc/nut/upsset.conf.sample, после чего создаем (или нет) файл /usr/local/etc/nut/upsset.conf в который пишем строчку
      I_HAVE_SECURED_MY_CGI_DIRECTORY
      
      Помните, что создав upsset.conf вы разрешите любому кто знает (или подберет) логин и пароль для входа, управлять своим UPS через web, в том числе и тушить сервер, который к UPS подключен. Поэтому разработчики и намекают на дополнительную защиту уже средствами web-сервера, как, например, ограничение доступа на основе ip-адреса.
      После окончания настроек, открываем в браузере адрес http://WWW/nut/index.html. Кода спросит логин и пароль, используйте данные из файла /usr/local/etc/nut/upsd.users