понедельник, 29 июня 2020 г.

Подключаем несколько ИБП APC к одному компьютеру

1. Надо сделать так, чтобы ИБП получал каждый раз одно и тоже имя например /dev/usb/ups-1.
Добавляем в UDEV правила:
KERNEL=="hiddev*", ATTRS{manufacturer}=="American Power Conversion", ATTRS{serial}=="AS0000001", OWNER="root", SYMLINK+="usb/ups-1"
KERNEL=="hiddev*", ATTRS{manufacturer}=="American Power Conversion", ATTRS{serial}=="AS0000002", OWNER="root", SYMLINK+="usb/ups-2"
2. Надо для каждого ИБП сделать свой конфигурационный файл, и повесить на разные порты
/etc/apcupsd/ups-1.conf
/etc/apcupsd/ups-2.conf  
3. Для каждого ИБП делаем свой сервис apcupsd
Написал скрипт, чтобы это всё автоматизировать:

#!/bin/bash

BASEDIR=/etc/apcupsd
SYSDDIR=/etc/systemd/system/
UDEVDIR=/etc/udev/rules.d
UPSNAMES=(ups-6        ups-7)
SNUMBERS=(3S1331X04067 AS0945299131)
PORTS=(3556 3557)

if [ ${#UPSNAMES[*]} -eq ${#SNUMBERS[*]} ]
then
    for i in ${!UPSNAMES[*]}
    do
        UPSNAME=${UPSNAMES[$i]}
        SNUMBER=${SNUMBERS[$i]}
        PORT=${PORTS[$i]}
        APCFILE=$UPSNAME.conf
        SRVFILE=apc$UPSNAME.service
        UDEVFILE=$UDEVDIR/$UPSNAME.rules
        # echo $i $UPSNAME $SNUMBER $APCFILE $SRVFILE
        ## create udevrule file
        echo KERNEL==\"hiddev*\", ATTRS{manufacturer}==\"American Power Conversion\", ATTRS{serial}==\"$SNUMBER\", OWNER=\"root\", SYMLINK+=\"usb/$UPSNAME\" > $UDEVFILE
        ##
        ## creating apcupsd config
        cd $BASEDIR
        cp -f ups-template.conf $APCFILE
        sed -i "s/ups_XX/$UPSNAME/g" $APCFILE
        sed -i "s/sn_XX/$SNUMBER/g" $APCFILE
        sed -i "s/355XX/$PORT/g" $APCFILE
        ##
        ## creating systemd service config for each UPS and enable it
        cp -f apcupsd.service_template $SYSDDIR/$SRVFILE
        sed -i "s/ups_XX/$UPSNAME/g" $SYSDDIR/$SRVFILE
        systemctl enable $SRVFILE
        systemctl restart $SRVFILE
        ##
        ## add fw rules
        firewall-cmd --permanent --add-port=$PORT/tcp
        ##
    done
else
    echo "number of upsnames and serial number are not equal"
fi
 

Комментариев нет:

Отправить комментарий