Installation et mise en place d'un dépôt subversion
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 groupereader
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).