Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
sysadmin:install_svn [2010/09/30 11:15] james créée |
sysadmin:install_svn [2012/10/03 11:09] (Version actuelle) james ajout tags |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag>installation serveur SVN subversion}} | ||
====== Installation d'un dépôt subversion (SVN) ====== | ====== Installation d'un dépôt subversion (SVN) ====== | ||
Ligne 6: | Ligne 7: | ||
Comme toujours l'installation se fera sur une debian stable (lenny actuellement). | 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 ===== | ===== Prérequis ===== | ||
* Un serveur sous debian lenny hébergeant un serveur web (apache 2.2) | * 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 ===== | ===== Installation ===== | ||
- | * L'installation est relativement simple :<code>apt-get install subversion libapache2-svn</code> | + | * L'installation est relativement simple :<code>apt-get install subversion libapache2-svn libapache2-mod-auth-pam</code> |
===== Configuration ===== | ===== Configuration ===== | ||
==== Virtualhost apache ==== | ==== Virtualhost apache ==== | ||
- | <code>cat << EOF > /etc/apache2/svn.mondomaine.com | + | === 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) :<code> | ||
+ | cat << EOF > /etc/apache2/svn.mondomaine.com | ||
####################################### | ####################################### | ||
# VirtualHost pour le svn | # VirtualHost pour le svn | ||
Ligne 24: | Ligne 32: | ||
ServerAdmin webmaster@localhost | ServerAdmin webmaster@localhost | ||
SSLEngine on | 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/ | DocumentRoot /var/www/svn.mondomaine.com/htdocs/ | ||
Ligne 33: | Ligne 45: | ||
<Location /svn> | <Location /svn> | ||
- | # Uncomment this to enable the repository | ||
DAV svn | DAV svn | ||
- | # Alternatively, use SVNParentPath if you have multiple repositories under | + | # use SVNParentPath if you have multiple repositories under |
# under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...). | # under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...). | ||
# You need either SVNPath and SVNParentPath, but not both. | # You need either SVNPath and SVNParentPath, but not both. | ||
Ligne 47: | Ligne 58: | ||
AuthUserFile /etc/apache2/dav_svn.passwd | AuthUserFile /etc/apache2/dav_svn.passwd | ||
- | #Authentification PAM | + | # Puis authentification PAM |
AuthPAM_Enabled on | AuthPAM_Enabled on | ||
AuthPAM_FallThrough off | AuthPAM_FallThrough off | ||
Ligne 55: | Ligne 66: | ||
Require valid-user | Require valid-user | ||
- | SVNIndexXSLT "/repos-web/view/repos.xsl" | + | # 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 | AuthzSVNAccessFile /etc/apache2/dav_svn.authz | ||
</Location> | </Location> | ||
Ligne 85: | Ligne 98: | ||
EOF | EOF | ||
</code> | </code> | ||
+ | === 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 :<code> | ||
+ | ln -s /etc/apache2/sites-available/svn.mondomaine.com /etc/apache2/sites-enabled/s010_svn.mondomaine.com</code> si vous souhaitez changer le nom, ou la simple commande sinon :<code>a2ensite svn.mondomaine.com</code> | ||
+ | * Activation des modules apache nécessaires :<code>a2enmod auth_pam dav_svn auth_basic</code> | ||
+ | * Il ne reste plus qu'a faire recharger cette configuration à apache :<code>/etc/init.d/apache2 reload</code> | ||
+ | <note> 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</note> | ||
+ | * 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 :<code> | ||
+ | cat << EOF > /var/www/svn.mondomaine.com/htdocs/index.php | ||
+ | <?php | ||
+ | // Filtrage pour interdire acces depuis exterieur a la liste des projets | ||
+ | // remplacer x.y.z.t par votre adresse IP , ajouter au besoin d'autres adresses | ||
+ | if ($_SERVER['REMOTE_ADDR'] == 'x.y.z.t') { | ||
+ | // On construit la liste des projets | ||
+ | echo "<html><h1>Liste des projets du Subversion</h1><ul>\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 "<li><a href=\"$repo_base_url/$repo\">$repo</a></li>\n"; | ||
+ | } | ||
+ | } | ||
+ | echo"</ul></html>"; | ||
+ | } else { | ||
+ | echo "Acces NON autorise"; | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | EOF | ||
+ | </code> | ||
+ | C'est bien gentil tout ca, mais cette liste de dépôt est pour l'instant désespérément vide, nous allons remédier à ça, mais tout d'abord il faut remplir le fichier d'ACL pour permettre la creation de dépôts. | ||
+ | |||
+ | ==== Fichier ACLs ==== | ||
+ | Les accès au dépôts et sous dépôts sont à autoriser dans le fichier /etc/apache2/dav_svn.authz mentionné ci dessus. | ||
+ | <code>cat << EOF > /etc/apache2/dav_svn.authz | ||
+ | ################################################# | ||
+ | # groupes | ||
+ | # definition des groupes utilisateurs, a adapter a vos besoins | ||
+ | ################################################# | ||
+ | [groups] | ||
+ | alldev = john, bang, bob | ||
+ | maindev = alice, claudy | ||
+ | devRead = luke, georges | ||
+ | |||
+ | ################################################# | ||
+ | # droits d'acces aux depots | ||
+ | ################################################# | ||
+ | |||
+ | # utilisateur qui a accès à tous les depots | ||
+ | # Utilise pour la création d'un depot via le script /usr/local/sbin/createRepoSvn.sh | ||
+ | [/] | ||
+ | usersvncreate = rw | ||
+ | |||
+ | # exemple de droits | ||
+ | #[mondepot1:/] | ||
+ | #@maindev = rw | ||
+ | #georges = rw | ||
+ | #@devRead = r | ||
+ | # on peu limiter les droits a une sous arborescence du projet : | ||
+ | #[mondepot1:/trunk] | ||
+ | #alice = rw | ||
+ | |||
+ | EOF</code> | ||
+ | |||
+ | Restrictions d'acces a ce fichier :<code> | ||
+ | chown root:www-data /etc/apache2/dav_svn.authz | ||
+ | chmod 640 /etc/apache2/dav_svn.authz | ||
+ | </code> | ||
+ | |||
+ | ===== Création du premier dépôt ===== | ||
+ | |||
+ | La création de dépôt est une opération courante, que nous allons donc automatiser grâce a un petit script qui-va-bien. | ||
+ | Ce script va donc créer le dépot SVN avec un nom passé en parametre. Il crée aussi une arborescence indispensable a tout dépot : | ||
+ | * depot | ||
+ | * depot/trunk | ||
+ | * depot/branches | ||
+ | * depot/tags | ||
+ | |||
+ | qui vous permettra d'héberger respectivement le trunk, les branches et les tag de ce projet. | ||
+ | |||
+ | <code>cat << EOF > /usr/local/sbin/createRepoSvn.sh | ||
+ | #!/bin/bash | ||
+ | # création de projets svn | ||
+ | # | ||
+ | # 31/08/2009 Script initial | ||
+ | # jerome drouet - jerome -at- drouet.eu | ||
+ | # | ||
+ | PATHREPOSVN='/var/lib/svn'; | ||
+ | |||
+ | echo -n "nom du projet :" | ||
+ | read projet; | ||
+ | |||
+ | # adapter l'URL suivant vos besoins | ||
+ | site="https://svn.mondomaine.com/svn/$projet"; | ||
+ | |||
+ | while true; do | ||
+ | echo -n "Confirmez : $site ? (y/n)"; | ||
+ | read yn; | ||
+ | case $yn in | ||
+ | [nN]* ) echo "Abandon";echo;exit;; | ||
+ | [yY]* ) echo;break;; | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | if test -d "$PATHREPOSVN/$projet" | ||
+ | then | ||
+ | echo "Le Projet $projet existe déjà, Abandon"; | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | svnadmin create $PATHREPOSVN/$projet --fs-type fsfs | ||
+ | # les fichiers doivent etre en acces lecture/ecriture pour l'utilisateur qui fait tourner apache | ||
+ | chgrp -R www-data $PATHREPOSVN/$projet | ||
+ | chmod -R 770 $PATHREPOSVN/$projet" | ||
+ | |||
+ | # creation des repertoires SVN | ||
+ | echo "svn mkdir $site/trunk $site/branches $site/tags -m \"Création des répertoires d'archivage Subversion.\""; | ||
+ | svn mkdir --username usersvncreate $site/trunk $site/branches $site/tags -m "Création des répertoires d'archivage Subversion." | ||
+ | |||
+ | echo " | ||
+ | ################################################ | ||
+ | Pour les autorisation d'accès, | ||
+ | Editez ce fichier: | ||
+ | /etc/apache2/dav_svn.authz | ||
+ | Pour les Login hors LDAP: | ||
+ | htpasswd -m /etc/apache2/dav_svn.passwd [MyUser] | ||
+ | |||
+ | ################################################# | ||
+ | "; | ||
+ | |||
+ | echo "Fin"; | ||
+ | EOF | ||
+ | </code> | ||
+ | Rendons maintenant ce script exécutable : <code> | ||
+ | chmod +x /usr/local/sbin/createRepoSvn.sh</code> | ||
+ | |||
+ | Vous avez surement vu que ce script utilise un utilisateur "usersvncreate" pour créer les dépots. | ||
+ | Cet utilisateur n'existe pas encore, nous allons le créer dans le fichier texte d'authentification, en utilisant un mot de passe généré grâce la encore a la commande //pwgen//. | ||
+ | |||
+ | * Exécuter : <code>htpasswd -m /etc/apache2/dav_svn.passwd usersvncreate</code> | ||
+ | * Entrez le mot de passe de votre choix (il servira a toutes les futures créations de dépôt SVN) | ||
+ | * Restreindre les acces a ce fichier :<code> | ||
+ | chown root:www-data /etc/apache2/dav_svn.passwd | ||
+ | chmod 640 /etc/apache2/dav_svn.passwd | ||
+ | </code> | ||
+ | |||
+ | Pour créer effectivement le dépôt "mondepot" il faut utiliser la commande suivante : <code>/usr/local/sbin/createRepoSvn.sh</code>et entrer ensuite le nom du depot souhaité. | ||
+ | |||
+ | Une fois le dépôt créé il faut ajouter dans le fichier /etc/apache2/dav_svn.authz les groupes éventuels et les droits correspondants. | ||
+ | |||
+ | Le dépôt sera accessible via l'URL https://svn.mondomaine.com/svn/mondepot |