un autre volet intéressant ;)<br><br>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="padding: 4px; background-color: #c3d9ff;"><h3 style="margin:0px 3px;font-family:sans-serif">Envoyé par Nizar via Google Reader :</h3></div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="font-family:sans-serif;overflow:auto;width:100%;margin: 0px 10px"><h2 style="margin: 0.25em 0 0 0"><div class=""><a href="http://www.respawner.fr/blog/index.php?post/2009/07/07/Migration-de-SVN-vers-Bazaar%2C-le-cas-gSplit">Migration de SVN vers Bazaar</a></div></h2>
<div style="margin-bottom: 0.5em">via <a href="http://planet.ubuntu-fr.org/" class="f">Planet Ubuntu Francophone - Accueil</a> de Respawner le 07/07/09</div><br style="display:none">
<p><img title="code.png, oct. 2008" style="margin:0 1em 1em 0;float:left" alt="" src="http://www.respawner.fr/respawner/public/Icones/code.png">Migrer d'un système de contrôle de version à un autre peut parfois être utile. On peut distinguer deux raisons de migration :</p>
<ul><li>le besoin (pour des raisons de gestion du projet), et,</li>
<li>l'envie (par préférence d'utilisation).</li>
</ul>
<p>Le cas numéro 2 a été le mien. En effet, en <a hreflang="en" href="http://research.operationaldynamics.com/bzr/java-gnome/hackers/guillaume/">développant</a> de plus en plus pour <a hreflang="en" href="http://java-gnome.sourceforge.net/">java-gnome</a>, je me suis pris d'affection pour <a hreflang="en" href="http://bazaar-vcs.org/">Bazaar</a>. J'ai donc décidé de migrer le code de <a hreflang="en" href="https://launchpad.net/gsplit">gSplit</a> de SVN à Bazaar <strong>sans</strong> perte de données.</p>    <p>Pour rappel (ou pas), <strong>Bazaar</strong> est un système de gestion de versions libre et <a hreflang="fr" href="http://fr.wikipedia.org/wiki/Gestion_de_version_d%C3%A9centralis%C3%A9e">décentralisé</a> qui est développé par <a hreflang="en" href="http://www.canonical.com/">Canonical</a>. Il est développé avec le langage <a hreflang="en" href="http://www.python.org/">Python</a> (qui est <em>très</em> utilisé par Canonical). Avant de me lancer, j'ai passé de long moment sur un moteur de recherche bien connu pour être sûr et certain que la migration se ferait sans aucune perte.<br><br><strong>Attention !</strong> La suite de l'article a été réalisé grâce à <strong>Ubuntu Server 9.04</strong> et avec le PPA de l'équipe de développement de Bazaar. Il faut donc ajouter ce dépôt, <strong>non officiel</strong>, à la liste déjà existante. Ceci peut donc être dangereux pour votre système.<br><br><a href="http://www.respawner.fr/respawner/public/Divers/bazaar-logo.png"><img title="bazaar-logo.png, juil. 2009" style="margin:0 auto;display:block" alt="" src="http://www.respawner.fr/respawner/public/Divers/bazaar-logo.png"></a></p>
<h3>1. Ajout du PPA de Bazaar et installation</h3>
<p>Les informations sur le PPA se trouve sur cette page. Pour les utilisateurs de Jaunty Jackalope, il faut ajouter les deux lignes suivantes au fichier <em>/etc/apt/sources.list</em> :<br><code> deb http://ppa.launchpad.net/bzr/ppa/ubuntu jaunty main <br>deb-src http://ppa.launchpad.net/bzr/ppa/ubuntu jaunty main</code><br><br><br>Avant de mettre à jour la liste des dépôts et de procéder à l'installation, il ne faut pas oublier de récupérer la clé du dépôt via la commande suivante.<br><code>~$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8C6C1EFD</code><br><br>Maintenant, on peut installer les paquets <strong>bzr</strong>, <strong>bzrtools</strong>, <strong>bzr-svn</strong>, <strong>ssh</strong> et <strong>openssh-server</strong>.<br><br>Petite mise au point avant de se lancer dans les joyeusetés. L'accès en lecture au dépôt se fera via le protocole <a hreflang="fr" href="http://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a>, l'accès en écriture se fera via <a hreflang="fr" href="http://fr.wikipedia.org/wiki/SSH_file_transfer_protocol">SFTP</a> et en plus de tout ceci, on mettra en place <a hreflang="en" href="https://launchpad.net/loggerhead">Loggerhead</a> (pour voir les commits et le dépôt depuis un navigateur web).</p>
<h3>2. Création du dépôt</h3>
<p>Avant de créer le dépôt et d'y intégrer le code, il faut commencer par créer un utilisateur qui aura droit d'accès en écriture et qui servira notamment à <em>commiter</em>.<br><code>~$ sudo useradd --create-home --home-dir /var/local/bzr --shell /usr/lib/sftp-server bzr<br>~$ sudo passwd bzr<br>~$ sudo su<br>~# echo '/usr/lib/sftp-server' >> /etc/shells</code><br><br>On ajoute via les commandes précédentes un utilisateur nommé <strong>bzr</strong>, qui aura pour répertoire personnel <em>/var/local/bzr</em> (la racine du dépôt Bazaar) et qui utilisera comme shell un serveur SFTP. Avec la deuxième commande, on définit le mot de passe de l'utilisateur, il faut donc veiller à entrer un mot de passe plutôt costaud car il sera demandé lors de l'envoi d'une branche par exemple.<br><br>Maintenant, il faut que le serveur HTTP (<a hreflang="fr" href="http://fr.wikipedia.org/wiki/Apache_HTTP_Server">Apache</a> dans mon cas) puisse avoir accès au dépôt. On crée et on édite alors le fichier <em>/etc/apache2/sites-available/bazaar</em> puis on y met la ligne suivante.<br><code>Alias /bzr/ "/var/local/bzr/"</code><br><br>Enfin, on recharge la configuration du serveur HTTP.<br><code>~$ sudo a2ensite bazaar<br>~$ sudo /etc/init.d/apache2 force-reload</code><br><br>À partir de maintenant, on doit pouvoir <em>pusher</em> une branche afin de tester que l'upload et que le download fonctionnent.<br><code>~$ mkdir test_project<br>~$ bzr whoami "MoiMeme <mon_email@server.org>"<br>~$ cd test_project<br>~/test_project$ echo "public class Test {<br>     public static void main(String[] args) {<br>         System.out.println("Hello World!");<br>     }<br>}" > Test.java<br>~/test_project$ bzr init && bzr add<br>~/test_project$ bzr push --remember sftp://bzr@server.org/var/local/bzr/test_project</code><br><br>Si ceci fonctionne (normalement oui), on peut essayer de <em>checkout</em> la branche ensuite.<br><code>~$ bzr checkout http://www.server.org/bzr/test_project test</code></p>
<h3>3. Migration du code du dépôt SVN vers Bazaar</h3>
<p>Voilà la partie sensible dans laquelle il faut faire attention pourtant, ce n'est pas beaucoup plus bête qu'une ou deux lignes de commande. On commence par importer le code dans le dépôt. Ceci va en plus recréer l'historique des versions. Comme Bazaar fonctione par branche (chaque branche commence à la révsion 1), il se peut que des différences dans la numérotation apparaissent.<br><code>~$ cd /var/local/bzr/<br>/var/local/bzr$ sudo bzr svn-import --trees --layout=trunk0 http://www.server.org/svn/ mon_projet<br>/var/local/bzr$ sudo chown -R mon_projet</code><br><br>À ce stade, le code doit normalement être disponible via Bazaar et l'historique doit être complet. On peut le vérifier via la commande suivante.<br><code>~$ bzr log http://www.server.org/bzr/mon_projet | more</code></p>
<h3>4. Mise en place de Loggerhead</h3>
<p>Loggerhead est une sorte de <a hreflang="en" href="http://trac.edgewall.org/">Trac</a> mais en plus <em>simple</em> puisqu'il ne comporte par les fonctions de Wiki, etc... Pour l'utiliser, on récupère l'archive de la dernière version.<br><code>~$ wget http://launchpad.net/loggerhead/1.10/1.10/+download/loggerhead-1.10.tar.gz</code><br><br>Il faut extraire l'archive dans <em>/opt/</em>.<br><code>~$ mv loggerhead-1.10.tar.gz /opt/<br>~$ cd /opt/ && sudo tar xzvf loggerhead-1.10.tar.gz<br>/opt$ rm loggerhead-1.10.tar.gz</code><br><br>Pour lancer Loggerhead facilement, on va copier le fichier <em>/opt/loggerhead/loggerheadd</em> dans <em>/etc/init.d/</em> puis le modifier à notre guise.  On modifira surtout les quelques variables du fichier comme celles-ci :<br><code>SERVE_BRANCHES_CMD=/opt/loggerhead/serve-branches<br>LOG_FOLDER=/var/log/loggerhead<br>LOG_FILE=$LOG_FOLDER/loggerheadd.log<br>URL_PREFIX=/loggerhead<br>PORT=4155<br>BZRROOT=/var/local/bzr/mon_projet/</code><br><br>Il ne faut pas oublier de configurer le serveur HTTP pour qu'il utilise Loggerhead via le module de proxy afin de se simplifier la vie par la suite. On édite le fichier <em>/etc/apache2/site-available/loggerhead</em> puis on y insère le code suivant.<br><code><Location "/loggerhead/"><br>    Order allow,deny<br>    Allow from all<br></Location><br>ProxyPass /loggerhead/ http://localhost:4155/<br>ProxyPassReverse /loggerhead/ http://localhost:4155/</code><br><br>On active les modules de proxy ainsi que le nouveau site. Pour finir par recharger la configuration de Apache.<br><code>~$ sudo a2enmod proxy<br>~$ sudo a2enmod proxy_connect <br>~$ sudo a2enmod proxy_http<br>~$ sudo a2ensite loggerhead<br>~$ sudo /etc/init.d/apache2 force-reload</code><br><br>Maintenant, on donne le droit d'exécution au script et on peut lancer Loggerhead.<br><code>~$ sudo chmod +x /etc/init.d/loggerhead<br>~$ sudo /etc/init.d/loggerhead start</code><br><br><a href="http://www.respawner.fr/respawner/public/gSplit/loggerhead.png"><img title="loggerhead.png, juil. 2009" style="margin:0 auto;display:block" alt="" src="http://www.respawner.fr/respawner/public/gSplit/.loggerhead_m.jpg"></a></p>
<h3>5. Conclusion</h3>
<p>Cet article ne se veut pas comme référence mais fait le point sur une technique qui a fonctionné pour moi. Si vous avez des améliorations ou d'autres tutoriaux à recommander je suis preneur. Notamment pour utiliser Bazaar à la mode <strong>bzr</strong> (en <em>checkout</em>) et <strong>bzr+ssh</strong> (en <em>commit</em>).</p></div>
<br>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="padding: 4px; background-color: #c3d9ff;"><h3 style="margin:0px 3px;font-family:sans-serif">Ce que vous pouvez faire à partir de cette page :</h3>
<ul style="font-family:sans-serif"><li><a href="http://www.google.com/reader/view/feed%2Fhttp%3A%2F%2Fplanet.ubuntu-fr.org%2Frss.php?source=email">Vous abonner à Planet Ubuntu Francophone - Accueil</a> à l'aide de <b>Google Reader</b></li>
<li>Suivre l'actualité de <b>tous vos sites favoris</b> avec <a href="http://www.google.com/reader/?source=email">Google Reader</a></li></ul></div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>