Lors du renouvellement d'un serveur, j'ai eu besoin de déplacer une centaine de dépôts SVN sur le nouveau.
Pour mémo j'en profite pour me faire une petite procédure avec installation de subversion et connexion sur LDAP.
Installation du serveur SVN sur Debian :
apt-get update
apt-get install subversion subversion-tools
Pour la partie LDAP j'ai aussi besoin de ça :
apt-get install libapache2-svn apache2-mpm-worker
Ensuite, il faut créer l’arborescence de base. Dans mon cas je la place dans /var/svn
cd /var
mkdir svn
A partir d'ici, le SVN fonctionne. Il est déjà possible de créer un premier dépôt.
svnadmin create subversion/depot
Configuration de la liaison LDAP :
On commence par adapter le fichier /etc/apache2/mods-enabled/dav_svn.conf à nos besoins.
<Location /svn>
DAV svn
SVNParentPath /var/svn
SVNAutoversioning on
AuthzSVNAccessFile /var/svn/svnaccess
AuthBasicProvider ldap
AuthType Basic
AuthName "Connection subversion"
AuthLDAPURL "ldap://ldap.entreprise:389/DC=mon,DC=entreprise,DC=net?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "CN=Utilisateur LDAP,DC=mon,DC=entreprise,DC=net"
AuthLDAPBindPassword "MotDePasse"
Require valid-user
</Location>
Relancer apache pour valider.
/etc/init.d/apache2 restart
Ensuite on crée le fichier /var/svn/svnaccess qui vas contenir la liste des droits:
Dans mon cas j'ai créé un groupe @admin et j'ai placé Benoit qui a tous les droits sur l'ensemble des repository.
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
### - a single user,
### - a group of users defined in a special [groups] section,
### - an alias defined in a special [aliases] section,
### - all authenticated users, using the '$authenticated' token,
### - only anonymous users, using the '$anonymous' token,
### - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research
# Institute/CN=Joe Average
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
admin = benoit,toto
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[/]
@admin = rw
Passons à la migration des dépôts en deux étapes.
Première étape sauvegarder l'ensemble des dépôts. Pour cela j'utilise le dump de SVN et je zip l'ensemble dépôt par dépôt.
Script d'export export.sh:
for repo in `ls -1`
do
echo "Processing $repo"
svnadmin dump -q --deltas $repo | gzip -c > "/var/svn/"$repo".svn.gz"
done
Déplacer ensuite les zip sur le nouveau serveur avec filezilla par exemple.
Puis, utiliser le script d'import.
Celui-ci dezip les dump puis crée les dépôts svn pour finir par replacer les données.
Script d'import import.sh:
for repo in `ls -1`
do
temp=`echo $repo | sed 's/\..*//'`
echo "Creation du depot: $temp"
svnadmin create $temp &&
gzip -d |
sed -e '/^svn:log$/,/^PROPS-END$/ s/\x0D/ /' -e '/^svn:ignore$/,/^PROPS-END$/ s/\x0D/\n/' |
cat $repo | gzip -d | svnadmin load -q --force-uuid $temp
done
Si tout s'est bien passé, se rendre sur la page http://votreserveur/svn/depot
Vous devriez retrouver vos dépôts.