Poum - Mot-clé - SubversionDe la qualité logicielle, méthodes agiles et outils logiciels libres ...2023-08-25T16:53:12+01:00Poumurn:md5:6b5c625a812aff31ffa1cd1f3648e14bDotclearSubversion et les dépôts externesurn:md5:1367ee1c65e0e6406d88800765d009b62012-06-28T14:56:00+02:002012-06-28T14:56:00+02:00PoumQualité logicielleSubversionsvn:externals<p><img src="http://philippe.poumaroux.free.fr/public/svn-square.jpg" alt="Logo subversion" title="Logo subversion, janv. 2012" /></p>
<p><a href="http://philippe.poumaroux.free.fr/index.php?tag/Subversion">Subversion</a> offre une manière intéressante d'inclure le contenu d'un dépôt dans un autre dépôt. C'est très utile, par exemple, lorsque vous avez un dépôt avec des routine génériques que vous voulez utiliser dans plusieurs projets sans avoir à dupliquer le code commun dans chacun de ces dépôts (pour des raisons évidentes de maintenabilité).</p>
<p><strong>Attention</strong>, il s'agit ici de code commun et, en aucun cas de dépendances. Il existe des outils pour gérer les dépendances dans de multiples langages (Maven, Ivy, Gradle pour Java, PEAR pour PHP ....). Ces dépendances n'ont rien à faire dans le dépôt d'un gestionnaire de code source.</p>
<p><strong>Attention</strong> (bis): l'utilisation de cette fonctionnalité crée, d'une certaine manière, une dépendance à Subversion, tous les outils de gestion de source ne la possédant pas (toutefois, Git possède un mécanisme similaire...).</p>
<p>En utilisant la propriété <a href="http://philippe.poumaroux.free.fr/index.php?tag/svn%3Aexternals">svn:externals</a>, vous pouvez indiquer à subversion de récupérer le contenu d'un dépôt externe dans un répertoire donné.</p> <p>Vous indiquez la propriété <code>svn:externals</code> sur un répertoire existant. La valeur de cette propriété est une liste de valeurs répertoire/dépôt séparées par des espaces.</p>
<p>Voyons un exemple. Habituellement, vous n'aurez qu'un seul dépôt externe, mais dans l'exemple, il y en aura deux, juste pour montrer comment créer une liste.</p>
<p>Supposons que vous avez les dépôts subversion externes <code>http://svn.poum.fr/chemin/vers/depot_un</code> et <code>http://svn.poum.fr/chemin/vers/depot_deux</code>.</p>
<p>Vous voulez ajouter <code>depot_un</code> dans le répertoire <code>dossier_de_depot_un</code> et <code>depot_deux</code> dans <code>dossier_de_depot_deux</code>. Créez un fichier texte contenant la valeur que prendra la propriété <code>svn:externals</code>:</p>
<p><code>$ cat >svn_ext_val.txt</code></p>
<p><code>dossier_de_depot_un http://svn.poum.fr/chemin/vers/depot_un</code></p>
<p><code>dossier_de_depot_deux http://svn.poum.fr/chemin/vers/depot_deux</code></p>
<p>Maintenant, positionnons la propriété d'un répertoire déjà dans subversion. Dans l'exemple, ce sera le répertoire courant:</p>
<p><code>svn propset svn:externals . -F svn_ext_val.txt</code></p>
<p>Maintenant, lorsque vous faites un <code>svn update</code>, <code>dossier_de_depot_un</code> sera créé et contiendra le contenu de <code>depot_un</code>, et <code>dossier_de_depot_deux</code> avec celui de <code>depot_deux</code>.</p>
<p>Étonnant, non ?</p>
<p><a href="http://blog.kowalczyk.info/article/Short-tutorial-on-svn-propset-for-svnexternals-p.html" hreflang="en" title="Short tutorial on svn propset for svnexternales">Voir la source ici</a>.</p>Sortie de Subversion 1.7.3urn:md5:34b6be34c9711474fb48131d4fef6c272012-02-13T21:38:00+01:002012-10-19T18:46:54+02:00PoumNouvelles versionsapachemod_dontdothatSubversion<p><img src="http://philippe.poumaroux.free.fr/public/svn-square.jpg" alt="Logo subversion" title="Logo subversion, janv. 2012" /></p>
<p><a href="http://philippe.poumaroux.free.fr/index.php?tag/Subversion">Subversion</a> version 1.7.3 vient de sortir: <a href="http://subversion.apache.org/download/" title="http://subversion.apache.org/download/">http://subversion.apache.org/downlo...</a>.</p>
<p>Le changement le plus notable est l'ajout dans la version standard du module <a href="http://philippe.poumaroux.free.fr/index.php?tag/apache">apache</a> <a href="http://philippe.poumaroux.free.fr/index.php?tag/mod_dontdothat">mod_dontdothat</a>. Ce module permet de bloquer certains types de requêtes Subversion. Il est conçu pour empêcher les utilisateurs de faire des choses particulièrement brutales pour le serveur comme tout récupérer depuis la racine ou la totalité des répertoires tags ou branches. Il fonctionne en ajoutant un filtre d'entrée à toutes les requêtes REPORT et en recherchant celles de type dangereux. S'il en trouve une, il renvoie une erreur 403 Forbidden.</p> <h2>Changement visibles pour les utilisateurs:</h2>
<ul>
<li>correction d'une erreur de segmentation avec 'svn rm $ROOT_URL' (bug #4074)</li>
<li>remplacement d'assertion par des erreurs (r1207858, -949)</li>
<li>correction d'une assertion serveur après mise à jour (r1210195)</li>
<li>correction d'une erreur de segmentation avec 'svn mkdir svn://localhost' (r1211483)</li>
<li>'svnadmin recover' supprime le cache répertoire (r1213331, et al)</li>
<li>svnmucc utilise les valeurs de l'option --config-dir</li>
<li>mise à jour et clarification du texte d'aide de merge (r1154121, et al)</li>
<li>remplacement d'une assertion wc avec un message d'erreur parlant (r1222521, -693)</li>
<li>recopie correcte des permissions pour les répertoires FSFS(r1229252)</li>
<li>amélioration de 'svn log --with-all-revprops' avec ra-dav (bug #4082)</li>
<li>correction d'une erreur de segmentation lors du replacage sur un fichier externe (bug #4093)</li>
<li>correction d'une erreur de segmentation provoquée par blocage d'un répertoire non versionné (r1229677)</li>
<li>correction d'une régression sur la première mise à jour d'un répertoire externe avec '-r' (bug #4053)</li>
<li>correction de plusieurs problèmes de gestion de fin de ligne dans 'svn patch' (bugs #3814, #3991)</li>
<li>correction d'une erreur de segmentation dans 'svn revert' (r1229303)</li>
<li>amélioration de l'exactitude de 'svn patch --dry-run' (r1231944, -5)</li>
<li>renforcement des révisions fournies par 'svn:externals' (bug #4053)</li>
<li>correction d'une corruption possible sur les FSFS 32 bits avec des grands fichiers (r1230212)</li>
<li>'svn status --xml' affiche les nouveaux fichiers (bug #4097)</li>
<li>correction de l'exactitude de 'svn mergeinfo' correctness (bug #4050)</li>
<li>retour de l'état correct pour les noeuds absents (r1232202, -07, -21, -22)</li>
<li>amélioration des messages d'erreur SASL (r1236343, et al)</li>
<li>amélioration du code d'erreur de certificat pour ra_serf (r1232413)</li>
<li>correction des listings SVNParentPath pour les liens symboliques parents (r1221767, -80)</li>
<li>correction de la gestion des erreurs POST de mod_dav_svn (bug #4086)</li>
<li>journalisation de certaines erreurs mod_dav_svn errors au lieu de les ignorer (r1237720, -9596)</li>
<li>relachement des exigences pour la canonisation dans mod_dav_svn (r1236173)</li>
<li>correction d'une source rare de corruption du FSFS (r1240752)</li>
<li>possibilité de livrer le résultat de certaines opérations de copie (bug #4059)</li>
<li>empêchement d'un dépassement de tampon d'un octet dans le décodage en base 64 (r1242337)</li>
</ul>
<h2>Changements visibles pour les développeurs:</h2>
<ul>
<li>JavaHL: ajout d'action de notification manquante, correction d'une exception (r1221793)</li>
<li>correction d'une fuite mémoire swig-py (r1235264, -296, -302, -736)</li>
<li>correction d'une fausse erreur d'une suite de tests (r1220742, -50)</li>
<li>permet le lancement des tests sur partages UNC shares (r1225491)</li>
<li>bindings: visualisation des fournisseurs de mot de passe spécifiques aux plateformes (r1242660, -1)</li>
<li>désactive les tests 'svnrdump dump' tests pour ra_serf (r1242537)</li>
<li>conversion de quelques assertions ra_serf en erreurs (r1242607)</li>
</ul>Subversion: installationurn:md5:ed112529273da3853410533ee07bfa862012-01-26T13:25:00+01:002012-01-31T17:00:57+01:00PoumQualité logicielleDebianHTTP ApacheLennyneonPHPPostfixSubversionWebSVN<p><img src="http://philippe.poumaroux.free.fr/public/svn-square.jpg" alt="Logo subversion" title="Logo subversion, janv. 2012" /></p>
<p>Le gestionnaire de source est la brique de base indispensable à toute tentative d'industrialisation des développements.
Voici maintenant une petite procédure d'installation d'un serveur <a href="http://philippe.poumaroux.free.fr/index.php?tag/Subversion">Subversion</a>, dernière version (donc 1.7.2 à ce jour) sur un serveur <a href="http://philippe.poumaroux.free.fr/index.php?tag/Debian">Debian</a> <a href="http://philippe.poumaroux.free.fr/index.php?tag/Lenny">Lenny</a> qui utilisera tant que possible les paquets et qui s'appuiera en outre sur:</p>
<ul>
<li>un serveur <a href="http://philippe.poumaroux.free.fr/index.php?tag/HTTP%20Apache">HTTP Apache</a> série 2.2</li>
<li>un serveur de messagerie <a href="http://philippe.poumaroux.free.fr/index.php?tag/Postfix">Postfix</a></li>
<li>un navigateur de dépôts de source <a href="http://philippe.poumaroux.free.fr/index.php?tag/WebSVN">WebSVN</a> qui fera l'objet d'un autre billet.</li>
</ul> <h2>Serveur HTTP</h2>
<p>Pour installer le serveur HTTP Apache, rien de plus simple:</p>
<pre> $ sudo apt-get install apache2 libapache2-mod-php5</pre>
<p>Notez qu'on prend aussi la gestion CGI <a href="http://philippe.poumaroux.free.fr/index.php?tag/PHP">PHP</a> pour WebSVN.</p>
<h2>Subversion</h2>
<p>Pour installer subversion, il va falloir le compiler, les paquets Debian n'offrant pas la version 1.7.2 (série 1.5 au moment de la rédaction). Il nous faut d'abord la bibliothèque <a href="http://philippe.poumaroux.free.fr/index.php?tag/neon">neon</a>, pré-requis pour l'accès client car, une fois encore, la version debian étant insuffisante (0.27). Il faut donc récupérer la version 0.29 sur http://www.webdav.org/neon, puis:</p>
<pre> $ tar xzvf neon-0.29.x.tar.gz
$ cd neon-0.29.x
$ ./configure
$ make
$ su -c 'make install'</pre>
<p>Il se peut que la bibliothèque libxml2-dev-2.6.32 ne soit pas présente, ce qui engendrera une erreur de compilation :</p>
<pre> $ sudo apt-get install libxml2-dev-2.6.32</pre>
<h2>Subversion proprement dit</h2>
<h3>Pré-requis</h3>
<p>On commence par installer les pré-requis:</p>
<ul>
<li>sqlite3 pour la gestion interne de Subversion</li>
<li>libapr1 et libaprutil1 pour les bibliothèques d'utilitaires d'apache</li>
<li>apache2-prefork-dev pour apxs (nommé apxs2 d'où le paramètre ci-dessous) pour le chargement dynamique du module svn</li>
</ul>
<p><strong>Attention</strong> utiliser sqlite3 et pas sqlite</p>
<pre> $ sudo apt-get install sqlite3 libapr1-dev libaprutil1-dev apache2-prefork-dev</pre>
<h3>Compilation</h3>
<p>Récupérer l'archive tar.gz sur http://subversion.apache.org</p>
<p>Récupérer également l'archive sqlite3 suffisamment à jour sur http://www.sqlite.org/download.html : prendre sqlite-amalgamation-xxxxx.zip</p>
<p>Puis:</p>
<pre> $ cd $SOURCES
$ tar xzvf subversion-1.7.xx.tar.gz
$ unzip sqlite-amalgamation-xxxx.zip
$ mv sqlite-amalagation-xxxx subversion-1.7.xx/sqlite-amalgamation
$ cd subversion-1.7.xx
$ ./configure --with-apxs=/usr/bin/apxs2
$ make
$ sudo make install</pre>
<p>Note: Ne pas tenir compte de l'avertissement relatif à Berkeley DB</p>
<h3>Bonus</h3>
<ul>
<li>Hot-backup.py: ce script permet de faire des copies de sauvegarde des dépôts de source à chaque commit. Il se trouve dans tools/backup/hot-backup.py</li>
<li>commit-email.pl: ce script permet d'envoyer un mail lorsqu'un commit est réalisé. Il se trouve dans contrib/hoot-scripts/</li>
</ul>
<p><strong>Attention</strong>, ce script est signalé comme déprécié et à remplacer par mailer.py</p>
<h2>Configuration du serveur HTTP</h2>
<p>Le fichier de configuration (site_svn) sera de la forme:</p>
<pre> <VirtualHost *:80>
servername subversion
DocumentRoot /var/www
DirectoryIndex index.html index.php
DavLockDB /var/www/DavLockDB
<Directory />
order deny,allow
deny from all
Dav off
</Directory>
<Location /projets/>
Include /etc/apache2/sites-available/site_svn_auth.conf
AuthUserFile /var/www/conf/perm.txt
Dav svn
SVNParentPath /var/www/depots
SVNIndexXSLT "/svnindex.xsl"
</Location>
</VirtualHost></pre>
<ul>
<li>ce fichier sera dans /etc/apache2/sites-available/site_svn</li>
<li>l'URL du dépôt sera http://subversion/projets/mon_projet</li>
<li>le dépôt, sur le serveur, sera dans /var/www/depots</li>
<li>les directives d'authentification seront dans /etc/apache2/sites-available/site_svn_auth.conf</li>
<li>le fichier de droits en lecture, écriture sur le dépôt sera dans /var/www/conf/perm.txt</li>
<li>le fichier XSL réalisant l'affichage dans le navigateur de l'arborescence du dépôt sera /var/www/svnindex.xsl</li>
</ul>
<p>Le fichier de configuration site_svn_auth.conf pourra être de la forme suivant (authentification LDAP et htpasswd):</p>
<pre> AuthName "Subversion"
AuthType Basic
AuthBasicProvider ldap file
AuthUserFile /var/www/conf/utilisateurs.txt
AuthLDAPURL "ldap://IP1 IP2/dc=domaine,dc=fr"
Require valid-user</pre>
<p>Le fichier identifiant/mot de passe pour les utilisateurs hors LDAP sera dans /var/www/conf/utilisateurs.txt</p>
<p>On active ensuite les modules nécessaires:</p>
<pre> $ sudo a2enmod authnz_ldap
$ sudo a2enmod dav_fs
$ sudo a2enmod dav_lock
$ sudo a2enmod dav_svn</pre>
<p>On désactive le site par défaut et on active le site svn:</p>
<pre> $ sudo a2dissite default
$ sudo a2ensite site_svn</pre>
<p>A ce stade, le serveur apache peut être lancé avec succès.</p>
<h3>Lancement du serveur Web</h3>
<p>On rédemarre le serveur (apache2ctl restart) et on vérifie qu'on obtient la ligne suivante dans /var/log/apache2/error.log:</p>
<pre> <a href="http://philippe.poumaroux.free.fr/index.php?post/2012/01/26/Thu Dec 03 14:02:31 2009" title="Thu Dec 03 14:02:31 2009">Thu Dec 03 14:02:31 2009</a> <a href="http://philippe.poumaroux.free.fr/index.php?post/2012/01/26/notice" title="notice">notice</a> Apache/2.2.9 (Debian) DAV/2 SVN/1.6.6 PHP/5.2.6-1+lenny3 with Suhosin-Patch configured -- resuming normal operations</pre>
<h2>Postfix</h2>
<p>Nous allons maintenant installer un serveur de messagerie minimal afin de pouvoir relayer les mails vers les utilisateurs concernés. On installe postfix et on choisit <strong>système satellite</strong>.</p>
<pre> $ sudo apt-get install postfix
> système satellite
> Nom de courrier: nom.domaine.fr, OK
> Serveur relais SMTP: 192.168.0.2, OK</pre>
<p>Pour tester, on peut utiliser:</p>
<pre> $ /usr/sbin/sendmail -t adresse@mail.fr
>To: adresse@mail.fr
>From: moi
>Subject: test</pre>
<pre> test
.</pre>
<p>Et voilà, à ce stade, on doit disposer d'un dépôt de source subversion à jour...</p>