FreeBSD Contrôle de version des fichiers de configuration
FreeBSD dispose en interne d'outil permettant de mettre en place un contrôle de version de vos fichiers (ici de configuration). Il permet de garder un enregistrement de toutes les modifications et des raisons de celle-ci, afin de pouvoir revenir assez facilement à des versions antérieures.
Freebsd : l'historique des modifications de vos fichiers de configuration
Nous allons mettre ici en place un contrôle de version sur le fichier rc.conf grâce à trois commandes
- ci pour check in (enregistrement)
- co pour check out (consultez)
- rcs pour Revision Control System
Il faut voir le système comme une bibliothèque où l'on empreinte (check out) et où on rend (check in) des livres (ici des fichiers), et que le bibliothécaire note l'état dans lequel nous le rendons.
Afin de suivre les modifications apportées sur un fichier, nous devons le placer sous surveillance.
Pour ceci, nous allons tout d'abord créer un répertoire RCS (attention en majuscule) qui contiendra les fichiers à suivre, si nous ne créons pas ce répertoire rcs va stocker dans le même répertoire que le fichier à surveiller ce qui peut polluer inutilement.
mkdir /etc/RCS
Initialisation du contrôle de version
Nous allons indiquer à rcs que nous voulons faire le suivi du fichier rc.conf
ci rc.conf
RCS/rc.conf,v <-- rc.conf
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
Configuration initiale
.
initial revision: 1.1
done
Si nous vérifions notre répertoire RCS, nous pouvons voir qu'il a crée un fichier rc.conf,v
ls -l RCS
-r-xr
r 1 root wheel 694 Jan 3 11:43 rc.conf,v*
Si nous contrôlons notre fichier original
ls -l rc.conf
ls: rc.conf: No such file or directory
Nous pouvons voir qu'il n'existe plus, ce qui peut être problématique pour un fichier aussi important sous freebsd. Nous allons donc demander à rcs de placer une version "propre" dans le répertoire.
co rc.conf
RCS/rc.conf,v --> rc.conf
revision 1.1
done
ls -l rc.conf
-r
rr-- 1 root wheel 494 Jan 3 11:47 rc.conf
Nous pouvons voir que nous n'avons plus les droits d'écriture, ce qui pour le bon déroulement du démarrage du système n'est pas un problème.
Apporter des modifications
Nous allons maintenant demander à rcs de nous fournir une version éditable.
co -l rc.conf
RCS/rc.conf,v --> rc.conf
revision 1.1 (locked)
done
Vous avez remarqué le locked qui nous averti que ce fichier a été verrouillé pour moi et que je suis le seul à pouvoir l'éditer actuellement.
Nous allons apporter nos modifications
echo 'apache24_enable="YES"' >> /etc/rc.conf
Nous allons maintenant rendre le fichier à rcs et y placer un message suivi d'une nouvelle ligne qui ne contient qu'un "."
ci -u rc.conf
RCS/rc.conf,v <-- rc.conf
new revision: 1.2; previous revision: 1.1
enter log message, terminated with single '.' or end of file:
>> Ajout lancement apache 2.4
>> .
done
Le fichier a repris son caractère non éditable.
ls -l rc.conf
-r
rr-- 1 root wheel 494 Jan 3 11:47 rc.conf
Historique des modifications
Nous pouvons visionner l'historique des modifications grâce à rlog
rlog rc.con
RCS file: RCS/rc.conf,v
Working file: rc.conf
head: 1.3
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 3; selected revisions: 3
description:
Configuration initiale
revision 1.3
date: 2017/01/03 11:16:56; author: root; state: Exp; lines: +0 -1
Suppression service OpenVPN
revision 1.2
date: 2017/01/03 11:15:58; author: root; state: Exp; lines: +1 -0
Ajout lancement apache 2.4
revision 1.1
date: 2017/01/03 11:13:27; author: root; state: Exp;
Initial revision
=============================================================================
Nous pouvons voir que le fichier a subit depuis le commit initial deux modifications : un ajout +1 -0 et une suppression de ligne +0 -1
Aller un peu plus loin
Il est possible de voir exactement ce qui a été modifié entre 2 révisions pour cela nous utilisons l'outil rcsdiff
Afficher la différence entre la révision 1.2 et 1.3
rcsdiff -u -r1.2 -r1.3 rc.conf
=================================================================== RCS file: RCS/rc.conf,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- rc.conf 2017/01/03 11:15:58 1.2 +++ rc.conf 2017/01/03 11:16:56 1.3 @@ -10,7 +10,6 @@ -openvpn_enable="YES" nfs_server_enable="YES" nfsv4_server_enable="YES"
Revenir à une version antérieur
Il est aisé de revenir à une version antérieur, mais il est certainement pas prudent de revenir en écrasant toutes les modifications entre l'état actuel et la révision à laquelle, nous souhaitons revenir. Nous allons créer un fichier intermédiaire, où nous pourrons récupérer les modifications et les incorporer à la dernière version (cela reste primaire par rapport à GIT mais ce n'est pas le but de l'outil)
co -r1.2 -p rc.conf > /etc/rc.conf.r1.2
RCS/rc.conf,v --> standard output
revision 1.2
- -p : permet d'affiche le fichier sur la sortie stdout
- > : redirige la sortie vers le fichier
Conclusion
Un outil très pratique pour une efficacité inégalable, une fois que vous avez compris comment cela fonctionne.