{{tag>installation serveur SVN subversion}}
====== Installation d'un dépôt subversion (SVN) ======
[[http://subversion.tigris.org/|Subversion]] est l'un des logiciels de gestion de configuration les plus utilisés.
Nous allons voir ici comment créer un dépôt subversion permettant d'héberger plusieurs projets, le tout accessible en web.
Comme toujours l'installation se fera sur une debian stable (lenny actuellement).
L'authentification se fera sous deux formes :
* Autorisations d'accès via un fichier pour les comptes spécifiques
* Autorisations d'accès pour les comptes systèmes de la machine (via PAM)
===== Prérequis =====
* Un serveur sous debian lenny hébergeant un serveur web (apache 2.2)
* De l'espace disque, ou mieux une partition (éventuellement LVM) dédiée dans /var/lib/svn pour héberger les fichiers
===== Installation =====
* L'installation est relativement simple :apt-get install subversion libapache2-svn libapache2-mod-auth-pam
===== Configuration =====
==== Virtualhost apache ====
=== Création du virtualhost ===
Elle se fait en ajoutant un fichier /etc/apache2/svn.mondomaine.com (je vous laisse adapter le nom a votre cas) :
cat << EOF > /etc/apache2/svn.mondomaine.com
#######################################
# VirtualHost pour le svn
######################################
ServerName svn.mondomaine.com
ServerAdmin webmaster@localhost
SSLEngine on
# certificats SSL: adapter a votre cas
SSLCertificateFile /etc/ssl/certs/svn.mondomaine.com.crt
SSLCertificateKeyFile /etc/ssl/private/svn.mondomaine.com.key
DocumentRoot /var/www/svn.mondomaine.com/htdocs/
ErrorLog /var/log/apache2/svn_mondomaine_com_error.log
CustomLog /var/log/apache2/svn_mondomaine_com_access.log combined
#RedirectMatch ^/$ /svn/
RedirectMatch ^svn$ /
DAV svn
# use SVNParentPath if you have multiple repositories under
# under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...).
# You need either SVNPath and SVNParentPath, but not both.
SVNParentPath /var/lib/svn
#SVNPath /var/lib/svn
AuthType Basic
AuthName "Subversion Repository"
#Fichier d'authentification des utilisateurs
AuthBasicProvider file
AuthUserFile /etc/apache2/dav_svn.passwd
# Puis authentification PAM
AuthPAM_Enabled on
AuthPAM_FallThrough off
AuthBasicAuthoritative off
Satisfy Any
Require valid-user
# pour aller plus loin, si vous voulez donner un look plus sympa , allez regarder sur http://reposstyle.com/
#SVNIndexXSLT "/repos-web/view/repos.xsl"
# fichier contenant les ACL pour les depots SVN
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
Options Indexes MultiViews
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider file
AuthUserFile /etc/apache2/dav_svn.passwd
AuthPAM_Enabled on
AuthPAM_FallThrough off
AuthBasicAuthoritative off
Satisfy Any
Require valid-user
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
ServerSignature Off
EOF
=== Activation du virtualhost ===
* J'ai pris l'habitude de prefixer (s pour SSL) et numeroter (sur 3 digits) les vhosts apache pour être sur de l'ordre d'inclusion si cet ordre est nécessaire c'est pourquoi je n'utilise pas la commande a2ensite. Vous pouvez donc créer un lien symbolique comme suit :
ln -s /etc/apache2/sites-available/svn.mondomaine.com /etc/apache2/sites-enabled/s010_svn.mondomaine.com
si vous souhaitez changer le nom, ou la simple commande sinon :a2ensite svn.mondomaine.com
* Activation des modules apache nécessaires :a2enmod auth_pam dav_svn auth_basic
* Il ne reste plus qu'a faire recharger cette configuration à apache :/etc/init.d/apache2 reload
Si vous avez des erreurs comme "Invalid command 'AuthPAM_Enabled', perhaps misspelled or defined by a module not included in the server configuration" il vous manque surement des modules apache chargés. Dans le cas present le module auth_pam
* vous pouvez vérifier en allant sur la page [[http://svn.mondomaine.com|http://svn.mondomaine.com]] que cela fonctionne (oupa)
=== Creation de la page d'accueil ===
Nous allons créer une page d'accueil pour lister les projets du subversion :
cat << EOF > /var/www/svn.mondomaine.com/htdocs/index.php
Liste des projets du Subversion
\n";
$repo_root="/var/lib/svn";
$repo_base_url="https://svn.mondomaine.com/svn";
foreach (glob($repo_root."/*") as $file) {
$repo=str_replace($repo_root."/", "", $file);
if (is_dir($file) && $repo != 'lost+found') {
echo "- $repo
\n";
}
}
echo"