\documentclass[a4paper,11pt]{report}

	\input{../includes/headers_global.tex}

	\def\sitename{Debian GNU/Linux :: Serveur }
	\def\shorttitre{Subversion}
	\def\titre{Serveur Subversion}
	\def\autheur{Matthieu Vogelweith}
	\def\subject{Installation d'un serveur SubVersion Debian GNU/Linux}
	\def\keywords{Debian, Linux, Matthieu, Vogelweith, Serveur, SubVersion, SVN, source, websvn, gestionnaire de version, cvs}
	
    \input{../includes/headers.tex}

\begin{document}

\renewcommand{\bibname}{R\'ef\'erences}

\begin{titlepage}
	\maketitle
\end{titlepage}

\chapter*{Résumé}

	L'objectif de cette page est de détailler l'installation d'un serveur Subversion \cite{subversion}.

\input{../includes/licence.tex}

\tableofcontents

\chapter{Présentation}

- principe\\
- avantages\\
- différences par rapport aux autres\\

\section{Subversion vs CVS}

Subversion (SVN) est un système de contrôle des versions OpenSource distribué sous une licence compatible Apache/BSD. Cet outil en développement depuis quelques années propose un grand nombre de nouveautés par rapport à son aîné vieillissant qu'est CVS :\\

\begin{itemize}
	\item Les répertoires, renommages et les propriétés des fichiers sont versionnés
	\item Validation des commit uniquement lorsqu ils se terminent correctement dans leur globalité
	\item Apache comme serveur réseau, WebDAV/DeltaV comme protocole
	\begin{itemize}
		\item Authentification
		\item Autorisation d'accès basique
		\item Compression à la volée
		\item Parcourt du référentiel
	\end{itemize}
	\item Architecture nativement client/serveur.
	\item Gestion des branches et tags par copie
	\item Manipulation efficace des fichiers binaires
	\item Sorties interprétable donc utilisable par des scripts
	\item Les coûts sont proportionnels à la taille des changements et non des données
	\item Gestion des branches et des tags simplifiée\\
\end{itemize}

	Subversion semble donc plus adapté que CVS, notamment au niveau de l'authentification (Apache donc PAM, NIS, ...) et de la gestion des versions sur l'arborescence du dépot.

\chapter{Installation de SubVersion}

\vspace{1em}
\begin{lstlisting} 
# aptitude install subversion libapache2-svn subversion-tools
\end{lstlisting}
\vspace{1em}

- Version standalone et version module d'apache\\
- Plutot en module d'apache, car\\
-- permet de bénéficier des méthodes d'authentification et de sécurité d'apache\\
-- evite d'ouvrir un port supplémentaire sur le firewall

\chapter{Administration du dépot}

- création du dépot\\
- fonctionnement des branches et des tags\\
- cycle de developpement habituel\\

\section{Création des dépots}

Les dépots doivent être créés, obligatoirement dans le système de fichier local, avec les commandes suivantes :

\vspace{1em}
\begin{lstlisting} 
# mkdir /var/lib/svn
# svnadmin create /var/lib/svn/projet1
# chown -R www-data:www-data /var/lib/svn
# chmod -R 700 /var/lib/svn
\end{lstlisting} 
\vspace{1em}

Dans l'exemple ci-dessus, un dépot a été créé : \textbf{projet1}. Il est important de bien donner les droits à l'utilisateur virtuel d'Apache (www-data) pour que le depot puisse être accéssible par le Web.

Attention, maintenant que les dépots sont créés, aucun fichier ne doit être créé, modifié ou supprimé manuellement dans le dépot. Tout doit se faire avec les commandes fournies par Subversion.
\section{Premier import}

Respect de l'architecture préconisée : trunk, tags, branches.

\vspace{1em}
\begin{lstlisting} 
# rm -rf /tmp/projet1
# mkdir -p /tmp/projet1/trunk
# mkdir -p /tmp/projet1/tags
# mkdir -p /tmp/projet1/branches
# svn import /tmp/projet1/ file:///var/lib/svn/projet1 -m "Creation initiale de l'arborescence"
\end{lstlisting} 
\vspace{1em}

\section{Configuration d'Apache}

Comme indiqué précédemment il est possible de configurer le dépot subversion en tant que module apache, ce qui permettra notamment de s'appuyer sur les mechanismes d'authentification offerts par ce dernier. La configuration décrite ci-dessous utilise un authentification LDAP mais il est tout a fait possible d'utiliser les autres mechanismes d'authentification d'Apache.

Pour créer le VirtualHost, enregistrer les informations suivantes dans le fichier /etc/apache2/sites-available/svn :

\vspace{1em}
\begin{lstlisting} 
# Virtual host pour la gestion du depot SVN
<VirtualHost example.org>

    # Config generale du Vhost
    Servername svn.example.org
    ServerAdmin webmaster@example.org

    # Droits d'acces au repertoire
    <Directory /var/lib/svn/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    # Acces URL
    <Location />
        DAV svn
        # SVN root path
        SVNParentPath /var/lib/svn

        # LDAP authentication
        AuthBasicProvider ldap
        AuthType Basic
        AuthzLDAPAuthoritative off
        AuthName "Subversion Repository"
        AuthLDAPURL ldap://ldap.example.org/ou=Users,dc=example,dc=org
        AuthLDAPGroupAttribute memberUid
        AuthLDAPGroupAttributeIsDN off
        Require ldap-group cn=svn,ou=Groups,dc=example,dc=org

        # Change stylesheet
        # SVNIndexXSLT "/styles/svnindex.xsl"

        # Use default ErrorDocument
        ErrorDocument 404 default
    </Location>

    ErrorLog /var/log/apache2/svn_error.log
    CustomLog /var/log/apache2/svn_access.log combined

</VirtualHost>
\end{lstlisting} 
\vspace{1em}

Pour que le vhost soit actif, il faut enfin l'activer puis recharger Apache avec les commmandes suivantes :

\vspace{1em}
\begin{lstlisting} 
# a2ensite svn
# /etc/init.d/apache2 reload
\end{lstlisting}
\vspace{1em}

Si tout ce passe correctement, le dépot SVN est maintenant disponible. Par exemple, si le dépot \textbf{projet1} a été créé comme indiqué dans le paragraphe 3.1, l'arborescence doit être visible via un navigateur web à l'adresse http\string://svn.example.org/projet1.

\chapter{Installation de WebSVN}

- Visualisation du dépot\\
\vspace{1em}
\begin{lstlisting} 
# aptitude install websvn
\end{lstlisting}
\vspace{1em}

- indiquer le chemin du répertoire parent des dépots lors de la configuration.\\
- supprimer le lien de /var/www/websvn.\\
- Ajouter l'alias qui va bien
- éditer la config dans le fichier /etc/websvn/config.inc

\chapter{Les clients disponibles}

Plusieurs clients SVN sont disponibles sur les plateformes UNIX et Windows. Dans les deux cas, il est toujours possible de visualiser le contenu du dépot ainsi que les modifications et les commentaires de chaque fichier/dossier via un navigateur Web.

\section{Pour Linux}

\begin{itemize}
	\item svn en ligne de commande
	\item Navigateur Web
	\item RapidSVN
	\item esvn
	\item Eclipse + PHPEclipse + Subclipse
\end{itemize}

\section{Pour windows}
\begin{itemize}
	\item Navigateur Web
	\item Explorateur Windows avec TortoiseSVN
	\item Eclipse + PHPEclipse + Subclipse
	\item RapidSVN
\end{itemize}

\chapter{Utilisation}

Ce chapitre décrit rapidement le fonctionnement de Subversion pour une utilisation de tous les jours.

\section{Principe}

\begin{itemize}
	\item Mise à jour de la ressource locale avec les sources du serveur subversion
	\item Modifications
	\item Tests sur le serveur de tests
	\item Validation des modifications sur le serveur subversion
\end{itemize}

\section{Mise à jour de la ressource locale}

\begin{lstlisting} 
$ svn update
\end{lstlisting} 

\section{Tests}

\begin{lstlisting} 
http://serveur_de_test/ma_page.php
\end{lstlisting} 

\section{Validation des modifications}

Lorsque les tests sont réussi, en fin de journée ou lorsque les modifications sont validées et considérée comme correctes, on peut mettre a jour le code sur le serveur Subversion. Cette opération est réalisée simplement par la commande \textbf{commit} :

\begin{lstlisting} 
$ svn commit
\end{lstlisting} 

\section{Visualisation des modifications}

Maintenant que les modifications sont effectives sur le serveur Subversion, on peut facilement visualiser l'historique des modifications via un navigateur Web :

\begin{lstlisting}
http://serveur_subversion/svn/nom_du_depot
\end{lstlisting}

\clearpage
\nocite{*}
\bibliographystyle{unsrt}
\bibliography{\jobname}

\end{document}
