Libre à vous de partager

Subversion est un logiciel de gestion de sources centralisés. Nous allons voir comment bien démarrer avec subversion en 5 étapes. A l’issue de cet article vous serait en mesure de l’utiliser de manière basique avec l’interface graphique après avoir créer votre premier dépôt.

Datant du début des années 2000, il dépend aujourd’hui de la fondation Apache. Si vous cherchez un logiciel de suivi de source simple à mettre en place et à utiliser, subversion est un bon choix.

Je l’utilise pour plusieurs projets afin de les maintenir synchronisés entre mes différents ordinateurs. En fin de journée, je pousse automatiquement mes modifications vers le serveur qui se trouve sur Internet. Si je dois reprendre à partir d’un PC portable, il me suffit de me synchroniser au serveur.

Étape 1 : installer le serveur subversion

Installation en ligne de commande

Pour bien démarrer avec subversion, il faut commencer par l’installer. Son installation est plutôt simple et se fait via le gestionnaire d’application. Je détaillerai uniquement l’installation à partir d’un serveur faisant parti de la famille Debian.

sudo apt install subversion
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  libapr1 libaprutil1 libserf-1-1 libsvn1 libutf8proc2
Paquets suggérés :
  db5.3-util libapache2-mod-svn subversion-tools
Les NOUVEAUX paquets suivants seront installés :
  libapr1 libaprutil1 libserf-1-1 libsvn1 libutf8proc2 subversion
0 mis à jour, 6 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 2 604 ko dans les archives.
Après cette opération, 10,4 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o

Création de l’utilisateur dédié

Pour bien démarrer avec subversion, il est conseillé de créer un utilisateur dédié. Je rajoute la commande -s /usr/sbin/nologin afin de l’empêcher de pouvoir se connecter en mode terminal. Sa vocation est de juste démarrée le serveur subversion.

root@serveuradminlibre:~# useradd -r -s /usr/sbin/nologin svn
root@serveuradminlibre:~# su svn # Permet de vérifier que l'on ne peut pas se logger
This account is currently not available.

Puis nous allons créer le dossier qui va nous servir à stocker les différents dépôts. Par défaut nous allons le mettre dans /var/svn. Une fois qu’il est créé avec le compte root, il ne faut pas oublier de changer le propriétaire et le groupe du dossier et de l’attribuer à svn.

root@serveuradminlibre:~# mkdir /var/svn
root@serveuradminlibre:~# chown svn:svn /var/svn

Note : dans un environnement de production, il est conseillé de le mettre sur un point de montage pour bien démarrer avec subversion.

Configuration du pare-feu

Si vous avez un pare-feu activé – ce que je vous conseille vivement – il faut ouvrir les ports correspondants en IPv4 et IPv6 si votre serveur dispose des deux types d’adresse.

root@serveuradminlibre:~# ufw allow svn
Rule added
Rule added (v6)
root@serveuradminlibre:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
3690/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
3690/tcp (v6)              ALLOW       Anywhere (v6)

Le port par défaut du démon svn est le port 3690. Si vous utilisez un autre pare-feu qui ne connaît pas le port par défaut, c’est celui qu’il faut renseigner. Dans ce cas, je vous renvoie vers la documentation de votre pare-feu. Bien entendu, si vous êtes sur un réseau d’entreprises qui possèdent des pare-feux physiques, il faut faire la modification sur tous les pare-feux.

Note : dans mon cas, il n’y a que le ssh qui soit autorisé. C’est normal vu que la machine ne sert qu’à préparer les articles. Sur une machine en production, vous aurez beaucoup plus de règles actives.

Automatiser le démarrage

Pour bien démarrer avec subversion, il y une dernière chose à faire. Par défaut, le paquet subversion n’est pas fourni avec unité SystemD, ni même avec des scripts InitV. Cela est toujours été le cas. Par conséquent, il faut créer un script de lancement. La méthode la plus simple est de remplir la crontab. Au choix, vous pouvez prendre la crontab root ou la crontab de l’utilisateur. Les deux options ont leurs avantages et leurs inconvénients.

#crontab svn
root@serveuradminlibre:~# sudo -u svn crontab -e
@reboot svnserve -d -r /var/svn
#crontab root
root@serveuradminlibre:~# crontab -e
@reboot sudo -u svn svnserve -d -r /var/svn

Une fois que cela est fait vous pouvez redémarrer le serveur.

Note : @reboot ordonne de lancer la commande qui suit à chaque démarrage du serveur, que celui-ci ce log ou pas sur le serveur. Ce qui est utile pour nous, vu que le compte svn ne peut pas se logger sur la machine.

Étape 2 : configurer le premier dépôt

Création du dépôt

Pour bien démarrer avec subversion, il va falloir maintenant créer un dépôt sur le serveur. La méthode est la même que ce soit le premier dépôt ou le millième.

Nous nous rendons dans le dossier des dépôts.

root@serveuradminlibre:~# cd /var/svn

Puis nous créons le dépôt.

root@serveuradminlibre:/var/svn# sudo -u svn svnadmin create mon_super_projet

Enfin nous vérifions que ce dépôt est bien initialisé.

root@serveuradminlibre:/var/svn/mon_super_projet# sudo -u svn svnadmin info mon_super_projet
Chemin : .
UUID: f52d5844-1acc-4eb8-9fe5-213abebccb38
Revisions: 0
Repository Format: 5
Compatible With Version: 1.10.0
Repository Capability: mergeinfo
Filesystem Type: fsfs
Filesystem Format: 8
FSFS Sharded: yes
FSFS Shard Size: 1000
FSFS Shards Packed: 0/0
FSFS Logical Addressing: yes
Configuration File: db/fsfs.conf

Modification des fichiers de configurations

Toujours dans cette deuxième étape pour bien démarrer avec subversion, il faut maintenant personnaliser deux fichiers de configuration du projet. Le premier est le fichier svnserve.conf. C’est ici que vont se régler entre autres les autorisations d’accès et d’écriture, le mode d’authentification et la description du projet qui sera affiché au client lors de la récupération du dépôt.

  • Dé-commenter la ligne : anon-access = read. Vous pouvez la modifier en anon-access = none si vous ne souhaitez pas que les utilisateurs non authentifiés aient accès au dépôt. Si votre dépôt est public, il vaut mieux laisser l’accès en lecture. Si votre dépôt est privé, il vaut mieux le retirer.
  • Dé-commenter la ligne auth-access = write
  • Dé-commenter la ligne password-db = passwd
  • Dé-commenter la ligne realm =… et remplacer le texte en realm = Description de mon projet
root@serveuradminlibre:/var/svn/mon_super_projet# cat conf/svnserve.conf
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository.  (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.apache.org/ for more information.

[general]
### The anon-access and auth-access options control access to the
### repository for unauthenticated (a.k.a. anonymous) users and
### authenticated users, respectively.
### Valid values are "write", "read", and "none".
### Setting the value to "none" prohibits both reading and writing;
### "read" allows read-only access, and "write" allows complete
### read/write access to the repository.
### The sample settings below are the defaults and specify that anonymous
### users have read-only access to the repository, while authenticated
### users have read and write access to the repository.
anon-access = none
auth-access = write
### The password-db option controls the location of the password
### database file.  Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
password-db = passwd
...
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.  The default realm
### is repository's uuid.
realm = Mon super projet

Le second est le fichier passwd. C’est ici que seront stockées les mots de passe des utilisateurs autorisés.

root@serveuradminlibre:/var/svn/mon_super_projet# cat conf/passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
harry = harryssecret
sally = sallyssecret

Attention, les mots de passe sont stockés en clair. Par conséquent, il faut s’assurer que le groupe et les autres utilisateurs n’ont pas la capacité de le lire. Le fichier est comme ci-dessous.

root@serveuradminlibre:/var/svn/mon_super_projet# chmod 600 conf/passwd

Note : il existe d’autres façons de rendre accessible des dépôts svn, notamment via un serveur Web. Dans ce cas, il est possible d’interfacer les dépôts svn avec un annuaire tel que OpenLDAP.

Il n’est pas nécessaire de redémarrer le serveur svnserve après avoir modifié un de ses fichiers. La modification sera effective dès la prochaine tentative d’accès.

Étape 3 : installer un client subversion

Pour cette troisième étape de bien démarrer avec subversion, nous allons installer le client KDEsvn. Ce dernier est disponible pour les environnements KDE et il est présent dans les dépôts par défaut. Son installation ne présente pas de difficultés notables. Je ne donnerai que la version en ligne de commande. En fonction des logiciels déjà installés sur votre PC, il y aura plus ou moins de dépendance installée.

root@admin-libre:~# apt install kdesvn
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  fonts-liberation2 graphviz kdesvn-kio-plugins kompare kpart5-kompare libann0 libapr1 libaprutil1 libcdt5 libcgraph6 libgts-0.7-5 libgts-bin libgvc6 libgvpr2 libkomparediff2-5 libkompareinterface5 liblab-gamut1 libpathplan4
  libserf-1-1 libsvn1 libutf8proc2
Paquets suggérés :
  graphviz-doc kdiff3
Les NOUVEAUX paquets suivants seront installés :
  fonts-liberation2 graphviz kdesvn kdesvn-kio-plugins kompare kpart5-kompare libann0 libapr1 libaprutil1 libcdt5 libcgraph6 libgts-0.7-5 libgts-bin libgvc6 libgvpr2 libkomparediff2-5 libkompareinterface5 liblab-gamut1 libpathplan4
  libserf-1-1 libsvn1 libutf8proc2
0 mis à jour, 22 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 9 187 ko dans les archives.
Après cette opération, 25,3 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o

Étape 4 : récupérer un dépôt

Nous sommes bientôt à la fin de ce tutoriel sur bien démarrer avec subversion. Nous allons maintenant configurer le client afin qu’il se connecte au serveur que nous avons créé lors de la première étape pour bien démarrait avec subversion. Nous utiliserons pour cela le client que nous avons installé à l’étape précédente pour bien démarrer avec subversion.

Interface vide de KDEsvn
Interface vide de KDEsvn

Pour cela il faut cliquer sur le bouton extraire. Cela va ouvrir une nouvelle fenêtre qui nous demande de nombreuses informations. En dehors de l’URL du serveur et du dossier cible, nous n’allons pas modifier les options par défaut.

Boite de dialogue de récupération d'un dépôt
Boite de dialogue de récupération d’un dépôt

Le premier champ est l’URL de notre serveur. Il se compose de trois parties distinctes :

  • svn://: il s’agit du protocole que nous utilisons. Celui-ci est le plus simple. Sachez qu’il en existe d’autres que nous n’utiliserons pas.
  • L’adresse du serveur : elle peut être soit au format adresse IP V4, IPv6 ou bien sous tous noms de domaine correctement résolu.
  • Le nom du projet : c’est celui que nous avons utilisé lors de la création du dépôt.

Pour le dossier cible, j’ai personnellement l’habitude de créer dans mon dossier personnel un dossier svn dans lequel je rapatrie tous les dépôts sur lesquels je travaille. Pour avoir un dossier par projet, il faut penser à créer un sous dossier pour chaque dossier. Sinon, vous aurez une erreur comme quoi le dossier source n’est pas vide.

Une fois que l’on a cliqué sur le bouton OK, la fenêtre se ferme et une nouvelle fenêtre s’ouvre demandant une authentification. Si le dépôt n’en requiert pas, vous pouvez tout simplement annuler.

Boite de dialogue de demande de mot de passe
Boite de dialogue de demande de mot de passe

Sinon il va falloir le remplir en fonction des informations d’accès que vous avez. Attention, par défaut KDEsvn va remplir le nom d’utilisateur avec le nom d’utilisateur de la session.

Boite de dialogue de demande de mot de passe
Boite de dialogue de demande de mot de passe

Si vous êtes-vous un environnement KDE, il vous proposera d’enregistrer le mot de passe dans le portefeuille de votre session. Si vous cochez cette case, il ne vous demandera plus le mot de passe.

Note : il est possible que la fenêtre d’authentification réapparaisse une seconde fois. Remettez alors votre mot de passe et cela devrait être bon.

Étape 5 : envoyer des modifications au dépôt

Nous voilà arrivés à la dernière étape de bien démarrer avec subversion. Pour les besoins de la démonstration, j’ai positionné un fichier texte dans le dossier de mon_super_projet.

Dans KDEsvn, le fichier apparaît alors surligné en gris. Son état est « non versionné ». En effet, il a détecté une modification de l’architecture du dossier, mais il est incapable de savoir ce que l’on veut faire.

Interface Kdesvn montrant un fichier non versionné
Interface Kdesvn montrant un fichier non versionné

Un clic droit sur l’élément ouvre un menu avec plusieurs options. La première est d’ajouter le fichier, c’est celle que nous allons prendre en cliquant dessus tout simplement. La seconde est d’ignorer ou non l’élément courant. Si l’élément n’est pas version né, cela placera l’élément en mode ignorer. Si l’élément est en mode ignorer, cela le mettra en non version n’est point. La troisième option permet de supprimer le fichier ou le dossier, mais je ne vous le conseille pas. Je préfère faire les modifications directement dans l’explorateur de fichiers ou en ligne de commande.

Menu de versionnage de KDEsvn
Menu de versionnage de KDEsvn

À la suite de l’insertion du fichier au dépôt, vous pouvez remarquer que plusieurs icônes ont changé. La flèche vers le haut qui est apparu au niveau du nom du dépôt, signale que la version sur le disque dur est supérieure à celle en cache. Un petit plus vert est apparu au niveau du fichier pour montrer qu’il s’agit d’un ajout. Un petit moins rouge signale que le fichier a été supprimé.

Interface Kdesvn montrant un fichier versionné non publié
Interface Kdesvn montrant un fichier versionné non publié

En cliquant sur le bouton publication, vous ouvrez une nouvelle fenêtre qui va lister la totalité des éléments impactés par la mise à jour et va vous demander un message. Ce dernier n’est pas obligatoire par défaut, mais il est vivement recommandé. Je vous conseille d’y mettre toutes les informations importantes qui concernent les modifications effectuées. En effet ces messages sont consultables par la suite et donc peuvent permettre des mois ou des années plus tard de se souvenir pourquoi la modification est effectuée dans notre cas nous n’allons pas mettre grand-chose de lui qu’il s’agit juste de l’initialisation du dépôt.

Boite de dialogue de publication
Boite de dialogue de publication

En cliquant sur OK cela lancera la procédure de publication.

Une fois celle-ci terminée, les icônes disparaîtront et le journal des actions qui se trouvent en bas à gauche sera rempli.

Interface KDEsvn après publication de la mise à jour de ce tutoriel bien démarrer avec subversion
Interface KDEsvn après publication de la mise à jour

Note : si vous êtes plusieurs à travailler sur un même dépôt, il est vivement conseillé de faire une mise à jour du dossier présent sur votre machine – appelé aussi dossier local – avant de faire la publication. Ainsi, s’il y a des conflits, vous pourrez les gérer en amont de la publication et pas pendant la publication.

Conclusion de bien démarrer avec subversion

Nous venons de voir comment bien démarrer avec subversion. À part la partie serveur qui était en ligne de commande, nous n’avons abordé que la partie graphique de son utilisation. Lors d’un prochain article, nous verrons comment l’utiliser directement en ligne de commande.

Laisser un commentaire