Dédibox (3) : Subversion et WebDAV
30 avril 2007
Subversion
Pour faire du "versionning" de code source, j'utilisais auparavant CVS. Mais maintenant j'ai bien envie d'essayer Subversion, qui combine la facilité d'utilisation de CVS avec de nouvelles fonctionnalités bien pratiques.
$ sudo apt-get install subversion libapache2-svn $ a2enmod dav_svn $ mkdir /var/svn $ svnadmin create /var/svn/projet $ chown -R www-data:www-data /var/svn
$ vi /etc/apache2/mods-enabled/dav_svn.conf
$ htpasswd2 -c /etc/apache2/dav_svn.passwd login
Dans un fichier de configuration de site Apache, on fait ce qu'il faut pour que SVN soit accessible par WebDAV :
<Location> DAV svn SVNPath /var/svn/projet AuthType Basic AuthName "SVN Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user </Location>
$ apache2ctl restart
Par défaut, SVN ne permet pas d'utiliser le mot-clé $Id$. Pour le permettre, il faut modifier le fichier /etc/subversion/config :
[miscellany] enable-auto-props = yes [auto-props] *.php = svn:keywords=Id
Ici, je l'ai autorisé pour les fichiers PHP uniquement.
Ensuite, on peut utiliser le système de hooks de Subversion, pour lui faire réaliser automatiquement des actions lorsque certaines opérations sont exécutées.
Par exemple, j'ai trouvé sur un blog un hook pre-commit pour empêcher de commiter sur un tag :
REPOS="$1" TXN="$2" # Check for modification of tags. # Reject tag modifications except creation and deletion SVNLOOK=/usr/bin/svnlook echo "=============== changed ================" >> /tmp/pre-commit.log $SVNLOOK changed -t "$TXN" "$REPOS" >> /tmp/pre-commit.log $SVNLOOK changed -t "$TXN" "$REPOS" | grep "tags/" > /dev/null if [ $? -eq 0 ] ; then $SVNLOOK changed -t "$TXN" "$REPOS" | egrep "^[AD][[:space:]]+(.*/)?tags/[^/]+/$" >/dev/null if [ $? -ne 0 ] ; then echo >&2 "Les tags ne sont pas modifiables" exit 1 fi fi # # Make sure that the log message contains some text. $SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null if [ $? -ne 0 ] ; then echo >&2 "Pas de commentaires, pas de commit" exit 1 fi exit 0
Sur un autre blog, j'ai trouvé un hook post-commit, qui envoie un email à chaque commit :
#!/bin/sh REPOS="$1" REV="$2" AUTHOR=`svnlook author --revision $REV $REPOS` SENDER="somebody@somewhere.org" RECIPIENT="quelqun@quelquepart.org" SUBJECT=`echo -n "[SVN commit] R-$REV ($AUTHOR) Log: "; \ svnlook log --revision $REV $REPOS | head -n1` MESSAGE=`\ echo "REPOS: $REPOS"; \ echo "REV: [$REV]"; \ echo "AUTHOR: ($AUTHOR)"; \ echo; \ echo "LOG:"; \ echo "----"; \ svnlook log --revision $REV $REPOS; \ echo; \ echo "FILES:"; \ echo "------"; \ svnlook changed --revision $REV $REPOS` /usr/local/bin/sendEmail -f $SENDER -t $RECIPIENT -u "$SUBJECT" -m "$MESSAGE" > /dev/null
(attention, ce hook utilise le script sendEmail.pl)
WebDAV
Maintenant que j'ai installé un serveur Subversion (SVN) sur le serveur, avec accès par WebDAV, je peux maintenant configurer un accès WebDAV plus classique, juste pour faire du partage de fichiers.
Dans la configuration Apache, je rajoute un VirtualHost qui est dédié à cela :
<VirtualHost> ServerAdmin amaury@amaury.net ServerName files.amaury.net DocumentRoot /home/http/amaury.net/files DavLockDB /tmp/data.files.lock Alias /icons /usr/share/apache2/icons <Directory> Options FollowSymLinks +ExecCGI AllowOverride All DAV On DAVMinTimeout 600 DAVDepthInfinity On AllowOverride AuthConfig AuthName "Acces WebDAV restreint" AuthType Basic AuthUserFile /home/http/amaury.net/htpasswd <Limit> Require valid-user Options Indexes FollowSymLinks </Limit> </Directory> LogLevel warn ErrorLog /var/log/apache2/files.amaury.net-error.log CustomLog /var/log/apache2/files.amaury.net-access.log combined </VirtualHost>
Il faut évidemment penser à créer un fichier /home/http/amaury.net/htpasswd en utilisant la commande htpasswd2.
Si l'utilisation de fichiers htpasswd est gênante, il est possible d'utiliser le module Apache mod_auth_mysql, qui sert à authentifier les utilisateurs grâce à une base de données MySQL. Cf. cette documentation.


Pioche.fr



