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

Post-install – Outils indispensables

Mes post-install de Debian (et dérivé type Ubuntu) se poursuivent toujours de la façon suivante :

Upgrade

apt-get update && apt-get install aptitude && aptitude safe-upgrade

Outils pour les serveurs

Les petits outils indispensables pour les serveurs (et les ordinateurs d’admin sys)

aptitude install htop iftop iotop screen nmap tcpdump lsof iptraf dnsutils mc ncdu whois rsync tree

  • htop : un top mais en mieux
  • iftop : un top mais pour les carte réseau
  • iotop : un top mais pour l’utilisation des I/O de disque dur
  • screen : terminaux virtuel
  • nmap : scan réseau
  • tcpdump : écoute / capture de trame
  • lsoft : quel processus utilise quoi ? (fichier/ressource réseau etc…)
  • iptraf : un iftop mais en mieux
  • dnsutils : surtout pour la commande dig
  • mc : midnight-commander est un environnement semis graphique bien pratique parfois (quand on est fatigué par les lignes noirs)
  • ncdu : visualiser l’espace disque

Outils pour station de travail

Xsshfs petit outil maison très utile dans mon quotidien

sudo apt-get -y install sshfs ssh-askpass libgtk2-gladexml-perl perl libimage-librsvg-perl liblocale-gettext-perl libconfig-tiny-perl ; wget http://xsshfs.zici.fr/files/xsshfs_current.deb ; sudo dpkg -i xsshfs_current.deb ; sudo apt-get install -f ; rm xsshfs_current.deb

Et d’autres outils / logiciel non inclus par défaut :

sudo aptitude install -y keepassx2 remmina thunderbird terminator gparted wireshark git gitk freemind geany glipper easystroke lynx ethtool meld shutter remmina-plugin-rdp remmina-plugin-vnc chromium-browser cifs-utils vlc dia-rib-network dia filezilla  gimp audacity

  • keepass2 : Sauvegarder les mots de passes de façon sécurisé
  • terminator : un terminal bourré d’électronique
  • meld : faire un diff de façon graphique
  • glipper : parcourir votre presse papier (revenir en arrière par exemple)
  • shutter : très très bon logiciel de capture d’écran
  • easystrock : vos mouvement de souris déclenche des actions

Dans un environnement Gnome-shell

Je me suis mis à Gnome-shell récemment, pour changer, pour voir… voici les extension indispensable pour moi :

Lubuntu sur iMac G3 & eMac G4

Pour les besoins un ami directeur d’une école primaire, ayant récupéré à droite à gauche des iMac G3 & G4 j’ai fait une installation de lubuntu (version plus Light d’ubuntu)

Préambule : la version lubuntu est plus légère dans sont utilisation mais moins pratique à administrer. (moins d’interface prévue pour les tâches peu courante.. normal c’est plus liégé…) il va donc falloir se familiariser avec le terminal…

Boot sur CD

Il faut bien évidemment préalablement avoir téléchargé & gravé lubuntu PowerPC (ppc) dans sa version 12.04 (car c’est la dernière LTS) : lubuntu-12.04-alternate-powerpc.iso

Insérer le CD et maintenez la touche « C » du clavier appuyé

Pour éjecter le CD lors du démarrage laissé le clique sourie enfoncé

Installation

Je vais passer l’étape d’installation qui doit se faire sans problème en suivant les étapes.

[G3] Graphique

Si jamais, comme moi, sur le G3 l’interface graphique ne se lance pas et que vous vous retrouvez avec le terminal « login:  » connectez-vous et configuré l’interface graphique d’une des façons ci-après (non cumulable) :

Avec internet

Taper la commande ci-dessous pour obtenir une adresse IP :

sudo dhclient -v eth0

Puis taper la commande suivante pour télécharger le fichier de configuration de Xorg (trouvé ici)

sudo wget "http://pastebin.com/raw.php?i=RXFdwC80" -O /etc/X11/xorg.conf

Pour finir taper la commande pour redémarrer l’ordinateur

sudo reboot

Avec une clef USB

Depuis un autre ordinateur, créer un fichier sur une clef USB (formaté en FAT32) qui s’appelle xorg.conf à la racine de votre clef et ajouter lui le contenu qui se trouve à cette adresse : http://pastebin.com/RXFdwC80

Ensuite connecter la clef sur le iMac et taper les commandes suivantes :

sudo mount /dev/sdb1 /mnt/
sudo cp /mnt/xorg.conf /etc/X11/xorg.conf
sudo reboot

 A la main

Éditer le fichier à la main :

sudo nano /etc/X11/xorg.conf

Le contenu du fichier est disponible à cette adresse : http://pastebin.com/RXFdwC80 il ne faut faire aucune faute de frappe, bon courage !

[G3] Réseau

Il est possible que le réseau soit directement détecté dans ce cas ne toucher à rien mais si ce n’est pas le cas deux solutions s’offre à vous (non cumulable)

a) Le rc.local

Ouvrer l’application LXterminal et taper la commande

sudo leafpad /etc/rc.local

Et comme sur l’image ci-dessous ajouter avant le « exit 0 » l’instruction suivante :

dhclient eth0

Puis redémarrer l’ordinateur.

rc.local edit leopad

b) Network-manager

La procédure trouvée consiste à éditer le fichier /etc/network/interfaces avec la commande :

sudo leafpad /etc/network/interfaces

Et d’y supprimer toutes les lignes sauf les 2 lignes suivantes :

auto lo

iface lo inet loopback

Connexion automatique

Pour que l’utilisateur se connecte directement sans mot de passe. La procédure trouvée consiste à éditer le fichier /etc/lightdm/lightdm.conf :

sudo leafpad /etc/lightdm/lightdm.conf

Le contenu doit être le suivant :

[SeatDefaults]

autologin-user=votre_nom_d_utilisateur    (pour nous : bourg)

autologin-user-timeout=0

user-session=Lubuntu

greeter-session=lightdm-gtk-greeter

Ajouter un logiciel

De façon graphique vous avez deux possibilités de le faire :

Ces deux programmes se trouve dans Outils système

Imprimante Rico MP 3350

L’imprimante devrait s’installer facilement car un pilote libre est disponible (ci-après) il faut surtout, si elle n’est pas reconnue dans la recherche automatique, déterminer son adresse IP (souvent il est possible d’imprimer la configuration et l’adresse IP se trouve dans la rubrique « réseau ».

Modifier les menus :

La procédure consiste à installer le logiciel alacarte. Vous pouvez l’appeler par Menu / Préférences / Main Men

Optimisation

Désactiver mise à jour

Je conseils de désactiver les mise à jour automatique et de les faire manuellement de temps en temps.

Pour ce faire rendez-vous dans Outil système / Gestion des mises à jour puis dans Paramètres… / Mise à jour / Vérifier automatiquement les mises à jour : Jamais

lubuntu stop safe-upgrade

Paramètre de session

Désactiver un maximum de choses inutiles dans le démarrage afin d’accélérer la vitesse : Préférences / Paramètres de Session

Décocher tout sauf Réseau & file d’attente

Supprimer superflus

Virer de façon graphique (Outil système / Gestionnaire de paquet synaptic) ou via LXterminal : apt-xapi-index

sudo aptitude remove apt-xapian-index

Conclusion

Le G3 est franchement limité en ressource je pense qu’augmenter la RAM et éventuellement opter pour un disque dur plus rapide ne serait pas un mal. (Il y a plein de HowTo sur internet pour ça juste en tapant par exemple : « upgrade RAM imac g3 » dans votre moteur de recherche préféré – d’ailleurs c’est ce que les gens semble faire…

Le G4 beaucoup moins de problèmes et bien plus performant sans aucun doute, ça peut tourner comme ça même si c’est pas non plus une foudre de guerre.

[rkhunter] Warning The file properties have changed

Rkhunter sert à détecter les rootkits, portes dérobées et exploits. Il se base en partie sur les Inodes des exécutables. Après avoir fait des aptitude safe-upgrade. vos exécutables changent…  Il faut donc en avertir Rkhunter…

Après mon premier upgrade j’ai reçu le mail suivant :

Warning: The file properties have changed:
File: /bin/bash
Current inode: 21372580 Stored inode: 44044163

Warning: The file properties have changed:
File: /usr/sbin/cron
Current inode: 25046249    Stored inode: 44305975
[...]

Il faut donc mettre la base Rkhunter à jour avec les nouveaux inodes.

Méthode manuel :

Lancer les commandes suivantes :

$ rkhunter --update
$ rkhunter --propupd

Méthode automatique

Si comme moi, vous êtes un chouilla fainéant créer le script /etc/apt/apt.conf.d/98-rkhunter avec le contenu suivant :

$ cat /etc/apt/apt.conf.d/98-rkhunter 
DPkg::Post-Invoke {
    "rkhunter --update;"
    "rkhunter --propupd";
};

Ainsi la base Rkhunter sera remis à jour à chaque fois que vous utiliserez apt/aptitude.

Astuce trouvé sur le forum debian-fr.org

Faire le ménage dans vos paquet avec deborphan & apt (Ubuntu/Debian)

Petit script utilisant deborphan et les fonction apt pour faire le ménage des librairies qui ne sons plus utiliser & autres dans votre système Ubuntu/Debian

#!/bin/bash
if [ ! -f "/usr/bin/deborphan" ]
then
    echo "Installation des dépendance =&gt; deborphan"
    sudo apt-get install deborphan
fi
sudo apt-get remove --purge `deborphan --guess-all`
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get clean

Ne pas oublier le petit : chmod +x nomduscript.sh

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