Onduleur – Nut en client direct

Il y a de cela quelques semaines, j’ai fait l’acquisition d’une pièce manquante de mon réseau interne, à savoir: un onduleur. Je n’avais pas, jusqu’à présent, considéré cet élément comme indispensable, mais la perspective d’un déplacement professionnel de plus d’une dizaine de jours m’a poussé à l’achat. J’espère ainsi protéger mes services auto-hébergés d’une éventuelle coupure de courant.

Une coupure de courant reste un événement relativement exceptionnel, du moins dans mon environnement géographique, puisqu’après plusieurs années d’auto-hébergement, je n’ai jamais eu d’arrêt de service provoqué par un défaut d’alimentation. Après avoir considéré ces facteurs, un onduleur a donc trouvé sa place dans mon logement, à proximité du routeur, du switch, etc… N’ayant pas noté d’interruption de service durant mon déplacement, je peux en déduire que l’onduleur a rempli son rôle…, ou que le réseau électrique est resté stable, comme à son habitude.

Bref, après m’être contenté du raccordement électrique des périphériques à l’onduleur, je me suis intéressé à la configuration d’un service de surveillance de l’état de l’onduleur. Le but étant de détecter un état de batterie faible subséquent à une coupure de courant, et d’être ainsi en mesure de procéder proprement et automatiquement à l’extinction des composants critiques du réseau, serveurs et routeur en particulier.

Voici donc, à la suite, la configuration déployée sur la machine chargée de la surveillance de l’onduleur. Les deux éléments sont connectés via le cable USB fournit avec l’onduleur. Une dernière chose, mon onduleur est de marque Eaton. Entrons maintenant dans le vif du sujet.

Après avoir connecté l’onduleur, un petit tour du côté du contenu de dmesg, me permet de vérifier que celui-ci est détecté. Je procède également à l’installation de nut via aptitude install nut.

[238029.826593] hid-generic 0003:0463:FFFF.0001: hiddev96,hidraw0: USB HID v1.10 Device [EATON Ellipse PRO] on usb-3f980000.usb-1.5/input0

Avant d’aller plus loin et pour pouvoir commencer à configurer nut, il est nécessaire de déterminer le driver à utiliser pour l’onduleur. Pour trouver cette information, il est conseillé de s’aider de la page « Hardware compatibility list« . Pour ma part, je n’ai pas trouvé mon modèle dans la liste (Eaton Ellipse Pro), mais les modèles présents les plus récents et les plus proches de la gamme « Ellipse Pro », indiquent de choisir usbhid-ups.

Munis de cette information, je peux donc passer à l’édition du fichier /etc/nut/ups.conf, afin de déclarer l’onduleur dans nut.

[nom_onduleur]
        driver = usbhid-ups
        port = auto
        desc = "EATON UPS"

A ce stade, il est déjà possible d’effectuer un premier test de fonctionnement.

$ sudo 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

Après avoir vérifié avec la commande ci-dessus que notre déclaration de l’onduleur est correct, c’est-à-dire, que nut communique bien avec l’onduleur, je passe à l’édition du fichier /etc/nut/upsd.conf, afin de n’autoriser que les connexions provenant de la machine locale.

LISTEN 127.0.0.1

Il convient ensuite de définir un utilisateur qui sera ensuite autorisé à accéder à l’état de l’onduleur. Cette fois, les modifications sont apportées au fichier /etc/nut/upsd.users.

[nom_utilisateur]
     password = PASSWORD_HERE
     upsmon master

Pour la suite, je modifie /etc/nut/upsmon.conf, pour configurer la surveillance de l’onduleur. A noter qu’il est possible de configurer la commande d’extinction, en modifiant la propriété SHUTDOWNCMD. J’ai de mon côté configuré la propriété NOTIFYCMD, en précisant le chemin vers un script relativement simple ayant pour rôle de m’envoyer un mail pour les événements ONLINE, ONBATT et LOWBATT, comme l’indique la présence de l’instruction EXEC pour chacune des trois lignes NOTIFYFLAG.

MONITOR nom_onduleur@localhost 1 nom_utilisateur PASSWORD_HERE master

NOTIFYCMD /path/to/script/notif-ups.sh
NOTIFYFLAG ONLINE       EXEC+SYSLOG+WALL
NOTIFYFLAG ONBATT       EXEC+SYSLOG+WALL
NOTIFYFLAG LOWBATT      EXEC+SYSLOG+WALL

Enfin, le dernier fichier à modifier est /etc/nut/nut.conf, pour déterminer le mode de fonctionnement de nut. L’utilisation se limitant à une seule machine pour le moment, j’utilise donc le mode client seul.

MODE=standalone

Maintenant que l’ensemble est configuré, il est possible de récupérer les informations de l’onduleur par appel à la commande upsc nom_onduleur@localhost. Ayant réussi à obtenir les informations d’état de l’onduleur, il reste à effectuer un dernier test, en simulant une situation nécessitant l’arrêt de la machine connectée à l’onduleur.

sudo upsmon -c fsd

La demande d’exécution de l’arrêt forcé est particulièrement intéressante, puisqu’elle m’a permit de vérifier la bonne extinction de la machine surveillant l’onduleur. J’ai été un peu surpris, car l’onduleur, simule également une coupure complète et un retour du courant sur toutes les prises. Quelques appareils ont donc subi un arrêt un peu rude, mais cela m’a permis de vérifier que tout le système est capable de revenir à un fonctionnement normal automatiquement.

Il faudra néanmoins que je prévois un test de coupure complète en débranchant l’onduleur, afin de tester le comportement de l’ensemble dans cette situation. Par ailleurs, il me reste à modifier cette configuration de surveillance de l’onduleur, afin de passer à un modèle client-serveur et d’être en mesure de partager les informations d’état avec les autres composants branchés à l’onduleur et que ces derniers soient en mesure de déclencher leur arrêt avant une coupure totale du courant.

Source :

[Nextcloud] Mise à jour

En ce qui concerne la mise à jour de mon instance Nextcloud, fonctionnant sur un Pi 3, avec des performances acceptables, étant le seul utilisateur, je constate à l’usage qu’il est préférable de déclencher la mise à jour en passant par la ligne de commande.

Pour référence, une fois dans le dossier de Nextcloud, on exécutera la commande suivante pour déclencher l’intégralité de la procédure de mise à jour, comprenant, sauvegarde préalable, récupération de la nouvelle version, etc.

sudo -u www-data php updater/updater.phar

On pourra aussi utiliser l’option --no-interaction afin d’enchaîner toutes les étapes conduisant à la mise à jour sans demander la validation de l’utilisateur.

Référence : Upgrade via built-in updater

Mise à jour du système sans avoir besoin de saisir un mot de passe.

En déclenchant dernièrement la mise à jour de l’une de mes machines sous GNU/Linux à la main, j’ai été confronté, comme d’habitude, à la nécessité de saisir le mot de passe de l’utilisateur que j’utilisais pour me connecter. Après récupération du mot de passe dans mon gestionnaire, j’ai pu effectuer la mise à jour et je me suis donc interrogé quant à la possibilité de déclencher la commande de mise à jour sans avoir à renseigner systématiquement le mot de passe.

Après quelques recherches, il est possible d’arriver au fonctionnement voulu en ajoutant la configuration adéquate dans la configuration de sudo, via visudo. J’ajoute donc la ligne suivante pour mon utilisateur victor :

victor ALL=(root) NOPASSWD: /usr/bin/aptitude update, /usr/bin/aptitude upgrade

Avec cette configuration, je suis désormais en mesure d’exécuter les deux commandes suivantes sans avoir à fournir le mot de passe associé à l’utilisateur.

# sudo aptitude update
# sudo aptitude upgrade

Pratique étant donné que le seul moyen de me connecter à la machine concernée passe par l’utilisation de ma clé PGP stockée sur ma YubiKey. Plus besoin d’aller faire un tour par mon gestionnaire de mot de passe pour mettre à jour le système !

Désactivation de l’application « Zen Mode » de OnePlus

Un nouvel article pense-bête concernant la désactivation d’une application android sur la base des informations apportées par lord dans « Épurer un téléphone android« . Utilisant un smartphone de la marque OnePlus depuis un peu moins d’un an, j’avais noté l’intérêt des manipulations, mais sans franchir le pas, la couche oxygenOS présente sur les OnePlus m’ayant toujours semblé minimale et non intrusive… jusqu’à cette semaine.

Il y a de cela quelques jours, une nouvelle version de l’application OnePlus « Zen Mode » s’est mis à m’envoyer des notifications pour participer à des défis dont l’objectif est de ne pas utiliser le téléphone pendant une certaine durée. A cela s’est ajouté une autre notification m’informant que j’utilise beaucoup mon téléphone dernièrement, alors que je ne m’en étais pas servi depuis plusieurs heures. Pour la pertinence, on repassera. Bref, notifications non désirées égale désactivation. Impossible néanmoins de désactiver l’application dans les menus android, ni de forcer son arrêt. J’ai donc sorti l’artillerie lourde.

Première étape, installer android-tools pour avoir accès à la commande adb et pouvoir se connecter au téléphone. Ensuite, activer le mode de débogage USB, pour cela, se rendre dans « A propos du téléphone », puis cliquer plusieurs fois sur « Numéro de build » jusqu’à l’apparition du message « Vous êtes désormais un développeur ! », qui nécessite de saisir le code de verrouillage du téléphone avant affichage du message. Les « options pour les développeurs » sont désormais accessibles dans le menu « Système » et il devient possible d’activer l’option « Débogage USB » présente dans la sous-catégorie « Débogage ».

Une fois cela fait, un appel à la commande adb shell nous permet de disposer d’une ligne de commande exécutant les instructions sur le système du téléphone. A noter qu’en cas de première connexion, il faut autoriser la connexion entrante sur votre téléphone, pour valider la demande de connexion de l’ordinateur. La liste des applications installées s’obtient via pm list packages. Une fois les applications que l’on souhaite désactiver repérées, dans mon cas, l’application zen mode, nom de code com.oneplus.brickmode, on peut passer à la désactivation:

pm disable-user --user 0 com.oneplus.brickmode

Il est également possible d’aller plus loin qu’une simple désactivation en procédant à la désinstallation pure et simple (ce que j’ai finalement fait):

pm uninstall --user 0 com.oneplus.brickmode

J’en ai profité pour désactiver aussi :

com.android.chrome
com.google.android.googlequicksearchbox
net.oneplus.weather

Bref, continuer à garder un téléphone qui fait ce que je lui demande quand je lui demande, et qui ne cherche pas à induire des comportements ou à s’imposer à mon attention lorsque je ne l’ai pas choisi.