sysgit : versionner les fichiers de configuration système (co-administration-sys

Contexte : besoin de historiser les configs système à plusieurs

Administrer un serveur Linux à plusieurs (co-administration) peut rapidement tourner au casse-tête si on ne garde pas de trace des modifications « 

Qui qu’a modifié le main.cf ? Pourquoi ? Elle était super ma config

Le service ne redémarre pas : qu’est-ce qui c’est passé depuis ma dernière connexion ?

C’est un problème que j’ai rencontré aussi bien dans un contexte associatif (serveurs de retzien.fr) que professionnel (infrastructure retzo.net). Lorsqu’un service tombe en panne du jour au lendemain, on entend souvent « mais pourquoi ça ne marche plus alors que ça marchait hier ? » ou « qui a fait ce changement, et pourquoi ? » Faute de trouver un outil existant correspondant à mes besoins ( et après en avoir discuté sur le forum CHATONS), j’ai développé sysgit, un petit outil shell open source conçu pour versionner les fichiers de configuration système et possiblement multi-admin.

Pourquoi utiliser Git pour les fichiers de configuration ?

Git est un système de gestion de versions largement utilisé par les développeurs, mais il s’applique tout aussi bien aux fichiers de configuration. L’idée est d’enregistrer chaque modification apportée aux configs dans un dépôt Git, avec un historique clair. On peut ainsi commenter chaque changement, comparer les différences, et revenir en arrière en cas de besoin. En administration système collaborative, Git apporte surtout de la visibilité sur qui a changé quoi et quand. Chaque admin peut suivre l’évolution des fichiers critiques, ce qui facilite le débogage et la communication au sein de l’équipe. En somme, versionner ses configs, c’est s’assurer une forme de documentation et d’audit continu, plutôt que de subir des modifications non tracées. Coupler à un outil comme gitlab/redmine ou autre qui gère aussi les issus/tickets ça permet d’avoir le volet « projet/tâche » relier aux différentes actions / modifications du/des serveurs

Il existe déjà un outil dédié nommé etckeeper qui permet de versionner le répertoire /etc avec Git. Cependant, etckeeper se limite à /etc et ne gère pas facilement d’autres chemins du système. C’est justement cette limite qui a motivé la création de sysgit.

Présentation de sysgit

sysgit est un script shell (bash) qui facilite le suivi de configuration sur un serveur en s’appuyant sur Git. En bref, sysgit c’est :

  • Un wrapper Git multi-chemins : il versionne plusieurs chemins/fichiers de configuration du système dans un dépôt unique, au lieu d’un dépôt par répertoire.
  • Aucun déplacement de fichiers : le work-tree utilisé par Git est la racine du système (/), ce qui évite de devoir déplacer vos fichiers ou utiliser des liens symboliques. On ne suit que les chemins que l’on ajoute explicitement au dépôt.
  • Historique clair et centralisé : l’objectif est de garder un journal de modifications lisible de toutes les configurations « sensibles » du système, sans déployer d’outil lourd de gestion de config (on reste sur du Git pur). En pratique, l’historique des commits fait office de log des changements sur le serveur.

Techniquement, sysgit ne réinvente rien : il s’appuie sur Git. Les commandes sysgit ne font que lancer git avec les bons paramètres de répertoire (options –git-diret –work-treeajustées). Cela signifie que le dépôt Git de configuration est stocké à part (en dehors de vos dossiers système) et que vous pouvez toujours interagir avec lui via Git standard au besoin.

Fonctionnalités principales de sysgit

Comparé à etckeeper ou à un usage “manuel” de Git, sysgit apporte plusieurs fonctionnalités utiles :

  • Scope étendu : on peut suivre tous les fichiers de configuration importants du système, pas juste /etc. Par exemple, libre à vous d’inclure /opt/monapp/config.yml, /var/spool/cron/crontabs, /root/.ssh/authorized_keys, etc.
  • Dépôt unique : un seul dépôt Git centralise l’historique de tous ces chemins. Inutile de multiplier les dépôts ou de gérer des symlinks pour différents dossiers.
  • Sélection fine des fichiers : vous ajoutez explicitement les chemins à versionner (whitelist) plutôt que de tout versionner en bloc. Vous ne suivez ainsi que ce qui vaut la peine d’être historisé (configs critiques), ce qui allège l’historique. Mais vous pouvez aussi ajouter tout un répertoire (/etc par exemple si vous le souhaitez)
  • Profils multi-admin : sysgit gère plusieurs profils d’auteurs Git, très pratique sur un serveur administré à plusieurs. Concrètement, si un admin effectue un commit en root il choisie « qui il est » (son identité) et celle-ci est conserver tel une sessions le temps de sa connexion.
root@srvmail:~# sysgit status
Choisir un profil:
 1) David - david.*********@retzien.fr
 0) Creer un nouveau profil
Votre choix: 0
Nom: Serge
Email: serge.*********@retzien.fr
Sur la branche master
Modifications qui ne seront pas validées :
  (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
  (utilisez "git restore <fichier>..." pour annuler les modifications dans le répertoire de travail)
	modifié :         ../etc/sympa/sympa_transport
	modifié :         ../etc/sympa/sympa_transport.db

aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a")
root@srvmail:~# sysgit add /etc/sympa/sympa_transport*
En tant que Serge <serge.*********@retzien.fr> (preciser -p pour changer)
root@srvmail:~# sysgit commit -m "Suppressoin de mailing liste"
En tant que Serge <serge.*********@retzien.fr> (preciser -p pour changer)
sending incremental file list
root@srvmail:~# sysgit log
En tant que Serge <serge.*********@retzien.fr> (preciser -p pour changer)
commit 428bb2401993b91e90a4dabac53d8d129fb378b4 (HEAD -> master)
Author: Serge <serge.*********@retzien.fr>
Date:   Tue Jan 20 10:07:22 2026 +0100

    Suppressoin de mailing liste

commit e952c0fd43317cba8afead584b7933621eb307f7
Author: David <david.*********@retzien.fr>
Date:   Tue Jan 20 09:37:19 2026 +0100

    Changement éditeur par défaut
  • Intégration d’etckeeper : un script de migration est fourni pour importer l’historique existant d’un dépôt etckeeper, si vous utilisiez déjà cet outil. Vous pouvez ainsi passer à sysgit sans perdre vos anciens historiques de /etc.
  • Auto-commit programmable : sysgit peut s’utiliser avec un timer systemd afin d’automatiser un commit chaque nuit (pour capturer les changements éventuels qui n’auraient pas été committés manuellement).
  • Hook APT/dpkg : un hook est prévu pour effectuer automatiquement un commit dès qu’une installation ou mise à jour de paquet modifie des fichiers de config (similaire à ce que fait etckeeper). Cela garantit que même les changements induits par les paquets sont tracés sans intervention manuelle.
  • Rappel en fin de session : enfin, sysgit peut rappeler à l’administrateur de committer les modifications non sauvegardées lors de sa déconnexion (bash logout) s’il en détecte. Ce petit mémo évite d’oublier de versionner un changement avant de fermer sa session.
  • Mise à jour facile : petit coquin je vous connais, trop la flemme de mettre à jour des petits outils comme ça qui sont pas dans un package apt (je parle pour moi). Ici rien de plus facile : sysgit -u

Installation de sysgit

L’outil sysgit étant tout récent, il n’est pas (encore) empaqueté dans les distributions. Son installation reste malgré tout simple :

  1. Prérequis : assurez-vous d’avoir Git installé sur le serveur (sudo apt install git sur Debian/Ubuntu si nécessaire).
  2. Installation rapide par script : mais vous pouvez préférer récupérer le projet depuis Framagit :
wget -O /tmp/sysgit-install.sh https://framagit.org/kepon/sysgit/-/raw/main/install.sh
sudo bash /tmp/sysgit-install.sh

Utilisation typique de sysgit

Une fois l’installation effectuée, l’utilisation de sysgit se rapproche de celle de Git, avec quelques commandes dédiées. Voici un mini-tutoriel d’usage courant :

# 1. Initialiser le dépôt "système" (une seule fois au départ)
sysgit init
# 2. Choisir les fichiers/répertoires à versionner
sysgit add -A /etc # par exemple tout /etc
sysgit add /root/.bashrc # fichiers de conf utilisateur
sysgit add /var/spool/cron/crontabs # répertoire de crons
... # (ajoutez autant de chemins que nécessaire)

# 3. Vérifier l'état et enregistrer l'état initial
sysgit status # liste les modifications en attente (fichiers ajoutés)
sysgit commit -m "État initial" # crée le premier commit avec tous ces fichiers

echo "# Modification d'un fichier suivi" >> /root/.bashrc
sysgit diff # affiche les différences

Une fois ce dépôt initialisé avec vos configs de base, au quotidien ça consiste simplement à committer toute modification de configuration. Par exemple, si vous modifiez /etc/ssh/sshd_config, vous exécuterez ensuite sysgit status (pour voir les changements non committés), éventuellement sysgit diff (pour visualiser les différences), puis sysgit commit -m « Msg » pour valider la modification dans l’historique. Vous pouvez bien sûr pousser le dépôt vers un serveur Git distant (Gitea, GitHub, etc.) pour sauvegarde ou partage, via les commandes usuelles (sysgit remote add origin …, sysgit push).

Pour la consultation, sysgit expose toutes les commandes Git classiques : sysgit log pour l’historique des commits, sysgit show <commit> pour détailler un commit précis, sysgit checkout <commit> — <fichier> pour restaurer une ancienne version d’un fichier, etc. En interne, “c’est du Git normal” – vous bénéficiez donc de toute la puissance de Git pour naviguer dans l’historique.

Mémo des commandes sysgit

Voici un récapitulatif des principales commandes fournies par sysgit :

  • sysgit init – Initialiser un nouveau dépôt de configuration (à exécuter une fois par serveur).
  • sysgit add <chemin> – Ajouter un fichier à suivre (peut être répété pour chaque élément à versionner).
  • sysgit add -A <chemin> – Ajouter un répertoire à suivre
  • sysgit status – Afficher les modifications non committées (équivalent de git status).
  • sysgit diff – Afficher les différences entre les fichiers suivis et la dernière version committée.
  • sysgit commit -m « Message » – Enregistrer (committer) les changements avec un message descriptif.
  • sysgit log – Consulter l’historique des commits (qui a changé quoi et quand).
  • sysgit show <SHA> – Afficher le détail d’un commit (identifié par son hash ou identifiant).
  • sysgit checkout <SHA> –– <fichier> – Restaurer un fichier suivi à l’état qu’il avait lors d’un commit donné (pratique pour annuler une modification).
  • sysgit push / sysgit pull – Envoyer ou récupérer les changements vers/depuis un dépôt Git distant (si configuré, pour sauvegarde ou partage entre admins).

(Toutes les autres commandes Git peuvent être utilisées via sysgit de la même manière, en passant simplement par l’alias sysgit.)

Liens utiles

Service web pour alléger vos boîtes mails (télécharger une archive)

À quand remonte la dernière fois que vous avez eu besoin de lire cet e-mail du 15 septembre 2012 ? Ça fait longtemps n’est-ce pas ?

Préambule

Le stockage de ces e-mails n’est pas sans impact énergétique : en effet, les serveurs (gros ordinateurs) qui hébergent ces vieux e-mails sont allumés en permanence pour vous permettre, un jour peut-être, de relire cet e-mail du 15 septembre 2012 dont vous n’avez même plus le souvenir. Deux solutions peuvent s’offrir à vous pour diminuer cet impact :

  • Supprimer vos vieux e-mails, la solution la plus sobre, radicale ;
  • Archiver vos e-mails sur une clé USB / un disque dur externe, votre ordinateur ; en tout cas, un système d’archivage « froid », c’est-à-dire qui ne sera pas allumé en permanence.

Un service web et open source pour faire ça

Lighten Mailbox est une interface web qui permet de faire du ménage dans sa boîte mail. Ce ménage se fait soit en supprimant des vieux messages, soit en les téléchargeant au format EML ou HTML/TXT. La sélection des messages se fait par critère de date (début/fin), puis en sélectionnant les dossiers IMAP concernés.

Exemple d’utilisation : Télécharger et archiver (exemple de rendu) ces emails vieux de 2 ans en les enregistrant sur un disque dur externe, puis (quand vous vous êtes assuré de l’intégrité des données) supprimer ces messages.

Exemple d’index d’archive : https://lighten-mailbox.zici.fr/archive/example/ (utilisable hors ligne, dans un navigateur internet depuis une clé usb par exemple…)

Une vidéo vaut mieux que de grands discours :

Clique ici pour afficher le contenu de Vimeo.
Learn more in Vimeo’s privacy policy.

Diminuer son impact numérique : comment envoyer des pièces jointes

Petit tuto vidéo pour vous expliquer comment envoyer des pièces jointes en limitant votre impact sur l’environnement. Il s’agit d’un service (open source) d’envoi de fichier avec expiration

Clique ici pour afficher le contenu de Vimeo.
Learn more in Vimeo’s privacy policy.

Le service tourne avec un logiciel libre en PHP (sans base de donnée) que c’est « moi qui l’a fait » : file2link mais il y a beaucoup d’autres alternatives :

file2link : Stockage de fichier temporaire contre lien

Depuis que Framasoft à annoncé sa Déframasoftisons Internet, en tant que membre des CHATONS (avec zici.fr & retzien.fr), je me suis dis que c’était l’heure de se retrousser les manches.

Faire un framadrop ça me semblait accessible, par contre Lufi (utilisé par framadrop) c’est codé en Perl et sur les serveurs de l’asso on est plus en mode PHP (et j’essaie de pas trop me disperser et pas héberger : un coup du perl, un coup du python, un coup du ruby, du node.js… c’est plus facile à maintenir) Sauf qu’en PHP je n’ai pas trouvé de logiciel maintenu similaire qui répondent à mes attentes, du coup j’en ai pondu un : file2link.

Bien sûr tout est libre de droit, file2link est sous licence beerware.

Petit tour en images :

Si vous l’utilisez, dites le moi, ça me parait pertinent qu’on fasse du lien avec toutes les instances…

Fonctionnalités

Dans sa version 0.1 le logiciel permet :

  • Uploader des fichier (plusieurs possible) et de recevoir des liens en échanges :
    • Lien direct
    • Lien de téléchargement forcé
    • Lien vers un zip contenant tout les fichiers
  • Images redimensionné à l’upload possible
  • Mémorisation des fichiers précédaient uploadé (via le storages local du navigateur
  • Se configure avec un fichier YAML
  • Configure with YAML file :
    • Limite dans le temps
    • Limite le type de fichier (via mime)
    • Limite le nombre de fichier envoyé simultanément
    • Limite de type de fichier
  • Bar de progression en HTML5
  • Multi-langue (français / anglais pour le moment)
  • Ménage des fichiers expiré par tâche cron (cron.php) ou par traffic sur la page d’accueil (web cron)
  • Personnalisation du contenu de la page avec la possibilité de créer des pages header-page.php, header.php, footer-page.php, footer.php, start-home.php, end-home.php
  • Ajout d’un menu vers des pages HTML pour créer des pages « contact » « mention légal »…

Installation

Pré-requis :

  • Un serveur http configuré compatible avec htaccess / url rewriting (apache2 typiquement
  • PHP 5.6 minimum
  • Lib php : GD & ZIP

Envoyer le contenu du dépôt sur votre serveur :

git clone https://framagit.org/kepon/file2link.git

Déplacer le fichier de conf distribué :

mv config.yaml.exemple config.yaml

Modifier le fichier config.yaml, changé le baseUrl et autres paramètres que vous souhaitez personnalisé. Assuré vous de la cohérence des paramètres :

  • maxUploadPerFile doit être similaire à la config PHP upload_max_filesize and post_max_size
  • maxUploadNbdoit doit être similaire à la config PHP config max_file_uploads

Assurez vous que le répertoire « files » soit accessible en écriture pour le servuer

Option : si vous voulez faire le ménage par tâche cron modifier la valeur expireCron par « cron » dans le fichier config.yaml et ajouter votre tâche cron :

* * * * * cd /var/www/file2link/ ; php cron.php

Et voilà, fin de chantier !

PvMonit v1.0 : Monitoring de mon installation photovoltaïque autonome

Je ne maintient actuellement plus PvMonit. Je tâche de faire prochainement un article pour vous donner quelques alternative.

PvMonit est arrivé à une version « mature », une version 1.0. PvMonit est un logiciel sous licence Beerware qui vous permet de monitorer votre installation électrique solaire autonome, plus particulièrement avec les appareils Victron.

Nouvelle version pvmonit dispo ici. Avec une « sur-couche » à PvMonit pour gérer le surplus d’électricité : Déclencher des actions à la demande. Exemple : les batteries sont pleines, on allume une pompe à eau puis la résistance électrique d’un chauffe eau. Ou encore, les batteries sont sous un seuil critique, on coupe tout sauf l’éclairage…. toutes les applications sont possibles !

PvMonit C’est quoi ?

PvMonit, c’est donc un petit logiciel de monitoring photovoltaïque pour matériel Victron compatible Ve.direct (le minimum pour que cela fonctionne est d’avoir un BMV 600, 700 ou 702…), particulièrement adapté pour les installations autonomes (hors réseau). Il permet une vue « en direct » par interface web et un enregistrement de l’historique (avec emoncms, branche d’OpenEnergyMonitor).

Mon usage

Je collecte les information de mon système photovoltaïque (température, état des batteries, production solaire, etc…) par une carte électronique (Arduino) qui se trouve dans un local à 35m de mon habitation. Je transporte ces données par un 3 fils dans un câble réseau. Celui-ci est connecté à un mini ordinateur (raspberry pi 0) sur lequel j’ai un écran LCD qui m’affiche l’état du système et j’ai un interface web (démo) ou j’ai plus de détails. Il y a aussi un historique qui est enregistré via emoncms (démo).

Au niveau Matériel

2 versions possibles :

  • Une version Raspberry PI 3B, si vous avez un point wifi actif (même occasionnellement) et que votre matériel solaire est à porté de wifi. C’est une solution plutôt simple (si on touche un peu sous linux).
  • Une version Raspberry Pi 0 + Arduino : plus complexe à mettre en œuvre (il faut savoir souder et avoir plus de connaissances), mais beaucoup plus souple et moins chère. Particulièrement adapté si votre installation réseau est loin (max 60m) de votre maison ;
Version Raspberry PI 3BVersion Arduino + Raspberry Pi 0
Consommation électrique0,37A (pi 3b) * 5V = ~1,85W0,22A (pi 0) + 0,08A (arduino MEGA) = 0,30A * 5V = ~1,5W
Difficulté********
Prix matériel (détails)200 €110 €

Raspberry Pi 3B & Ve.direct USB (officiel)

L’usage des câbles ve.direct USB officiel permet de simplifier le montage.

Arduino + Raspbery Pi 0

L’usage d’un arduino pour collecter les données donne de la souplesse pour pouvoir ajouter des sondes à volonté et permet de parcourir de grande distance jusqu’au Raspberry PI qui récupère les informations. Un schéma de câblage détaillé :

Le schéma de câblage détaillé

Voilà ce que ça donne, c’est plus de boulot, plus de soudure mais plus DIY, plus fun :-p

Installation

Il ne faut pas se mentir, ça demande de bonnes connaissances techniques en linux/réseau voir arduino/soudure (si vous choisissiez cette option).

J’ai fais un très long tuto d’installation dans le fichier INSTALL.md du dépôt git : https://framagit.org/kepon/PvMonit/blob/master/INSTALL.md

Crowdin : intégration automatique des traduction (script)

Depuis mon précédent article d’appel à la traduction de CalcPvAutonome , datant d’il y a moins d’un mois. Il c’est passé un truc que je ne me serais pas imaginé. En effet, le projet à été traduit (partiellement ou complètement) en Néerlandais, Russe, Polonais, Indonésien, Espagnol, Italien, Japonais, Polonais, Turc, Ukrainien… j’en passe et des meilleurs…

Il semble que nombre des contributeurs (tous ?) arrivent de utopian.io, une plateforme qui rémunère les contributions des aux projets opensource (via steemit.com/). Je ne sais pas trop quoi en penser… c’est génial, ça a été très vite, mais je ne suis pas certain de la qualité (et j’ai pas trop moyen de le savoir). Même si il semble y avoir de la modération sur utopian, j’ai déjà eu un retour d’une Russe qui repassait derrière une autre qui avait fait vraiment n’importe quoi (selon elle…) mais bon moi et le Russe… c’est complexe de savoir qui dit vrai, je peux juste faire confiance et laisser la communauté autogérée.

En tout cas je n’aurai pas imaginé avoir autant de petit drapeau de traduction en haut de ce machin.

L’engouement à été tellement soudain que je me suis retrouvé débordé devant la quantité de traduction à intégrer. Du coup j’ai fait une moulinette pour l’intégration dans le projet avec l’API Crowdin.  Le script est en PHP et il permet :

  • Compilation sur crowdin
  • Téléchargement des traductions
  • Compilation en .mo
  • Mise à jour du lang.ini qui contient :
    • % d’avancement de la traduction
    • Liste des contributeurs (pour dire merci)

C’est à voir dans le dépot framagit.

Merci à Crowdin qui permet met à disposition sa plateforme hyper complète gratuitement pour les logiciels libres.

Pour vous en montrer un aperçu de sa puissance, Crowdin permet une traduction « en contexte », directement sur l’interface du site à traduire. A tester sur CalcPvAutonome par ici : calcpv.net/aa

CalcPvAutonome en V4.0 : ouverture sur l’international

D’abord un grand merci à nednet, coucou39, guillerette, mirrim, ppmt qui ont œuvré à la traduction vers l’anglais de CalcPvAutonome suite à mon appel.

Je passe la seconde en lançant un nouvel appel à la traduction. Cette fois-ci de l’anglais vers ce que vous voulez/pouvez, Espagnol, Portugais, Italien, Espéranto, Grec… Faites-vous plaisir !

La plateforme de traduction collaborative se trouve par ici : crwd.in/calcpvautonome

Petit rappel : CalcPvAutonome est un logiciel libre (licence Beerware) et gratuit de dimensionnement d’installation photovoltaïque en site isolé (autonome). Il se veut transparent (dans la méthode), pédagogique et surtout détaché de toute structure commercial.

Autre petite nouveauté depuis mon dernier article :

  • CalcPvAutonome intègre les graph’s OFF-GRID du projet PVGIS 5
  • Un nom de domaine rien qu’a lui : calcpv.net
  • Du HTTPS sur l’application en ligne (merci Let’s Encrypt)

Pour tester, c’est par ici :

En continuant à utiliser le site, vous acceptez l’utilisation des cookies (au chocolat) Plus d’informations

Les cookies sont utilisés à des fin de statistique de visite du blog sur une plateforme indépendante que j'héberge moi même. Les statistiques sot faites avec un logiciel libre. Aucune information n'est redistribué à google ou autre. Je suis seul autorisé à lire ces informations

Fermer