Difference between revisions of "Uninterruptable Power Supply/fr"
(3 intermediate revisions by the same user not shown) | |||
Line 114: | Line 114: | ||
====Connecting multiple UPS's==== | ====Connecting multiple UPS's==== | ||
− | + | En référence à http://bugs.contribs.org/show_bug.cgi?id=629 et https://bugs.koozali.org/show_bug.cgi?id=626#c2, | |
+ | 1- vous devrez exécuter :<syntaxhighlight lang="bash"> | ||
+ | mkdir -p /etc/e-smith/templates-custom/ups/ups.conf/ | ||
+ | cp /etc/e-smith/templates/ups/ups.conf/UPS /etc/e-smith/templates-custom/ups/ups.conf/UPS2 | ||
+ | </syntaxhighlight>puis éditer le contenu pour remplacer l'en-tête par UPS2 et Model et Device par Model2 et Device2. | ||
+ | |||
+ | |||
+ | 2- Puis vous devrez exécuter :<syntaxhighlight lang="bash"> | ||
+ | mkdir -p /etc/e-smith/templates-custom/ups/upsmon.conf/ | ||
+ | cp /etc/e-smith/templates/ups/upsmon.conf/MONITOR /etc/e-smith/templates-custom/ups/ups.conf/MONITOR2 | ||
+ | </syntaxhighlight>puis l'éditer pour changer UPS en UPS2. Puis vous devrez configurer Device2 et Model2. | ||
+ | |||
+ | |||
+ | 3- Répéter les étapes 1 et 2 pour chaque ASI possédée, puis finaliser par :<syntaxhighlight lang="bash"> | ||
+ | signal-event console-save | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Variables et commandes ASI=== | ||
+ | Dans certains cas, vous souhaiterez peut-être modifier les variables de l'onduleur lui-même, telles que le paramètre Low Charge/LOWBATTERY. Cela nécessite l'utilisation de la commande '''upsrw''' et les privilèges d'administrateur ASI. | ||
+ | Vous souhaiterez peut-être également contrôler l'onduleur directement à partir de la ligne de commande en émettant des commandes ASI. Cela nécessite l'utilisation de la commande '''upscmd''' et les privilèges d'administrateur ASI. | ||
+ | |||
+ | {{Warning box|type=Attention : |en général, les données de l'onduleur doivent rester protégées et les modifications ou l'émission de commandes doivent être effectuées avec attention. Si vous souhaitez apporter des modifications aux données ou émettre des commandes, les privilèges d'administrateur peuvent être activés comme ci-dessous et doivent ensuite être désactivés.}} | ||
+ | |||
+ | ====Droits d'administrateur ASI==== | ||
<tabs container> | <tabs container> | ||
+ | <tab name="SME 10"> | ||
+ | Vous devriez vérifier votre nouveau mot de passe (AdminPass) pour exécuter '''upsrw''' et '''upscmd'''. Bien sûr, vous pouvez changer votre mot de passe pour un mot de passe plus facile à utiliser. | ||
+ | |||
+ | config show nut | ||
+ | |||
+ | Pour mettre un nouveau mot de passe admin dans la base de données (le nouveau mot de passe étant « admin » (à modifier selon vos souhaits) : | ||
+ | |||
+ | config setprop nut AdminPass admin | ||
+ | |||
+ | Pour activer les privilèges d'administration et passer une commande à l'ASI : | ||
+ | |||
+ | config setprop nut AdminUser enabled | ||
+ | |||
+ | Maintenant, pour que '''upsd''' reconnaisse la modification de l'administrateur pour les privilèges d'administration, nous développons le modèle et rechargeons la configuration '''upsd''' : | ||
+ | |||
+ | /sbin/e-smith/expand-template /etc/ups/upsd.users | ||
+ | /usr/sbin/upsd -c reload | ||
+ | |||
+ | {{Note box|type=Note : |pour désactiver les privilèges d'administration une fois que vous avez modifié les paramètres de l'onduleur ou émis les commandes nécessaires, exécutez les commandes : | ||
+ | config setprop nut AdminUser disabled | ||
+ | /sbin/e-smith/expand-template /etc/ups/upsd.users | ||
+ | /usr/sbin/upsd -c reload | ||
+ | }} | ||
+ | |||
+ | </tab> | ||
+ | |||
<tab name="SME 9"> | <tab name="SME 9"> | ||
Line 134: | Line 183: | ||
/usr/sbin/upsd -c reload | /usr/sbin/upsd -c reload | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Vous devriez vérifier votre nouveau mot de passe (AdminPass) pour exécuter '''upsrw''' et '''upscmd'''. Bien sûr, vous pouvez changer votre mot de passe pour un mot de passe plus facile à utiliser. | Vous devriez vérifier votre nouveau mot de passe (AdminPass) pour exécuter '''upsrw''' et '''upscmd'''. Bien sûr, vous pouvez changer votre mot de passe pour un mot de passe plus facile à utiliser. | ||
Line 162: | Line 204: | ||
/usr/sbin/upsd -c reload | /usr/sbin/upsd -c reload | ||
}} | }} | ||
+ | |||
+ | </tab> | ||
+ | <tab name="SME 8"> | ||
+ | |||
+ | In order to be able to use '''upsrw''' and '''upscmd''' it is necessary to have a suitable additional user defined in the '''upsd.users''' configuration file. | ||
+ | |||
+ | In order to create a suitable user we will use SME Servers templating system and configuration database. This is based on an original forum thread[http://forums.contribs.org/index.php?topic=40668.0]. | ||
+ | |||
+ | First we need to create a suitable custom template directory | ||
+ | mkdir -p /etc/e-smith/templates-custom/etc/ups/upsd.users | ||
+ | cd /etc/e-smith/templates-custom/etc/ups/upsd.users | ||
+ | |||
+ | Create and edit a new file called 'admin' with the following content: | ||
+ | { | ||
+ | # create admin user for upsd to allow setting of | ||
+ | # UPS parameters via upsrw | ||
+ | |||
+ | $OUT .= ""; | ||
+ | return unless (($nut{AdminUser} || 'disabled') eq 'enabled'); | ||
+ | return unless (($nut{AdminPass} || <nowiki>''</nowiki>) ne <nowiki>''</nowiki>); | ||
+ | |||
+ | $OUT .= "\n"; | ||
+ | $OUT .= " [admin]\n"; | ||
+ | $OUT .= " password = $nut{AdminPass}\n"; | ||
+ | if ( ($nut{Master} || 'yes') ne 'no') { | ||
+ | $OUT .= " allowfrom = localhost\n"; | ||
+ | } else { | ||
+ | $OUT .= " allowfrom = localhost localnet\n"; | ||
+ | } | ||
+ | $OUT .= " actions = set\n"; | ||
+ | $OUT .= " instcmds = all\n"; | ||
+ | } | ||
+ | |||
+ | Create two new database properties for nut | ||
+ | config setprop nut AdminUser enabled (This enables the creation of the user in the template above) | ||
+ | config setprop nut AdminPass admin (This sets a password for the admin user. Set to whatever you want) | ||
+ | |||
+ | Now, to get '''upsd''' to recognise the new user with the required administrative privileges we expand the template and reload the '''upsd''' configuration | ||
+ | /sbin/e-smith/expand-template /etc/ups/upsd.users | ||
+ | /usr/sbin/upsd -c reload | ||
+ | |||
+ | {{Note box|To disabled the admin user once you have changed the UPS parameters or issued commands as required, issue the commands | ||
+ | config setprop nut AdminUser disabled | ||
+ | /sbin/e-smith/expand-template /etc/ups/upsd.users | ||
+ | /usr/sbin/upsd -c reload | ||
+ | }} | ||
+ | </tab> | ||
+ | |||
+ | </tabs> | ||
==== Accès à l'ASI ==== | ==== Accès à l'ASI ==== | ||
Line 217: | Line 308: | ||
Plus d'information sur upsrw peut être obtenue sur la page du manuel : | Plus d'information sur upsrw peut être obtenue sur la page du manuel : | ||
man upsrw | man upsrw | ||
+ | |||
+ | =====Date du changement de la batterie===== | ||
+ | Un exemple de mise à jour de la date du changement de la batterie (utilisez votre propre mot de passe) :<syntaxhighlight lang="bash"> | ||
+ | upsrw -s battery.mfr.date=2024/01/18 -u admin -p admin UPS | ||
+ | </syntaxhighlight> | ||
====Émission de commandes à l'ASI==== | ====Émission de commandes à l'ASI==== | ||
Line 242: | Line 338: | ||
man upscmd | man upscmd | ||
− | </tab> | + | =Planification d'évènements= |
− | <tab name="SME | + | ====Exemple de délai d'arrêt==== |
+ | Par défaut, NUT émettra une commande d'arrêt dès qu'il recevra un événement de batterie faible de l'onduleur. Il peut y avoir des instances et des configurations d'installation qui nécessitent un arrêt plus tôt, ou d'autres événements avec des résultats chronométrés ou planifiés. Voir les pages '''man''', etc. pour plus d'informations et des exemples de situations. | ||
+ | |||
+ | Essentiellement, le programme '''upsmon''' surveille l'onduleur concerné et pour chaque événement '''NOTIFYFLAG''' dans '''upsmon.conf''' prend l'action immédiate telle que définie. Afin de retarder ou de planifier des actions, les événements doivent être transmis à '''upssched''' qui peut définir des minuteries et planifier des événements. | ||
+ | |||
+ | Les modifications suivantes apportées à la configuration normale de NUT sur le serveur Koozali SME arrêteront le serveur après un délai spécifié, après avoir reçu le signal « sur batterie » (l'exemple donné est de 2 minutes). Cela suppose que vous disposez déjà d'une configuration NUT et d'une ASI activées et fonctionnelles. | ||
+ | |||
+ | Pour créer un arrêt temporisé avant la réception du signal '''BATTLOW''', il est nécessaire de configurer '''upssched''' et d'avoir un script pour gérer les événements UPS ('''upsmon''' ne peut pas faire cela). | ||
+ | | ||
+ | |||
+ | En premier, nous avons besoin de créer un nouveau répertoire pour un modèle personnalisé : | ||
+ | mkdir -p /etc/e-smith/templates-custom/etc/ups/upsmon.conf | ||
+ | cd /etc/e-smith/templates-custom/etc/ups/upsmon.conf | ||
+ | |||
+ | Créez et éditez un nouveau fichier appelé 'NOTIFYCMD' avec le contenu suivant : | ||
+ | NOTIFYCMD /usr/sbin/upssched | ||
+ | |||
+ | Propagez le modèle : | ||
+ | /sbin/e-smith/expand-template /etc/ups/upsmon.conf | ||
+ | |||
+ | Créez maintenant un autre répertoire pour un modèle personnalisé : | ||
+ | mkdir -p /etc/e-smith/templates-custom/etc/ups/upssched.conf | ||
+ | cd /etc/e-smith/templates-custom/etc/ups/upssched.conf | ||
+ | |||
+ | Créez et éditez un nouveau fichier appelé '01CONFIG' avec le contenu suivant : | ||
+ | CMDSCRIPT /sbin/e-smith/nutUPS.cmd | ||
+ | PIPEFN /tmp/upspipe | ||
+ | LOCKFN /tmp/upslock | ||
+ | AT COMMBAD * EXECUTE commbad | ||
+ | AT COMMOK * EXECUTE commok | ||
+ | AT NOCOMM * EXECUTE nocomm | ||
+ | AT ONBATT * EXECUTE powerout | ||
+ | AT ONBATT * START-TIMER shutdownnow 120 | ||
+ | AT LOWBATT * EXECUTE shutdowncritical | ||
+ | AT ONLINE * CANCEL-TIMER shutdownnow | ||
+ | AT ONLINE * EXECUTE powerup | ||
+ | |||
+ | Dans ce qui précéède, définissez dans la ligne : | ||
+ | AT ONBATT * START-TIMER shutdownnow 120 | ||
+ | le délai en secondes, après le signal ONBATT, après lequel vous voulez arrêter. | ||
+ | |||
+ | Propagez le modèle : | ||
+ | /sbin/e-smith/expand-template /etc/ups/upssched.conf | ||
+ | |||
+ | |||
+ | Créez et éditez un nouveau script à : | ||
+ | /sbin/e-smith/nutUPS.cmd | ||
+ | |||
+ | Ajoutez le contenu suivant : | ||
+ | |||
+ | #! /bin/sh | ||
+ | case $1 in | ||
+ | commbad) | ||
+ | /bin/echo "UPS communications failure on `date`." | /bin/mail -s"UPS communications LOST" admin | ||
+ | /usr/bin/wall "UPS communications failure." | ||
+ | ;; | ||
+ | commok) | ||
+ | /bin/echo "UPS communications restored on `date`." | /bin/mail -s"UPS communications restored" admin | ||
+ | /usr/bin/wall "UPS communications restored." | ||
+ | ;; | ||
+ | nocomm) | ||
+ | /bin/echo "UPS communications cannot be established on `date`." | /bin/mail -s"UPS uncontactable" admin | ||
+ | /usr/bin/wall "UPS communications cannot be established." | ||
+ | ;; | ||
+ | powerout) | ||
+ | /bin/echo "Power failure on `date`." | /bin/mail -s"UPS on battery" admin | ||
+ | /usr/bin/wall "UPS on battery. Shutdown in 60 seconds...." | ||
+ | ;; | ||
+ | shutdownnow) | ||
+ | /bin/echo "UPS has been on battery for 60 seconds. Starting orderly shutdown on `date`." | /bin/mail -s"UPS on battery for 60 seconds" admin | ||
+ | /usr/bin/wall "UPS has been on battery for 60 seconds. Shutting down NOW!!!!" | ||
+ | /usr/bin/sudo /sbin/e-smith/signal-event halt | ||
+ | ;; | ||
+ | shutdowncritical) | ||
+ | /bin/echo "UPS battery level CRITICAL. Starting EMERGENCY shutdown on `date`." | /bin/mail -s"UPS battery CRITICAL" admin | ||
+ | /usr/bin/wall "UPS battery level CRITICAL. Shutting down NOW!!!!" | ||
+ | /usr/bin/sudo /sbin/e-smith/signal-event halt | ||
+ | ;; | ||
+ | powerup) | ||
+ | /bin/echo "Power restored on `date`." | /bin/mail -s"UPS on line" admin | ||
+ | /usr/bin/wall "UPS on line. Shutdown aborted." | ||
+ | ;; | ||
+ | *) | ||
+ | /bin/echo "Unrecognized command: $1" | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | Maintenant, rendez-le exécutable par l'utilisateur '''nut''' : | ||
+ | chmod 754 /sbin/e-smith/nutUPS.cmd | ||
+ | chown root:nut /sbin/e-smith/nutUPS.cmd | ||
+ | |||
+ | Nut nécessite d'utiliser sudo pour que ce processus fonctionne, donc sudo doit être configuré pour activer l'utilisateur nut. Par défaut, le fichier /etc/sudoers ne fait pas partie du système de modèles du serveur Koozali SME. Pour contourner ce problème, créez un répertoire de modèles personnalisé : | ||
+ | mkdir -p /etc/e-smith/templates-custom/etc/sudoers | ||
+ | cd /etc/e-smith/templates-custom/etc/sudoers | ||
+ | |||
+ | Pour préserver le contenu du fichier original /etc/sudoers, copiez celui-ci dans le répertoire de modèles personnalisé : | ||
+ | cp /etc/sudoers 10sudoers | ||
+ | |||
+ | Créer et éditer un nouveau fichier dénommé '30nut' avec le contenu suivant : | ||
+ | nut ALL=NOPASSWD: ALL | ||
+ | |||
+ | Puis exécutez : | ||
+ | /sbin/e-smith/expand-template /etc/sudoers | ||
+ | |||
+ | Finalement, pour terminer le processus : | ||
+ | signal-event post-upgrade | ||
+ | signal-event reboot | ||
+ | |||
+ | Lors des tests sur SMEServer v9.1 (vers mars 2016), le script <tt>nutUPS.cmd</tt> ci-dessus avec des entrées dans le modèle <tt>01CONFIG</tt> plantait à cause du manque de droits sur <tt>shutdownnow</tt> dans : | ||
+ | /usr/bin/sudo /sbin/e-smith/signal-event halt | ||
+ | |||
+ | La modification de <tt>/etc/sudoers</tt> n'a pas réglé le problème. | ||
+ | |||
+ | Voici l'erreur dans le journal <tt>/var/log/messages</tt> : | ||
+ | <pre> | ||
+ | Mar 14 13:22:16 svr01 upssched[3507]: Timer daemon started | ||
+ | Mar 14 13:22:16 svr01 upssched[3507]: New timer: shutdownnow (120 seconds) | ||
+ | Mar 14 13:25:16 svr01 upssched[3507]: Event: shutdownnow | ||
+ | Mar 14 13:25:16 svr01 wall[3539]: wall: user nut broadcasted 1 lines (70 chars) | ||
+ | Mar 14 13:25:16 svr01 upssched[3507]: exec_cmd(/sbin/e-smith/nutUPS.cmd shutdownnow) returned 1 | ||
+ | </pre> | ||
+ | |||
+ | Pourtant, l'utilisateur '''nut''' dispose des autorisations d'arrêt nécessaires : | ||
+ | /usr/bin/sudo -u nut /usr/bin/sudo /sbin/e-smith/signal-event halt | ||
+ | |||
+ | =Configurer les scripts du moniteur Nut-cgi= | ||
+ | |||
+ | Le paquet nut-cgi contient des scripts qui peuvent être exécutés via le serveur Web pour surveiller la(es) ASI. | ||
+ | |||
+ | ===Téléchargement et installation=== | ||
+ | <tabs container><tab name="For SME 10"> | ||
+ | You have to enable the epel repository: | ||
+ | yum install smeserver-extrarepositories-epel -y | ||
+ | |||
+ | then install nut-cgi: | ||
+ | yum install --enablerepo=epel nut-cgi | ||
+ | |||
+ | then configure it the SME way: | ||
+ | Edit file /etc/ups/hosts.conf and add. | ||
+ | mkdir -p /etc/e-smith/templates-custom/etc/ups/hosts.conf | ||
+ | echo 'MONITOR UPS@localhost "local UPS"' >/etc/e-smith/templates-custom/etc/ups/hosts.conf/10localhost | ||
+ | expand-template /etc/ups/hosts.conf | ||
+ | |||
+ | Httpd template | ||
+ | |||
+ | mkdir -p /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf | ||
+ | cd /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf | ||
+ | |||
+ | Now edit and create a new file 92nutupscmon with the following content | ||
+ | |||
+ | { | ||
+ | $OUT = ""; | ||
+ | my $allow = 'all'; | ||
+ | my $pass = '0'; | ||
+ | my $satisfy = 'all'; | ||
+ | my $name = $nut{'Name'} || 'NUT UPS Daemon Monitoring'; | ||
+ | my $PublicAccess = $nut{'PublicAccess'} || "local"; | ||
+ | |||
+ | for ('exit-if-none') | ||
+ | { | ||
+ | if ($PublicAccess eq 'none') | ||
+ | { | ||
+ | next; | ||
+ | } | ||
+ | elsif ($PublicAccess eq 'local') | ||
+ | { | ||
+ | $allow = "ip $localAccess"; | ||
+ | $pass = 0; | ||
+ | $satisfy = 'All'; | ||
+ | } | ||
+ | elsif ($PublicAccess eq 'local-pw') | ||
+ | { | ||
+ | $allow = "ip $localAccess"; | ||
+ | $pass = 1; | ||
+ | $satisfy = 'All'; | ||
+ | } | ||
+ | elsif ($PublicAccess eq 'global') | ||
+ | { | ||
+ | $allow = 'all granted'; | ||
+ | $pass = 0; | ||
+ | $satisfy = 'All'; | ||
+ | } | ||
+ | elsif ($PublicAccess eq 'global-pw') | ||
+ | { | ||
+ | $allow = 'all granted'; | ||
+ | $pass = 1; | ||
+ | $satisfy = 'All'; | ||
+ | } | ||
+ | elsif ($PublicAccess eq 'global-pw-remote') | ||
+ | { | ||
+ | $allow = "ip $localAccess"; | ||
+ | $pass = 1; | ||
+ | $satisfy = 'Any'; | ||
+ | } | ||
+ | |||
+ | $OUT .= "#------------------------------------------------------------\n"; | ||
+ | $OUT .= "# nut multimon - $name\n"; | ||
+ | $OUT .= "#------------------------------------------------------------\n"; | ||
+ | |||
+ | { | ||
+ | if ((exists $nut{'URL'}) && ($nut{'URL'} ne <nowiki>''</nowiki>)) { | ||
+ | $OUT .= "Alias /$nut{'URL'} /var/www/nut-cgi-bin\n"; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $OUT .= "Alias /nut /var/www/nut-cgi-bin\n"; | ||
+ | |||
+ | $OUT .= "\n"; | ||
+ | $OUT .= "<Directory /var/www/nut-cgi-bin>\n"; | ||
+ | $OUT .= " DirectoryIndex upsstats.cgi\n"; | ||
+ | $OUT .= " Options +ExecCGI\n"; | ||
+ | $OUT .= " <Require$satisfy>\n" if ($pass); | ||
+ | $OUT .= " Require $allow\n"; | ||
+ | if ($pass) | ||
+ | { | ||
+ | $OUT .= " AuthName $name\n"; | ||
+ | $OUT .= " AuthType Basic\n"; | ||
+ | $OUT .= " AuthExternal pwauth\n"; | ||
+ | $OUT .= " require valid-user\n"; | ||
+ | $OUT .= " </Require$satisfy>\n"; | ||
+ | } | ||
+ | $OUT .= "</Directory>\n"; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Configure databases and expand the template | ||
+ | |||
+ | config setprop nut PublicAccess local | ||
+ | /sbin/e-smith/expand-template /etc/httpd/conf/httpd.conf | ||
+ | |||
+ | {{Note box|The above sets access to the scripts to ''local'' ip addresses only. See the [[Web_Application_RPM#New_DB_settings]] for further info and settings}} | ||
+ | |||
+ | Restart the web server | ||
+ | |||
+ | systemctl restart httpd-e-smith | ||
+ | |||
+ | </tab><tab name="For SME 9 and before"> | ||
+ | You have to enable the '''[[epel]]''' repositories. | ||
+ | yum install --enablerepo=epel nut-cgi | ||
− | + | Edit file /etc/ups/hosts.conf and add. | |
− | |||
− | + | MONITOR UPS@localhost "local UPS" | |
− | |||
− | + | The nut-cgi rpm contains three cgi scripts. The rpm does not install them correctly for SME however so the following modifications are needed. | |
− | |||
− | + | mkdir -p /opt/nut-cgi-bin | |
+ | chown root:www /opt/nut-cgi-bin | ||
+ | mv /var/www/nut-cgi-bin/upsstats.cgi /opt/nut-cgi-bin | ||
+ | mv /var/www/nut-cgi-bin/upsset.cgi /opt/nut-cgi-bin | ||
+ | mv /var/www/nut-cgi-bin/upsimage.cgi /opt/nut-cgi-bin | ||
+ | chown root:www /opt/nut-cgi-bin/* | ||
+ | chmod 750 /opt/nut-cgi-bin/* | ||
+ | mkdir -p /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf | ||
+ | cd /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf | ||
− | + | Now edit and create a new file 92nutupscmon with the following content | |
− | |||
− | |||
− | |||
{ | { | ||
− | + | $OUT = ""; | |
− | + | my $allow = 'all granted'; | |
+ | my $pass = '0'; | ||
+ | my $satisfy = 'All'; | ||
+ | my $name = $nut{'Name'} || 'NUT UPS Daemon Monitoring'; | ||
+ | |||
+ | for ('exit-if-none') | ||
+ | { | ||
+ | if ($nut{'PublicAccess'}) | ||
+ | { | ||
+ | if ($nut{'PublicAccess'} eq 'none') | ||
+ | { | ||
+ | next; | ||
+ | } | ||
+ | elsif ($nut{'PublicAccess'} eq 'local') | ||
+ | { | ||
+ | $allow = $localAccess; | ||
+ | $pass = 0; | ||
+ | $satisfy = 'all'; | ||
+ | } | ||
+ | elsif ($nut{'PublicAccess'} eq 'local-pw') | ||
+ | { | ||
+ | $allow = $localAccess; | ||
+ | $pass = 1; | ||
+ | $satisfy = 'all'; | ||
+ | } | ||
+ | elsif ($nut{'PublicAccess'} eq 'global') | ||
+ | { | ||
+ | $allow = 'all'; | ||
+ | $pass = 0; | ||
+ | $satisfy = 'all'; | ||
+ | } | ||
+ | elsif ($nut{'PublicAccess'} eq 'global-pw') | ||
+ | { | ||
+ | $allow = 'all'; | ||
+ | $pass = 1; | ||
+ | $satisfy = 'all'; | ||
+ | } | ||
+ | elsif ($nut{'PublicAccess'} eq 'global-pw-remote') | ||
+ | { | ||
+ | $allow = $localAccess; | ||
+ | $pass = 1; | ||
+ | $satisfy = 'any'; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $OUT .= "#------------------------------------------------------------\n"; | ||
+ | $OUT .= "# nut multimon - $name\n"; | ||
+ | $OUT .= "#------------------------------------------------------------\n"; | ||
+ | |||
+ | { | ||
+ | if ((exists $nut{'URL'}) && ($nut{'URL'} ne <nowiki>''</nowiki>)) { | ||
+ | $OUT .= "Alias /$nut{'URL'} /opt/nut-cgi-bin\n"; | ||
+ | } | ||
+ | } | ||
− | + | $OUT .= "Alias /nut /opt/nut-cgi-bin\n"; | |
− | |||
− | |||
− | + | $OUT .= "\n"; | |
− | + | $OUT .= "<Directory /opt/nut-cgi-bin>\n"; | |
− | + | $OUT .= " DirectoryIndex upsstats.cgi\n"; | |
− | + | $OUT .= " Options +ExecCGI\n"; | |
− | + | $OUT .= " order deny,allow\n"; | |
− | + | $OUT .= " deny from all\n"; | |
− | + | $OUT .= " allow from $allow\n"; | |
+ | if ($pass) | ||
+ | { | ||
+ | $OUT .= " AuthName $name\n"; | ||
+ | $OUT .= " AuthType Basic\n"; | ||
+ | $OUT .= " AuthExternal pwauth\n"; | ||
+ | $OUT .= " require valid-user\n"; | ||
+ | $OUT .= " Satisfy $satisfy\n"; | ||
+ | } | ||
+ | $OUT .= "</Directory>\n"; | ||
} | } | ||
− | |||
− | |||
} | } | ||
− | + | Configure databases and expand the template | |
− | config setprop nut | + | |
− | + | config setprop nut PublicAccess local | |
+ | /sbin/e-smith/expand-template /etc/httpd/conf/httpd.conf | ||
+ | |||
+ | {{Note box|The above sets access to the scripts to ''local'' ip addresses only. See the [[Web_Application_RPM#New_DB_settings]] for further info and settings}} | ||
+ | |||
+ | Restart the web server | ||
+ | |||
+ | sv t httpd-e-smith | ||
+ | </tab> | ||
+ | </tabs> | ||
+ | |||
+ | ===Usage of Nut-cgi Scripts=== | ||
+ | |||
+ | Now go to http://yourdomain.tld/nut to see the statistics and information for the UPS at localhost. | ||
+ | |||
+ | By editing <tt>/etc/ups/hosts.conf</tt> and adding additional network UPS details, nut-cgi can be used to monitor more than one UPS. By the modification above, only the localhost is monitored. | ||
+ | |||
+ | =Additional Information= | ||
+ | |||
+ | There are template fragments in /etc/e-smith/templates/etc/ups that control the config files located in /etc/ups. The default settings should be OK for most situations. The <tt>/etc/nut.conf</tt> file must be manually edited like <tt>mode=standalone</tt> as the templates do not touch this file. In this case it would be: | ||
+ | sed -e 's/^MODE.*/MODE=standalone/' -i /etc/ups/nut.conf | ||
+ | |||
+ | By default, NUT is configured for a USB connected UPS in Master mode, but is disabled. When enabled, NUT will monitor the UPS and take various actions when certain notifications are received. This is controlled by the '''/etc/ups/upsmon.conf''' file which among other things lists the notifications and the actions to be taken for each. For example an ''On Battery'' event is captured by the '''NOTIFYFLAG ONBATT''' entry and the following '''SYSLOG+WALL+EXEC''' command string. This string tells '''upsmon''' to write the event to the System Log, broadcast a message to all users via Wall, and execute the command denoted by the '''NOTIFYCMD''' entry. | ||
+ | |||
+ | SME Server sets the '''NOTIFYCMD''' to '''/sbin/e-smith/nutUPS.notify''', and this executable file simply sends an email to the SME admin user with a notification of the event. | ||
+ | |||
+ | Apart from the various events that the UPS and '''upsmon''' may notify via the '''NOTIFYFLAGS''' a ''Low Battery'' event will automatically and immediately cause '''upsmon''' to issue the '''SHUTDOWNCMD''' as defined in '''upsmon.conf''' (signal-event halt) and set a flag '''POWERDOWNFLAG''' so it knows on future restart that it is a UPS recovery. | ||
+ | |||
+ | For information on configuration parameters: | ||
+ | man ups.conf | ||
+ | man upsd.conf | ||
+ | man upsd.users | ||
+ | man upsmon.conf | ||
+ | man upssched.conf | ||
+ | |||
+ | For general information: | ||
+ | man upsd | ||
+ | man nutupsdrv | ||
+ | |||
+ | ==Timeout Issues== | ||
+ | |||
+ | If you have comms problems like this you can add a custom timeout: | ||
+ | |||
+ | "USBDEVFS_CONTROL failed cmd blazer_usb rqt 33 rq 9 len 8 ret -110" | ||
+ | |||
+ | Add a new config item. The default is 2 | ||
+ | |||
+ | config setprop nut pollInterval 4 | ||
+ | |||
+ | Modify the template | ||
+ | |||
+ | mkdir -p /etc/e-smith/templates-custom/etc/ups/ups.conf | ||
+ | cp /etc/e-smith/templates/etc/ups/ups.conf/UPS /etc/e-smith/templates-custom/etc/ups/ups.conf/UPS | ||
+ | nano /etc/e-smith/templates-custom/etc/ups/ups.conf/UPS | ||
+ | |||
+ | Add the bits between the # comments | ||
− | + | { | |
− | + | my $model = $nut{Model} || "usbhid-ups"; | |
− | + | my $device = $nut{Device} || "/var/lib/ups/hiddev0"; | |
+ | my $type = $nut{Type}; | ||
+ | my $mfr = $nut{mfr}; | ||
+ | my $mdl = $nut{mdl}; | ||
− | { | + | # Add this |
− | + | my $poll = $nut{pollInterval} || '2'; | |
− | + | if ($poll ne '2') { | |
− | + | $OUT .= "pollinterval = $poll\n"; | |
− | + | } | |
+ | # ends here | ||
− | = | + | $OUT .= "[UPS]\n"; |
− | + | $OUT .= "\tdriver = $model\n"; | |
− | + | expand-template /etc/ups/ups.conf | |
− | + | cat /etc/ups/ups.conf | |
− | + | You should see something like this: | |
− | |||
− | + | # Copyright (C) 1999-2006 Mitel Networks Corporation | |
− | + | #------------------------------------------------------------ | |
+ | pollinterval = 4 | ||
+ | [UPS] | ||
− | + | Restart nut | |
− | |||
− | + | service nut restart | |
− | |||
− | |||
− | |||
− | + | Now check to see the correct timeout: | |
− | |||
− | + | upsc UPS | grep driver.parameter.pollinterval | |
− | + | driver.parameter.pollinterval: 4 | |
− | + | To reset either delete the key, or set it to the default of 2 | |
− | |||
− | + | ==Further reading== | |
− | |||
− | + | The NUT website is here: [http://www.networkupstools.org/ NUT] | |
− | |||
− | + | From the above references you can glean which configuration setting does what function, etc. | |
− | |||
− | + | If you want to modify the operation of NUT from the standard configuration, then you should generally modify the NUT config files by creating custom templates, expanding the templates and restarting service. This will ensure modifications survive a future reboot or reconfiguration. | |
− | + | An example of doing this can be found in the forum [http://forums.contribs.org/index.php?topic=40668.0] and in the section above for UPS Administrative Privileges | |
− | |||
− | + | See also [[KnownProblems#Restarting_NUT| Known Problem - Restarting Nut]] | |
+ | ---- | ||
− | + | ===Documentation=== | |
− | + | Nut is a software well documented, you can find the [http://www.networkupstools.org/docs/user-manual.chunked/index.html TOC here] and with [http://www.networkupstools.org/docs/user-manual.chunked/ar01s02.html an overview] | |
− | + | <noinclude> | |
− | </ | + | [[Category:Howto/fr]] |
+ | </noinclude> | ||
+ | <noinclude> | ||
+ | [[Category:Administration]] | ||
+ | </noinclude> | ||
+ | __FORCETOC__ |
Latest revision as of 21:20, 14 February 2024
Is this article helpful to you?
Please consider donating or volunteering
Thank you!
Alimentation sans interruption - ASI
Introduction
L'objectif principal du projet Network UPS Tools (NUT) est de fournir une surveillance fiable du matériel d'ASI et d'assurer des arrêts sûrs des systèmes connectés.
La configuration par défaut de NUT maintiendra vos systèmes connectés opérationnels jusqu'à ce qu'un état critique de la batterie soit atteint (c'est-à-dire que la batterie soit presque vide), puis mettra hors tension votre serveur/équipement de manière contrôlée. Voir http://www.networkupstools.org/ (en anglais).
Si vous disposez d'un onduleur de marque APC, consultez également Uninterruptable_Power_Supply:APC (en anglais) pour une alternative à l'implémentation ordinaire Koozali SME « Nut ».
Si vous disposez d'une ASI Dell, cela pourrait vous aider Uninterruptable_Power_Supply:LatestGeekery (en anglais).
Configuration par défaut (USB)
La configuration par défaut pour 'NUT' dans le serveur Koozali SME est assurée par les propriétés de la base de données de configuration :
Model = usbhid-ups status = disabled type = service
La plupart des ASI connectées en USB fonctionneront avec ces paramètres par défaut. Si vous utilisez une connexion USB, activez seulement NUT comme suit :
Pour Koozali SME 10, systemd est maintenant en service. Nous avons créé un service générique pour votre commodité :
config setprop nut status enabled signal-event e-smith-nutUPS-update systemctl restart nut-server.service systemctl restart nut-monitor.service systemctl restart nut.service
config setprop nut status enabled signal-event post-upgrade signal-event reboot
Si votre ASI USB ne fonctionne pas correctement OU si vous avez un appareil série, alors suivez les « Options de configuration » ci-après comme requises.
Configuration Options
Not all UPS's are supported by USB or the usbhid-ups driver. However NUT supports many UPS's and can be configured under SME Server easily.
Serial Connection
- Find the configuration details for your model of UPS. Refer to: http://www.networkupstools.org/stable-hcl.html and make note of the driver name and upstype number (if any) in the third column.
- From the console issue the following commands:
config setprop nut Model <model>
config setprop nut Device <device>
config setprop nut Type <type>
config setprop nut status enabled
Where:
<model> and <type> are the driver name and type number found above.
<device> is the serial port that the UPS is connected to eg. /dev/ttyS0. It also possible to use a more readable symlink. See HowTo on udev - symlinks for details. Note: The case of Model, Device and Type. - Check: config show nut
- Apply changes and restart server: signal-event post-upgrade signal-event reboot Alternatively, without NUT running or requiring a server reboot: signal-event console-save service nut start
- Confirm server is communicating with UPS: upsc UPS@localhost Whenever a UPS event occurs Emails are sent to the admin account.
Configuring as a master
edit the file /etc/ups/nut.conf, and modify the line
MODE=netserver
Set configuration values:
config setprop nut access private TCPPort 3493 expand-template /etc/ups/upsd.conf expand-template /etc/rc.d/init.d/masq systemctl restart masq systemctl restart nut-server
Configuring as a slave
Set configuration values:
config setprop nut SlaveUPS UPS@192.168.33.11 config setprop nut Master no
Where 192.168.33.11 is your UPS master, that is the computer that is in direct communication with the UPS. The hostname of that computer may also work.
Apply changes and restart server:
signal-event post-upgrade signal-event reboot
or (for SME10):
signal-event e-smith-nutUPS-update
Confirm server is communicating with master:
upsc UPS@192.168.33.11
Connecting multiple UPS's
En référence à http://bugs.contribs.org/show_bug.cgi?id=629 et https://bugs.koozali.org/show_bug.cgi?id=626#c2,
1- vous devrez exécuter :
mkdir -p /etc/e-smith/templates-custom/ups/ups.conf/
cp /etc/e-smith/templates/ups/ups.conf/UPS /etc/e-smith/templates-custom/ups/ups.conf/UPS2
puis éditer le contenu pour remplacer l'en-tête par UPS2 et Model et Device par Model2 et Device2.
2- Puis vous devrez exécuter :
mkdir -p /etc/e-smith/templates-custom/ups/upsmon.conf/
cp /etc/e-smith/templates/ups/upsmon.conf/MONITOR /etc/e-smith/templates-custom/ups/ups.conf/MONITOR2
puis l'éditer pour changer UPS en UPS2. Puis vous devrez configurer Device2 et Model2.
3- Répéter les étapes 1 et 2 pour chaque ASI possédée, puis finaliser par :
signal-event console-save
Variables et commandes ASI
Dans certains cas, vous souhaiterez peut-être modifier les variables de l'onduleur lui-même, telles que le paramètre Low Charge/LOWBATTERY. Cela nécessite l'utilisation de la commande upsrw et les privilèges d'administrateur ASI. Vous souhaiterez peut-être également contrôler l'onduleur directement à partir de la ligne de commande en émettant des commandes ASI. Cela nécessite l'utilisation de la commande upscmd et les privilèges d'administrateur ASI.
Droits d'administrateur ASI
Vous devriez vérifier votre nouveau mot de passe (AdminPass) pour exécuter upsrw et upscmd. Bien sûr, vous pouvez changer votre mot de passe pour un mot de passe plus facile à utiliser.
config show nut
Pour mettre un nouveau mot de passe admin dans la base de données (le nouveau mot de passe étant « admin » (à modifier selon vos souhaits) :
config setprop nut AdminPass admin
Pour activer les privilèges d'administration et passer une commande à l'ASI :
config setprop nut AdminUser enabled
Maintenant, pour que upsd reconnaisse la modification de l'administrateur pour les privilèges d'administration, nous développons le modèle et rechargeons la configuration upsd :
/sbin/e-smith/expand-template /etc/ups/upsd.users /usr/sbin/upsd -c reload
rpm -qa e-smith-nutUPS
If you get NUT running with administrative privileges modification from sme8 instruction, you need to remove the custom template created for this. These variables are taken in charge by the new package.
First you need to delete the custom template file.( This command delete the directory, be sure you don't have personal file present. If the case, delete manualy the file created for administrative privileges )
rm -rf /etc/e-smith/templates-custom/etc/ups/upsd.users
Now, to get upsd to recognise the modification of user, we need to expand the template and reload the upsd configuration
/sbin/e-smith/expand-template /etc/ups/upsd.users /usr/sbin/upsd -c reload
Vous devriez vérifier votre nouveau mot de passe (AdminPass) pour exécuter upsrw et upscmd. Bien sûr, vous pouvez changer votre mot de passe pour un mot de passe plus facile à utiliser.
config show nut
Pour mettre un nouveau mot de passe admin dans la base de données. Le nouveau mot de passe serait admin (changer comme vous voulez) :
config setprop nut AdminPass admin
Pour activer les droits d'administrateur et exécuter des commandes à l'ASI :
config setprop nut AdminUser enabled
Maintenant, pour que upsd reconnaisse la modification de l'administrateur pour les droits d'administrateur, nous développons le modèle et rechargeons la configuration upsd.
/sbin/e-smith/expand-template /etc/ups/upsd.users /usr/sbin/upsd -c reload
In order to be able to use upsrw and upscmd it is necessary to have a suitable additional user defined in the upsd.users configuration file.
In order to create a suitable user we will use SME Servers templating system and configuration database. This is based on an original forum thread[1].
First we need to create a suitable custom template directory
mkdir -p /etc/e-smith/templates-custom/etc/ups/upsd.users cd /etc/e-smith/templates-custom/etc/ups/upsd.users
Create and edit a new file called 'admin' with the following content:
{ # create admin user for upsd to allow setting of # UPS parameters via upsrw $OUT .= ""; return unless (($nut{AdminUser} || 'disabled') eq 'enabled'); return unless (($nut{AdminPass} || '') ne ''); $OUT .= "\n"; $OUT .= " [admin]\n"; $OUT .= " password = $nut{AdminPass}\n"; if ( ($nut{Master} || 'yes') ne 'no') { $OUT .= " allowfrom = localhost\n"; } else { $OUT .= " allowfrom = localhost localnet\n"; } $OUT .= " actions = set\n"; $OUT .= " instcmds = all\n"; }
Create two new database properties for nut
config setprop nut AdminUser enabled (This enables the creation of the user in the template above) config setprop nut AdminPass admin (This sets a password for the admin user. Set to whatever you want)
Now, to get upsd to recognise the new user with the required administrative privileges we expand the template and reload the upsd configuration
/sbin/e-smith/expand-template /etc/ups/upsd.users /usr/sbin/upsd -c reload
Accès à l'ASI
L'accès à l'ASI est contrôlé par les propriétés de la base de données. La propriété par défaut sélectionne « localhost » et donne le droit d'exécuter upsrw et upscmd depuis « localhost » si le privilège d'administrateur est activé comme ci-dessus. Aucune ASI esclave ne peut être connectée dans ce mode. Trois choix sont disponibles pour paramétrer l'accès :
- « localhost » : l'accès à l'ASI se fait uniquement depuis la machine locale ( ASI maître) ;
- « private » : l'accès à l'ASI se fait depuis votre machine locale et le réseau local comme défini dans le gestionnaire du serveur ;
- « public » : l'accès à l'ASI est similaire à « localhost ».
Pour régler les propriétés d'accès dans la base de données (exemple : localhost) :
config setprop nut access localhost /sbin/e-smith/expand-template /etc/ups/upsd.conf /usr/sbin/upsd -c reload
En mode « localhost » ou « public » (pas d'accès à distance), l'accès à votre ASI est (le nom de l'ASI est UPS) :
UPS@localhost
En mode « private », l'accès à votre ASI est (le nom de l'ASI est UPS) :
UPS@localhost
ou
UPS@192.168.1.1 # (IP de l'ASI maître)
Une ASI esclave peut accéder avec UPS@192.168.1.1 (IP de l'ASI maître).
Réglages des variables de l'ASI
Afin de définir les variables de l'ASI, il est nécessaire d'avoir d'abord activé les privilèges administratifs comme ci-dessus et vous avez la possibilité d'exécuter une commande à partir de l'onduleur esclave si l'accès est défini sur « private » comme ci-dessus.
Dans les exemples ci-dessous, on suppose que le nom de votre ASI est UPS, qu'elle est locale, que l'utilisateur administrateur est admin et que le mot de passe est admin. Vous pouvez vérifier votre nom d'ASI par :
upsc -l
Pour voir une liste complète des variables de l'ASI, à la fois informationnelles et modifiables :
upsc UPS
Pour déterminer les variables modifiables de votre ASI, leurs valeurs actuelles et leurs valeurs de réglage possibles, exécutez la commande :
upsrw UPS
Vous pouvez maintenant modifier les variables souhaitées à l'aide d'une commande similaire à la suivante (notez que l'ordre des arguments est important et vous aurez peut-être besoin de guillemets autour de la valeur définie, "20") :
upsrw -s battery.charge.low=20 -u admin -p admin UPS
Pour un hôte distant (ASI esclave), nous aurons besoin d'ajouter l'IP de l'ASI maître pour lancer la commande :
upsrw -s battery.charge.low=20 -u admin -p admin UPS@192.168.2.1
Où la valeur après -s doit être l'un des paramètres identifiés par la commande upsrw ups. Vous pouvez, naturellement, vérifier vos modifications en utilisant :
upsrw UPS
ou
upsc UPS
À la fin, effectuer un nettoyage en désactivant les privilèges d'administrateur de upsc.
Plus d'information sur upsrw peut être obtenue sur la page du manuel :
man upsrw
Date du changement de la batterie
Un exemple de mise à jour de la date du changement de la batterie (utilisez votre propre mot de passe) :
upsrw -s battery.mfr.date=2024/01/18 -u admin -p admin UPS
Émission de commandes à l'ASI
Pour émettre des commandes à l'ASI, il est nécessaire d'avoir d'abord activé les privilèges administratifs comme ci-dessus et vous avez la possibilité d'exécuter une commande à partir de l'onduleur esclave si l'accès est défini sur « private » comme ci-dessus.
Dans les exemples ci-dessous, on suppose que le nom de votre ASI est UPS, qu'elle est locale, que l'utilisateur administrateur est admin et que le mot de passe est admin. Vous pouvez vérifier votre nom d'ASI par :
upsc -l
Pour voir la liste complète des commandes pour votre ASI :
upscmd -l UPS
vous pouvez maintenant émettre une commande à l'ASI « localhost » avec une commande similaire à celle-ci :
upscmd -u admin -p admin UPS test.battery.start
Pour un hôte distant (ASI esclave), nous aurons besoin d'ajouter l'IP de l'ASI maître pour lancer la commande :
upscmd -u admin -p admin UPS@192.168.2.1 test.battery.start
Où la commande test.battery.start est une commande valide pour votre ASI comme déterminée préalablement par upscmd -l UPS. En fonction de la commande émise, vous pouvez recevoir des messages diffusés et des courriels concernant et confirmant ce que fait l'ASI.
À la fin, effectuer un nettoyage en désactivant les privilèges d'administrateur de upsc.
Plus d'information sur upscmd peut être obtenue sur la page du manuel :
man upscmd
Planification d'évènements
Exemple de délai d'arrêt
Par défaut, NUT émettra une commande d'arrêt dès qu'il recevra un événement de batterie faible de l'onduleur. Il peut y avoir des instances et des configurations d'installation qui nécessitent un arrêt plus tôt, ou d'autres événements avec des résultats chronométrés ou planifiés. Voir les pages man, etc. pour plus d'informations et des exemples de situations.
Essentiellement, le programme upsmon surveille l'onduleur concerné et pour chaque événement NOTIFYFLAG dans upsmon.conf prend l'action immédiate telle que définie. Afin de retarder ou de planifier des actions, les événements doivent être transmis à upssched qui peut définir des minuteries et planifier des événements.
Les modifications suivantes apportées à la configuration normale de NUT sur le serveur Koozali SME arrêteront le serveur après un délai spécifié, après avoir reçu le signal « sur batterie » (l'exemple donné est de 2 minutes). Cela suppose que vous disposez déjà d'une configuration NUT et d'une ASI activées et fonctionnelles.
Pour créer un arrêt temporisé avant la réception du signal BATTLOW, il est nécessaire de configurer upssched et d'avoir un script pour gérer les événements UPS (upsmon ne peut pas faire cela).
En premier, nous avons besoin de créer un nouveau répertoire pour un modèle personnalisé :
mkdir -p /etc/e-smith/templates-custom/etc/ups/upsmon.conf cd /etc/e-smith/templates-custom/etc/ups/upsmon.conf
Créez et éditez un nouveau fichier appelé 'NOTIFYCMD' avec le contenu suivant :
NOTIFYCMD /usr/sbin/upssched
Propagez le modèle :
/sbin/e-smith/expand-template /etc/ups/upsmon.conf
Créez maintenant un autre répertoire pour un modèle personnalisé :
mkdir -p /etc/e-smith/templates-custom/etc/ups/upssched.conf cd /etc/e-smith/templates-custom/etc/ups/upssched.conf
Créez et éditez un nouveau fichier appelé '01CONFIG' avec le contenu suivant :
CMDSCRIPT /sbin/e-smith/nutUPS.cmd PIPEFN /tmp/upspipe LOCKFN /tmp/upslock AT COMMBAD * EXECUTE commbad AT COMMOK * EXECUTE commok AT NOCOMM * EXECUTE nocomm AT ONBATT * EXECUTE powerout AT ONBATT * START-TIMER shutdownnow 120 AT LOWBATT * EXECUTE shutdowncritical AT ONLINE * CANCEL-TIMER shutdownnow AT ONLINE * EXECUTE powerup
Dans ce qui précéède, définissez dans la ligne :
AT ONBATT * START-TIMER shutdownnow 120
le délai en secondes, après le signal ONBATT, après lequel vous voulez arrêter.
Propagez le modèle :
/sbin/e-smith/expand-template /etc/ups/upssched.conf
Créez et éditez un nouveau script à :
/sbin/e-smith/nutUPS.cmd
Ajoutez le contenu suivant :
#! /bin/sh case $1 in commbad) /bin/echo "UPS communications failure on `date`." | /bin/mail -s"UPS communications LOST" admin /usr/bin/wall "UPS communications failure." ;; commok) /bin/echo "UPS communications restored on `date`." | /bin/mail -s"UPS communications restored" admin /usr/bin/wall "UPS communications restored." ;; nocomm) /bin/echo "UPS communications cannot be established on `date`." | /bin/mail -s"UPS uncontactable" admin /usr/bin/wall "UPS communications cannot be established." ;; powerout) /bin/echo "Power failure on `date`." | /bin/mail -s"UPS on battery" admin /usr/bin/wall "UPS on battery. Shutdown in 60 seconds...." ;; shutdownnow) /bin/echo "UPS has been on battery for 60 seconds. Starting orderly shutdown on `date`." | /bin/mail -s"UPS on battery for 60 seconds" admin /usr/bin/wall "UPS has been on battery for 60 seconds. Shutting down NOW!!!!" /usr/bin/sudo /sbin/e-smith/signal-event halt ;; shutdowncritical) /bin/echo "UPS battery level CRITICAL. Starting EMERGENCY shutdown on `date`." | /bin/mail -s"UPS battery CRITICAL" admin /usr/bin/wall "UPS battery level CRITICAL. Shutting down NOW!!!!" /usr/bin/sudo /sbin/e-smith/signal-event halt ;; powerup) /bin/echo "Power restored on `date`." | /bin/mail -s"UPS on line" admin /usr/bin/wall "UPS on line. Shutdown aborted." ;; *) /bin/echo "Unrecognized command: $1" ;; esac
Maintenant, rendez-le exécutable par l'utilisateur nut :
chmod 754 /sbin/e-smith/nutUPS.cmd chown root:nut /sbin/e-smith/nutUPS.cmd
Nut nécessite d'utiliser sudo pour que ce processus fonctionne, donc sudo doit être configuré pour activer l'utilisateur nut. Par défaut, le fichier /etc/sudoers ne fait pas partie du système de modèles du serveur Koozali SME. Pour contourner ce problème, créez un répertoire de modèles personnalisé :
mkdir -p /etc/e-smith/templates-custom/etc/sudoers cd /etc/e-smith/templates-custom/etc/sudoers
Pour préserver le contenu du fichier original /etc/sudoers, copiez celui-ci dans le répertoire de modèles personnalisé :
cp /etc/sudoers 10sudoers
Créer et éditer un nouveau fichier dénommé '30nut' avec le contenu suivant :
nut ALL=NOPASSWD: ALL
Puis exécutez :
/sbin/e-smith/expand-template /etc/sudoers
Finalement, pour terminer le processus :
signal-event post-upgrade signal-event reboot
Lors des tests sur SMEServer v9.1 (vers mars 2016), le script nutUPS.cmd ci-dessus avec des entrées dans le modèle 01CONFIG plantait à cause du manque de droits sur shutdownnow dans :
/usr/bin/sudo /sbin/e-smith/signal-event halt
La modification de /etc/sudoers n'a pas réglé le problème.
Voici l'erreur dans le journal /var/log/messages :
Mar 14 13:22:16 svr01 upssched[3507]: Timer daemon started Mar 14 13:22:16 svr01 upssched[3507]: New timer: shutdownnow (120 seconds) Mar 14 13:25:16 svr01 upssched[3507]: Event: shutdownnow Mar 14 13:25:16 svr01 wall[3539]: wall: user nut broadcasted 1 lines (70 chars) Mar 14 13:25:16 svr01 upssched[3507]: exec_cmd(/sbin/e-smith/nutUPS.cmd shutdownnow) returned 1
Pourtant, l'utilisateur nut dispose des autorisations d'arrêt nécessaires :
/usr/bin/sudo -u nut /usr/bin/sudo /sbin/e-smith/signal-event halt
Configurer les scripts du moniteur Nut-cgi
Le paquet nut-cgi contient des scripts qui peuvent être exécutés via le serveur Web pour surveiller la(es) ASI.
Téléchargement et installation
You have to enable the epel repository:
yum install smeserver-extrarepositories-epel -y
then install nut-cgi:
yum install --enablerepo=epel nut-cgi
then configure it the SME way: Edit file /etc/ups/hosts.conf and add.
mkdir -p /etc/e-smith/templates-custom/etc/ups/hosts.conf echo 'MONITOR UPS@localhost "local UPS"' >/etc/e-smith/templates-custom/etc/ups/hosts.conf/10localhost expand-template /etc/ups/hosts.conf
Httpd template
mkdir -p /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf cd /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf
Now edit and create a new file 92nutupscmon with the following content
{ $OUT = ""; my $allow = 'all'; my $pass = '0'; my $satisfy = 'all'; my $name = $nut{'Name'} || 'NUT UPS Daemon Monitoring'; my $PublicAccess = $nut{'PublicAccess'} || "local"; for ('exit-if-none') { if ($PublicAccess eq 'none') { next; } elsif ($PublicAccess eq 'local') { $allow = "ip $localAccess"; $pass = 0; $satisfy = 'All'; } elsif ($PublicAccess eq 'local-pw') { $allow = "ip $localAccess"; $pass = 1; $satisfy = 'All'; } elsif ($PublicAccess eq 'global') { $allow = 'all granted'; $pass = 0; $satisfy = 'All'; } elsif ($PublicAccess eq 'global-pw') { $allow = 'all granted'; $pass = 1; $satisfy = 'All'; } elsif ($PublicAccess eq 'global-pw-remote') { $allow = "ip $localAccess"; $pass = 1; $satisfy = 'Any'; } $OUT .= "#------------------------------------------------------------\n"; $OUT .= "# nut multimon - $name\n"; $OUT .= "#------------------------------------------------------------\n"; { if ((exists $nut{'URL'}) && ($nut{'URL'} ne '')) { $OUT .= "Alias /$nut{'URL'} /var/www/nut-cgi-bin\n"; } } $OUT .= "Alias /nut /var/www/nut-cgi-bin\n"; $OUT .= "\n"; $OUT .= "<Directory /var/www/nut-cgi-bin>\n"; $OUT .= " DirectoryIndex upsstats.cgi\n"; $OUT .= " Options +ExecCGI\n"; $OUT .= " <Require$satisfy>\n" if ($pass); $OUT .= " Require $allow\n"; if ($pass) { $OUT .= " AuthName $name\n"; $OUT .= " AuthType Basic\n"; $OUT .= " AuthExternal pwauth\n"; $OUT .= " require valid-user\n"; $OUT .= " </Require$satisfy>\n"; } $OUT .= "</Directory>\n"; } }
Configure databases and expand the template
config setprop nut PublicAccess local /sbin/e-smith/expand-template /etc/httpd/conf/httpd.conf
Restart the web server
systemctl restart httpd-e-smith
You have to enable the epel repositories.
yum install --enablerepo=epel nut-cgi
Edit file /etc/ups/hosts.conf and add.
MONITOR UPS@localhost "local UPS"
The nut-cgi rpm contains three cgi scripts. The rpm does not install them correctly for SME however so the following modifications are needed.
mkdir -p /opt/nut-cgi-bin chown root:www /opt/nut-cgi-bin mv /var/www/nut-cgi-bin/upsstats.cgi /opt/nut-cgi-bin mv /var/www/nut-cgi-bin/upsset.cgi /opt/nut-cgi-bin mv /var/www/nut-cgi-bin/upsimage.cgi /opt/nut-cgi-bin chown root:www /opt/nut-cgi-bin/* chmod 750 /opt/nut-cgi-bin/* mkdir -p /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf cd /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf
Now edit and create a new file 92nutupscmon with the following content
{ $OUT = ""; my $allow = 'all granted'; my $pass = '0'; my $satisfy = 'All'; my $name = $nut{'Name'} || 'NUT UPS Daemon Monitoring'; for ('exit-if-none') { if ($nut{'PublicAccess'}) { if ($nut{'PublicAccess'} eq 'none') { next; } elsif ($nut{'PublicAccess'} eq 'local') { $allow = $localAccess; $pass = 0; $satisfy = 'all'; } elsif ($nut{'PublicAccess'} eq 'local-pw') { $allow = $localAccess; $pass = 1; $satisfy = 'all'; } elsif ($nut{'PublicAccess'} eq 'global') { $allow = 'all'; $pass = 0; $satisfy = 'all'; } elsif ($nut{'PublicAccess'} eq 'global-pw') { $allow = 'all'; $pass = 1; $satisfy = 'all'; } elsif ($nut{'PublicAccess'} eq 'global-pw-remote') { $allow = $localAccess; $pass = 1; $satisfy = 'any'; } } $OUT .= "#------------------------------------------------------------\n"; $OUT .= "# nut multimon - $name\n"; $OUT .= "#------------------------------------------------------------\n"; { if ((exists $nut{'URL'}) && ($nut{'URL'} ne '')) { $OUT .= "Alias /$nut{'URL'} /opt/nut-cgi-bin\n"; } } $OUT .= "Alias /nut /opt/nut-cgi-bin\n"; $OUT .= "\n"; $OUT .= "<Directory /opt/nut-cgi-bin>\n"; $OUT .= " DirectoryIndex upsstats.cgi\n"; $OUT .= " Options +ExecCGI\n"; $OUT .= " order deny,allow\n"; $OUT .= " deny from all\n"; $OUT .= " allow from $allow\n"; if ($pass) { $OUT .= " AuthName $name\n"; $OUT .= " AuthType Basic\n"; $OUT .= " AuthExternal pwauth\n"; $OUT .= " require valid-user\n"; $OUT .= " Satisfy $satisfy\n"; } $OUT .= "</Directory>\n"; } }
Configure databases and expand the template
config setprop nut PublicAccess local /sbin/e-smith/expand-template /etc/httpd/conf/httpd.conf
Restart the web server
sv t httpd-e-smith
Usage of Nut-cgi Scripts
Now go to http://yourdomain.tld/nut to see the statistics and information for the UPS at localhost.
By editing /etc/ups/hosts.conf and adding additional network UPS details, nut-cgi can be used to monitor more than one UPS. By the modification above, only the localhost is monitored.
Additional Information
There are template fragments in /etc/e-smith/templates/etc/ups that control the config files located in /etc/ups. The default settings should be OK for most situations. The /etc/nut.conf file must be manually edited like mode=standalone as the templates do not touch this file. In this case it would be:
sed -e 's/^MODE.*/MODE=standalone/' -i /etc/ups/nut.conf
By default, NUT is configured for a USB connected UPS in Master mode, but is disabled. When enabled, NUT will monitor the UPS and take various actions when certain notifications are received. This is controlled by the /etc/ups/upsmon.conf file which among other things lists the notifications and the actions to be taken for each. For example an On Battery event is captured by the NOTIFYFLAG ONBATT entry and the following SYSLOG+WALL+EXEC command string. This string tells upsmon to write the event to the System Log, broadcast a message to all users via Wall, and execute the command denoted by the NOTIFYCMD entry.
SME Server sets the NOTIFYCMD to /sbin/e-smith/nutUPS.notify, and this executable file simply sends an email to the SME admin user with a notification of the event.
Apart from the various events that the UPS and upsmon may notify via the NOTIFYFLAGS a Low Battery event will automatically and immediately cause upsmon to issue the SHUTDOWNCMD as defined in upsmon.conf (signal-event halt) and set a flag POWERDOWNFLAG so it knows on future restart that it is a UPS recovery.
For information on configuration parameters:
man ups.conf man upsd.conf man upsd.users man upsmon.conf man upssched.conf
For general information:
man upsd man nutupsdrv
Timeout Issues
If you have comms problems like this you can add a custom timeout:
"USBDEVFS_CONTROL failed cmd blazer_usb rqt 33 rq 9 len 8 ret -110"
Add a new config item. The default is 2
config setprop nut pollInterval 4
Modify the template
mkdir -p /etc/e-smith/templates-custom/etc/ups/ups.conf cp /etc/e-smith/templates/etc/ups/ups.conf/UPS /etc/e-smith/templates-custom/etc/ups/ups.conf/UPS nano /etc/e-smith/templates-custom/etc/ups/ups.conf/UPS
Add the bits between the # comments
{ my $model = $nut{Model} || "usbhid-ups"; my $device = $nut{Device} || "/var/lib/ups/hiddev0"; my $type = $nut{Type}; my $mfr = $nut{mfr}; my $mdl = $nut{mdl};
# Add this my $poll = $nut{pollInterval} || '2'; if ($poll ne '2') { $OUT .= "pollinterval = $poll\n"; } # ends here
$OUT .= "[UPS]\n"; $OUT .= "\tdriver = $model\n";
expand-template /etc/ups/ups.conf cat /etc/ups/ups.conf
You should see something like this:
# Copyright (C) 1999-2006 Mitel Networks Corporation #------------------------------------------------------------ pollinterval = 4 [UPS]
Restart nut
service nut restart
Now check to see the correct timeout:
upsc UPS | grep driver.parameter.pollinterval
driver.parameter.pollinterval: 4
To reset either delete the key, or set it to the default of 2
Further reading
The NUT website is here: NUT
From the above references you can glean which configuration setting does what function, etc.
If you want to modify the operation of NUT from the standard configuration, then you should generally modify the NUT config files by creating custom templates, expanding the templates and restarting service. This will ensure modifications survive a future reboot or reconfiguration.
An example of doing this can be found in the forum [2] and in the section above for UPS Administrative Privileges
See also Known Problem - Restarting Nut
Documentation
Nut is a software well documented, you can find the TOC here and with an overview