Installation et mise en place d'un dépôt subversion

De Linux Server Wiki
Version datée du 16 décembre 2015 à 20:09 par Pfoo (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche


Tuto plus vraiment à jour

Ce howto a été écrit au départ pour debian etch puis a été adapté pour debian lenny. Il reste cependant valable la plupart du temps pour ces deux versions de debian.

Ce howto va vous montrer comment mettre en place un dépot subversion. Le domaine utilisé est svn.pfoo.domain.tld qui est un alias pour srv.domain.tld. srv.domain.tld est le domaine identifiant le serveur sur lequel se trouvera le dépôt subversion. Il possède l'adresse ipv4 213.186.47.110 et l'adresse ipv6 2001:41d0:1:d6e::110.

Ce howto est construit de manière à respecter mon howto sur apache2. Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027

Installation et création du dépôt

Pour installer svn, tapez:

aptitude install subversion subversion-tools

On peut maintenant créer le dépôt subversion. Dans mon cas, je vais le créer dans /srv/http/domain.tld/pfoo.domain.tld/svn/

svnadmin create /srv/http/domain.tld/pfoo.domain.tld/svn/

Le dépôt devra être accessible par apache en lecture ainsi qu'en écriture :

chmod -R g+w /srv/http/domain.tld/pfoo.domain.tld/svn/db/
mkdir -p /srv/http/domain.tld/pfoo.domain.tld/svn/dav/activities.d
chmod -R g+w /srv/http/domain.tld/pfoo.domain.tld/svn/dav/
chown -R root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn/

Gardez à l'esprit que apache doit pouvoir exécuter (permission +x) tous les dossiers en amont de /srv/http/domain.tld/pfoo.domain.tld/svn/.

Ajout de la redirection dans la zone dns de bind

Éditez le fichier de la zone dns de votre domaine (/srv/bind/domain.tld.hosts dans mon cas) et ajoutez les lignes suivantes :

srv.domain.tld.  IN      A       213.186.47.110
srv.domain.tld.  IN      AAAA    2001:41d0:1:d6e::110
svn.pfoo        IN      CNAME   srv.domain.tld.

Bien-sur si vous ne disposez pas d'ipv6 vous n'avez pas besoin du champs AAAA.

Installation et configuration du module svn de apache2

Installation du module apache svn

Apache2 fournit un module qui permet de gérer le dépôt svn. Ce module est disponible via le paquet libapache2-svn. Nous allons l'installer :

aptitude install libapache2-svn

Normalement, le module est ajouté à la liste des modules activés automatiquement. Vous devriez alors voir les lignes suivantes à la fin de l'installation:

Enabling dav as a dependency
Module dav installed; run /etc/init.d/apache2 force-reload to enable.
Module dav_svn installed; run /etc/init.d/apache2 force-reload to enable.

Si ce n'est pas le cas, activez le module en tapant :

a2enmod dav_svn

Dans certains cas, si vous utilisez https, les opérations de déplacement (move) et de copie (copy) de subversion peuvent poser problème. La solution est d'utiliser le module headers de apache 2:

a2enmod headers

Reloadez ensuite apache2

/etc/init.d/apache2 restart

Configuration d'une vhost

Éditez le fichier /etc/apache2/vhosts/svn.pfoo.domain.tld.conf et ajoutez y les lignes suivantes:

<VirtualHost 213.186.47.110:80>
        ServerName svn.pfoo.domain.tld
        Include sites/svn.pfoo.domain.tld.conf
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::110]:80>
        ServerName svn.pfoo.domain.tld
        Include sites/svn.pfoo.domain.tld.conf
</VirtualHost>

Si vous voulez une vhost sécurisée en ssl, je vous renvois à mon howto sur apache2.

On peut maintenant créer le fichier de configuration du virtualhost. Ouvrez le fichier /etc/apache2/sites/svn.pfoo.domain.tld.conf avez votre éditeur de texte et ajoutez les lignes suivantes:

#Cette ligne est a décommenter si vous n'arrivez pas à utiliser les commandes copy et move de subversion en vous connectant en https:
#RequestHeader edit Destination ^https http early
   <location />
       # Chargement du module DAV svn (subversion)
       DAV svn
       # chemin complet vers le dépôt SVN
       SVNPath /srv/http/domain.tld/pfoo.domain.tld/svn/
       #On sécurise le tout par mot de passe.
       # htpasswd permettra de créer facilement le fichier
       AuthType Basic
       AuthName "pfoo's SVN"
       AuthUserFile /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd
       Require valid-user

       # fichier de configuration des permissions du dépot
       AuthzSVNAccessFile /srv/http/domain.tld/pfoo.domain.tld/svn.perm
   </location>
</nowiki>

Création des utilisateurs

Nous allons créer un utilisateur pfoo ayant tous les droits sur le dépôt, et un utilisateur jonass n'ayant que des droits limités. Comme d'habitude, on préfèrera crypter les mots-de-passes en SHA (option -s)

htpasswd -cs /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd pfoo
htpasswd -s /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd jonass

On donne les bonnes permissions au fichier contenant les utilisateurs:

chown root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd

On peut maintenant créer le fichier contenant les accès des deux utilisateurs. Ouvrez le fichier /srv/http/domain.tld/pfoo.domain.tld/svn.perm et entrez y les lignes suivantes:

[groups]
author = pfoo
reader = jonass
[/]
@author = rw
@reader = r

Petite explication :

  • [groups] permet de définir les groupes d'utilisateurs. Chaque groupe peut contenir plusieurs utilisateurs séparés par des virgules (,).
  • [/] permet de définir les permissions de la racine du dépôt SVN. Tel que je l'ais fait ici, les membres du groupe author auront un accès en lecture et en écriture, alors que les membres du groupe reader n'auront qu'un accès en lecture. Les groupes sont précédés d'un @

Comme d'habitude, changer l'appartenance du fichier:

chown root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn.perm

Le moment de vérité

Il ne reste plus qu'à reloader apache

/etc/init.d/apache2 reload

Et essayer de se connecter avec son navigateur. Normalement, vous devriez tomber sur une fenêtre vous demandant de vous loguer :)

Backup

On ne le redira jamais assez : les backups sont obligatoires pour toute les données importantes. Et particulièrement pour SVN, étant donné qu'il vous permet de gérer vos projets. Quoi de plus horrible que de perdre la totalité des révisions de son projet suite à un crash disque ? Alors bien-sur, le principe de SVN fait qu'il est en soi un système de backup, étant donné qu'en cas de crash du serveur, la révision HEAD (la plus récente) sera disponible chez tous vos collaborateurs. Mais perdre les anciennes révisions n'est peut-être pas acceptable pour tous.

Pour réaliser un backup, vous pouvez utiliser soit svnadmin, soit un petit script inclut avec svn qui se nomme svn-backup-dumps.
svn-backup-dumps est plus facile à utiliser et permet plusieurs options, comme par exemple, gziper les backups.

Pour réaliser votre backup avec svn-backup-dumps :

svn-backup-dumps /srv/http/domain.tld/pfoo.domain.tld/svn/ /root/backup/

Pour restaurer un backup, il faut utiliser svnadmin :

svnadmin load /srv/http/domain.tld/pfoo.domain.tld/svn/ < /root/backup/sauvegarde.svndmp

Supprimer les anciennes révisions

Après un certain temps d'utilisation vous voudrez peut-être supprimer les anciennes révisions de votre dépôt afin de faire le ménage et réduire la taille du dépôt. Pour réaliser cette action, il faut faire un dump des révisions que vous voulez garder, remettre le dépôt à zéro, puis recharger le dump

Dans mon cas, je ne souhaite conserver que les 10 dernières révisions et je suis à la révision 453 :

svnadmin dump /srv/http/domain.tld/pfoo.domain.tld/svn/ -r 443:head > repository-443-head.dump
rm -rf /srv/http/domain.tld/pfoo.domain.tld/svn/
svnadmin create /srv/http/domain.tld/pfoo.domain.tld/svn/
svnadmin load /srv/http/domain.tld/pfoo.domain.tld/svn/ < repository-443-head.dump
------ Nouvelle révision 11 propagée (commit), basée sur révision 453

Voila. Il ne vous reste plus qu'à faire un checkout sur le dépôt local de votre pc (car les révisions ne correspondront plus donc un simple update ne fonctionnera pas).

Documentation

http://subversion.tigris.org/