<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://www.nikrou.net/feed/rss2/xslt" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Le Journal de Nikrou - Outils</title>
    <link>https://www.nikrou.net/</link>
    <atom:link href="https://www.nikrou.net/feed/category/Outils/rss2" rel="self" type="application/rss+xml" />
    <description>Ce journal n'est pas un blog!</description>
    <language>fr</language>
    <pubDate>Sun, 30 Mar 2025 07:06:26 +0200</pubDate>
    <copyright></copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Dotclear</generator>
          <item>
        <title>Lancer plusieurs firefox avec plusieurs profils sous debian</title>
        <link>https://www.nikrou.net/post/2009/11/27/Lancer-plusieurs-firefox-avec-plusieurs-profils-sous-debian</link>
        <guid isPermaLink="false">urn:md5:24af05ccb289ce95e108153239121feb</guid>
        <pubDate>Fri, 27 Nov 2009 16:19:00 +0100</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>debian</category>
                  <category>firefox</category>
                <description> &lt;p&gt;Avant la version 3.5.5, il me semble, lorsque je tappais les commandes suivantes&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;iceweasel -P profil1
iceweasel -P profil2&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;J'avais deux firefox (et oui iceweasel est le petit nom de firefox sous debian) avec deux profils différents. Depuis cette version, la deuxième commande provoque l'ouverture d'une nouvelle fenêtre mais avec le premier profil. Cette régression est très pénible. Heureusement, il y a une parade&amp;nbsp;: il suffit d'exécuter chaque commande en ajoutant le paramètre &lt;strong&gt;-no-remote&lt;/strong&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;iceweasel -P profil1 -no-remote
iceweasel -P profil2 -no-remote&lt;/code&gt;&lt;/pre&gt;</description>
        
              </item>
          <item>
        <title>Mettre en place un dépôt central git</title>
        <link>https://www.nikrou.net/post/2009/02/20/Mettre-en-place-un-d%C3%A9p%C3%B4t-central-git</link>
        <guid isPermaLink="false">urn:md5:f77f9510c1181893ef90bf7006558a78</guid>
        <pubDate>Sat, 28 Feb 2009 21:04:00 +0100</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>debian</category>
                  <category>git</category>
                  <category>gitosis</category>
                  <category>serveur</category>
                <description>&lt;p&gt;Cela peut sembler quelque peu paradoxal étant donné le mode distribué et décentralisé de ce gestionnaire de version qu'est &lt;a hreflang=&quot;en&quot; href=&quot;http://git.or.cz/&quot;&gt;git&lt;/a&gt; mais on peut vouloir utiliser git un peu comme subversion et avoir un dépôt qui servirait de dépôt &quot;officiel&quot;. Pour ce faire nous allons utiliser gitosis qui va énormément nous faciliter la vie.&lt;/p&gt; &lt;p&gt;L'installation est des plus simples (en supposant que vous utilisez une debian) :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;apt-get install gitosis&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela devrait ramener les packages suivants s'ils ne sont pas déjà installés : git-core, adduser, sudo.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Première étape : configuration de gitosis&lt;/h2&gt;&lt;p&gt;Il faut commencer par créer un utilisateur à qui vont appartenir tous les dépôts présents sur le serveur. On ne va pas être très original et on 
va appeler cet utilisateur &lt;strong&gt;git&lt;/strong&gt; et on va le mettre dans le groupe &lt;strong&gt;git&lt;/strong&gt;. La commande qui va bien :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;adduser --home /home/git git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mettez le mot de passe que vous voulez. Nous n'utiliserons pas ce compte directement mais tous les accès aux dépôts se feront à travers lui.&amp;nbsp; Il faut maintenant déposer sur le serveur votre clé publique générée
 avec&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;si jamais vous n'en avez pas. Le fichier à déposer est &lt;strong&gt;~/.ssh/id_rsa.pub&lt;/strong&gt;. On va maintenant générer un premier dépôt git :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&lt;sudo -H -u git gitosis-init &gt; /tmp/id_rsa.pub&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ou si vous faîtes un su - git ,tout simplement :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;gitosis-init &gt; /tmp/id_rsa.pub&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si l'opération se passe bien, vous devriez avoir un message de ce genre : &lt;em&gt;Initialized empty Git repository in ./&lt;/em&gt;. Vérifiez que le script &lt;strong&gt;/home/git/repositories/gitosis-admin.git/hooks/post-update&lt;/strong&gt; est 
exécutable sinon donnez lui les droits :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;chmod +x /home/git/repositories/gitosis-admin.git/hooks/post-update&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà, nous avons un dépôt git ! Vérifiez vous même en tapant sur votre machine locale :&lt;/p&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;git clone git@VOTRE_SERVEUR:gitosis-admin.git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela créé une copie du dépôt que l'on a créé sur le serveur. Le répertoire gitosis-admin nouvellement créé ne contient que deux fichiers : un fichier de configuration
 &lt;strong&gt;gitosis.conf&lt;/strong&gt; et un répertoire &lt;strong&gt;keydir&lt;/strong&gt; contenant une copie de votre clé publique. Désormais nous n'avons plus à nous connecter sur le serveur : l'ajout de dépôts, 
le changement de permissions sur les dépôts et toute la configuration de nos dépôts se fait à partir du dépôt gitosis-admin que l'on a cloné. Pour que les modifications soient effectives sur le serveur, 
il suffira de les envoyer sur le servuer (&lt;strong&gt;git push&lt;/strong&gt;).&lt;/p&gt;&lt;h2&gt;Deuxième étape : création de notre premier dépôt&lt;/h2&gt;&lt;p&gt;C'est bien joli gitosis mais nous n'avons toujours pas de dépôt pour créer
 notre super projet helloWord. Pour créer un nouveau, rien de plus simple. Il faut ouvrir le fichier de configuration &lt;strong&gt;gitosis.conf&lt;/strong&gt; dont le contenu est à l'origine :&lt;/p&gt;
&lt;pre class=&quot;language-ini&quot;&gt;&lt;code&gt;[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = VOTRE_NOM@YOUR_HOSTNAME&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ajoutons un groupe hello-group et créons le dépôt hello_world :&lt;/p&gt;
&lt;pre class=&quot;language-ini&quot;&gt;&lt;code&gt;[group hello-group]
writable = hello-world
members = VOTRE_NOM@YOUR_HOSTNAME&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sauvegardons le nouveau fichier de configuration et envoyons les modifications sur le serveur (commit et push) :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;git commit -m 'ajout du nouveau dépôt hello-world'
git push&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le dépôt n'a pas été créé mais il est déjà géré par gitosis. Créons-le localement et envoyons le sur le serveur :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;mkdir hello-world
cd hello-world
git init
git remote add origin git@VOTRE_SERVEUR:hello-world.git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il faut créer au moins un fichier, l'ajouter (git add) et faire le commit (git commit) avant de l'envoyer sur le serveur :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;git push origin master:refs/heads/master&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et vous obtiendrez un message de ce genre :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;Counting objects: 3, done.
Writing objects: 100% (3/3), 214 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@VOTRE_SERVEUR:hello-world.git
* [new branch]    master -&gt; master&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;S'il n'y a aucune révision dans le dépôt local vous aurez cette erreur :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code&gt;error: src refspec master does not match any.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git@VOTRE_SERVEUR.net:hello-world.git'&lt;/code&gt;&lt;/pre&gt;</description>
        
              </item>
          <item>
        <title>Livrer du html au lieu du xhtml avec symfony</title>
        <link>https://www.nikrou.net/post/2008/04/17/Livrer-du-html-au-lieu-du-xhtml-avec-symfony</link>
        <guid isPermaLink="false">urn:md5:747da1a759f51a101b85e6c38a9e67ed</guid>
        <pubDate>Thu, 17 Apr 2008 11:32:00 +0200</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>html</category>
                  <category>php</category>
                  <category>symfony</category>
                <description>&lt;p&gt;Je n'ai encore fait aucun site en &lt;acronym title=&quot;Extensible HyperText Markup Language&quot; lang=&quot;en&quot;&gt;XHTML&lt;/acronym&gt; pour diverses raisons : on doit servir le XHTML avec le type mime &lt;em&gt;application/xhtml+xml&lt;/em&gt;. Mais le navigateur au grand &lt;em&gt;E&lt;/em&gt; bleu ne gère tout simplement pas ce type mime. Et livrer le XHTML avec le type mime text/html revient à faire du mauvais &lt;acronym title=&quot;HyperText Markup Language&quot; lang=&quot;en&quot;&gt;HTML&lt;/acronym&gt;. Voilà pour la petite intro.&lt;/p&gt;
&lt;p&gt;Lorsqu'on utilise un &lt;acronym title=&quot;Content Managment System&quot; lang=&quot;en&quot;&gt;CMS&lt;/acronym&gt;, ou un &lt;a href=&quot;http://fr.wikipedia.org/wiki/Framework&quot;&gt;framework&lt;/a&gt;, on se demande si celui-là va respecter notre façon de coder. J'ai adopté &lt;a hreflang=&quot;en&quot; href=&quot;http://www.symfony-project.org/&quot;&gt;symfony&lt;/a&gt; et j'ai découvert avec joie que je peux continuer à faire du HTML!&lt;/p&gt; &lt;p&gt;Pour permettre à symfony de livrer du HTML au lieu du XHTML, il suffit de surcharger les quelques fonctions d'affichage. Il faut aussi modifier le fichier &lt;strong&gt;layout.php&lt;/strong&gt; de l'application et remplacer le doctype XHTML par celui qui va bien:&lt;/p&gt;
&lt;pre id=&quot;line1&quot;&gt;&lt;span class=&quot;doctype&quot;&gt;&amp;lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Il faut aussi supprimer les tags fermants des balises contenues dans la partie &lt;em&gt;head&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Les fonctions d'affichages des différents tags HTML sont toutes gérées dans le &lt;a hreflang=&quot;en&quot; href=&quot;http://www.symfony-project.org/book/1_0/07-Inside-the-View-Layer#Helpers&quot;&gt;helper&lt;/a&gt; &lt;strong&gt;TagHelper.php&lt;/strong&gt;. J'ai donc récupérer ce fichier dans le répertoire &lt;strong&gt;lib/helper/&lt;/strong&gt; de symfony et je l'ai placé dans le répertoire &lt;strong&gt;lib/helper/&lt;/strong&gt; de mon application et j'ai modifié la fonction &lt;strong&gt;tag&lt;/strong&gt; pour livrer du HTML au lieu du XHTML. En fait j'ai simplement supprimé le slash de fin de tag:&lt;/p&gt;
&lt;p&gt;sortie de la commande diff:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-&amp;nbsp; return '&amp;lt;'.$name._tag_options($options).(($open) ? '&amp;gt;' : ' /&amp;gt;');&lt;br /&gt;+&amp;nbsp; return '&amp;lt;'.$name._tag_options($options).(($open) ? '&amp;gt;' : '&amp;gt;');&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cela fonctionne parfaitement mais cela a deux inconvénients. Il ne faut pas oublier de garder toutes les autres fonctions présentes dans ce fichier. L'autre inconvénient est que si on met à jour symfony on risque de passer à côté de modifications dans ce fichier puisqu'on l'aura surchargé.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Mettre à jour le contenu d'un package debian</title>
        <link>https://www.nikrou.net/post/2008/03/25/Mettre-a-jour-le-contenu-dun-package-debian</link>
        <guid isPermaLink="false">urn:md5:af0691c50d26f5db8a3017b2fb8135dc</guid>
        <pubDate>Tue, 25 Mar 2008 21:08:00 +0100</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>debian</category>
                  <category>emacs</category>
                  <category>linux</category>
                  <category>php</category>
                <description>Récemment, avec le passage en version 22.1 de &lt;a hreflang=&quot;en&quot; href=&quot;http://www.gnu.org/software/emacs/&quot;&gt;mon éditeur favori&lt;/a&gt;, j'ai eu un soucis avec le &lt;a hreflang=&quot;en&quot; href=&quot;http://sourceforge.net/projects/php-mode/&quot;&gt;mode php&lt;/a&gt; qui permet notament la mise en valeur du code par la coloration syntaxique de celui-ci. La version du mode que j'utilisais était vieille comme mes robes comme dirait ma grand-mère!&lt;br /&gt; J'ai beau avoir ma distribution &lt;a hreflang=&quot;en&quot; href=&quot;http://www.debian.org/&quot;&gt;debian&lt;/a&gt; en version instable, la version la plus récente était la 1.1.0 qui datait tout de même du 24 janvier 2004. Depuis sont sorties plusieurs versions. La plus récente date du mois de janvier 2008. Je ne sais pas qui maintient ce paquet mais il a dû partir sur une île déserte et ne donne plus signe de vie. Comme ce mode ne fonctionnait pas avec ma nouvelle version d'emacs j'ai décidé d'utiliser une version plus récente du mode php et j'ai donc mis à jour le package debian.&lt;br /&gt;&lt;br /&gt;Faire un package debian à partir des sources d'une application n'est pas très complexe mais en faire un à partir d'un autre est encore plus simple ! J'ai récupéré la &lt;a hreflang=&quot;fr&quot; href=&quot;http://ftp.debian.org/debian/pool/main/p/php-elisp/php-elisp_1.1.0-2_all.deb&quot;&gt;version 1.1.0-2 du package debian&lt;/a&gt; et la &lt;a hreflang=&quot;en&quot; href=&quot;http://puzzle.dl.sourceforge.net/sourceforge/php-mode/php-mode-1.4.0.tar.gz&quot;&gt;version 1.4 de php-mode&lt;/a&gt;. Après il suffit de faire les opérations suivantes:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;création d'un répertoire pour contenir les sources du package, php-elisp_1.4.0, par exemple, ainsi qu'un sous répertoire &lt;em&gt;DEBIAN&lt;/em&gt; contenant les métadonnées.&lt;br /&gt;
&lt;code&gt; # mkdir-p php-elisp_1.4.0/DEBIAN&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;extraction des métadonnées de l'ancien package:&lt;br /&gt;
&lt;code&gt; # dpkg-deb -e php-elisp_1.1.0-2_all.deb php-elisp_1.4.0/DEBIAN&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;extraction des sources de l'ancien package:&lt;br /&gt;
&lt;code&gt;# dpkg -x php-elisp_1.1.0-2_all.deb php-elisp_1.4.0&lt;/code&gt;
&lt;p&gt;Le contenu du répertoire php-elisp_1.4.0 ressemble à ça (sortie de la commande tree):&lt;/p&gt;
&lt;pre&gt;.&lt;br /&gt;|-- DEBIAN&lt;br /&gt;|   |-- conffiles&lt;br /&gt;|   |-- control&lt;br /&gt;|   |-- md5sums&lt;br /&gt;|   |-- postinst&lt;br /&gt;|   `-- prerm&lt;br /&gt;|-- etc&lt;br /&gt;|   `-- emacs&lt;br /&gt;|       `-- site-start.d&lt;br /&gt;|           `-- 50php-elisp.el&lt;br /&gt;`-- usr&lt;br /&gt;    |-- lib&lt;br /&gt;    |   `-- emacsen-common&lt;br /&gt;    |       `-- packages&lt;br /&gt;    |           |-- install&lt;br /&gt;    |           |   `-- php-elisp&lt;br /&gt;    |           `-- remove&lt;br /&gt;    |               `-- php-elisp&lt;br /&gt;    `-- share&lt;br /&gt;        |-- doc&lt;br /&gt;        |   `-- php-elisp&lt;br /&gt;        |       |-- README.Debian&lt;br /&gt;        |       |-- changelog.Debian.gz&lt;br /&gt;        |       `-- copyright&lt;br /&gt;        `-- emacs&lt;br /&gt;            `-- site-lisp&lt;br /&gt;                `-- php-elisp&lt;br /&gt;                    `-- php-mode.el&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;mise à jour du fichier php-mode.el&lt;/li&gt;
&lt;li&gt;mise à jour de la version du package dans le fichier DEBIAN/control en remplaçant 1.1.0-2 par 1.4.0&lt;/li&gt;
&lt;li&gt;mise à jour de la somme md5 de la nouvelle version de php-mode dans le fichier DEBIAN/md5sums:&lt;br /&gt;
&lt;code&gt; # md5sum php-elisp_1.4.0/usr/share/emacs/site-lisp/php-elisp/php-mode.el&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;reconstruction du package:&lt;br /&gt;
&lt;code&gt; # dpkg-deb --build php-elisp_1.4.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;installation du nouveau package:&lt;br /&gt;
&lt;code&gt; # dpkg -i php-elisp_1.4.0.deb&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
        
              </item>
          <item>
        <title>Emmener son code en voyage</title>
        <link>https://www.nikrou.net/post/2008/03/16/Emmener-son-code-en-voyage</link>
        <guid isPermaLink="false">urn:md5:77ca540bb55b590e0a1f1612d0ad62c6</guid>
        <pubDate>Sun, 16 Mar 2008 17:18:00 +0100</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>debian</category>
                  <category>linux</category>
                  <category>perl</category>
                  <category>subversion</category>
                  <category>svk</category>
                <description>Lorsque je développe sur un projet, j'utilise subversion et je fais souvent des &quot;commit&quot; pour éviter de garder dans mon répertoire de travail du code modifié et non propagé sur le serveur. Tout va bien lorsqu'on est connecté au serveur central mais si on est dans le train, à la campagne, dans un avion, ou dans les toilettes, cela devient plus problématique. &lt;p&gt;Le fait que subversion ne soit pas un gestionnaire de version distribué rend la connexion au serveur obligatoire pour faire des mises à jour. J'ai pris l'habitude faire des mises à jours régulières voire très régulières surtout sur des parties du code qui varient beaucoup. De ce fait, lorsque je ne suis pas connecté au serveur, je ne peux suivre cette politique de mise à jour. Mais heureusement &lt;a href=&quot;http://svk.elixus.org/view/HomePage&quot; hreflang=&quot;en&quot;&gt;svk&lt;/a&gt; est là. svk rend la gestion de subversion décentralisée. svk utilise le système de fichiers de subversion mais ajoute des foncitonnalités supplémentaires - surtout la gestion du mode déconnecté-.&lt;/p&gt;
&lt;p&gt;Voici comment je l'utilise par exemple sur un projet que nous nommerons HelloWorld. Le dépôt se trouve sur http://svn.central-depot.com/svn/hello_world. Il faut bien évidemment commencer par installer svk, mais &lt;a href=&quot;http://fr.wikipedia.org/wiki/Advanced_Packaging_Tool&quot;&gt;apt&lt;/a&gt; est mon ami et après le &quot;apt-get install svk&quot; qui va bien, le tour est joué!&lt;/p&gt;
&lt;p&gt;Il faut ensuite initialiser le dépôt local:&lt;br /&gt;
&lt;code&gt;# svk depotmap --init&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Faire un miroir du dépot central, en local:&lt;br /&gt;
&lt;code&gt;# svk mirror http://svn.central-depot.com/svn/hello_world //hello_world&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Jusque là on n'a toujours aucun code en local! Il faut maintenant faire la synchronisation entre dépôt distant et dépôt local:&lt;br /&gt;
&lt;code&gt;# svk sync //hello_world&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Désormais on peut travailler en mode déconnecté. On est à jour vis-à-vis du dépôt. On commence par se créer une branche locale:&lt;br /&gt;
&lt;code&gt;# svk cp //hello_world/trunk //local/hello_world&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Le &lt;em&gt;//local&lt;/em&gt; n'est qu'une convention. Vous pouvez évidemment nommer votre branche comme bon vous semble. Après on se crée une copie de travail tout comme on le ferait avec subversion sauf que les commandes sont du type &quot;svk commande&quot; au lieu de &quot;svn commande&quot; :&lt;br /&gt;
&lt;code&gt;# svk co //local/hello_world /path/to/my/work/hello_world&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On peut ensuite faire des modifications. Pour finir un petit exemple de mise à jour vers le dépôt. Par exemple, pour faire une mise à jour (merge) entre mes modifications locales et le dépôt, je fais:&lt;br /&gt;
&lt;code&gt;
# svk sync //hello_world  (récupération éventuelle de modification)&lt;br /&gt;
# svk merge -C -rREV1:REV2 //local/hello_world //hello_world/trunk (le &lt;strong&gt;-C&lt;/strong&gt; correspond au dry-run)&lt;br /&gt;
# svk merge -rREV1:REV2 //local/hello_world //hello_world/trunk
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pour que tout soit parfait, il me manque un mode équivalent à &lt;a href=&quot;http://www.xsteve.at/prg/emacs/psvn.el&quot; hreflang=&quot;en&quot;&gt;psvn&lt;/a&gt; pour svk.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Mise à jour de trac</title>
        <link>https://www.nikrou.net/post/2007/12/16/Mise-a-jour-de-trac</link>
        <guid isPermaLink="false">urn:md5:a0dea1bd76ba2c260ba60425a40612b7</guid>
        <pubDate>Sun, 16 Dec 2007 21:04:00 +0100</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>debian</category>
                  <category>subversion</category>
                  <category>trac</category>
                <description>&lt;p&gt;Suite au passage à la version 0.10.3 de &lt;a href=&quot;http://trac.edgewall.org/&quot; hreflang=&quot;fr&quot;&gt;trac&lt;/a&gt;, je me suis retrouvé avec une erreur fort peu sympathique&amp;nbsp;: &lt;em&gt;(file is encrypted or is not a database)&lt;/em&gt;. Je n'ai pas tout compris et la lecture des logs d'apache ne m'a tellement aidé non plus&amp;nbsp;! Mais ...&lt;/p&gt; &lt;p&gt;Le message semble vouloir dire que soit le fichier .db est encrypté soit trac ne le reconnait pas comme un fichier de base de données. Cela peut faire sourire mais lorsqu'il y a beaucoup d'utilisateurs derrière &lt;a href=&quot;http://subversion.tigris.org/&quot; hreflang=&quot;fr&quot;&gt;subversion&lt;/a&gt;, cela fait nettement moins rire!
Une petite recherche avec mon ami, m'a permis de comprendre que la version de sqlite utilisé par trac dans la version 0.10.3 n'était plus compatible avec celle utilisée précédemment. On est passé de la version 2 à la version 3. Il va falloir convertir la base.
Pour cela il suffit de faire&amp;nbsp;:
@@mv trac.db trac.orig.db
sqlite trac.orig.db .dump|sqlite3 trac.db@@
Evidemment si les exécutables sqlite (version 2) et sqlite3 ne sont pas présents sur le système, il suffit de les intaller&amp;nbsp;:
apt-get install sqlite sqlite3&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Récupérer un fichier effacé</title>
        <link>https://www.nikrou.net/post/2007/04/18/126-recuperer-un-fichier-efface</link>
        <guid isPermaLink="false">urn:md5:ff2d9d6c1c95a900e2a92b078d18c5a6</guid>
        <pubDate>Wed, 18 Apr 2007 17:15:00 +0000</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>subversion</category>
                <description> &lt;p&gt;Le but du &quot;jeu&quot; est de récupérer un fichier sauvegardé dans subversion - que l'on appellera par exemple &lt;em&gt;mon-fichier.php&lt;/em&gt; - , que l'on a effacé à une révision donnée. Ce n'est pas aussi simple qu'il n'y parait mais ça reste très abordable. Le plus compliqué est de retrouver à quel moment où il a été éffacé. Pour ce faire on utilise la commande log en mode verbeux: (à coup de &lt;em&gt;grep&lt;/em&gt; au besoin.&lt;br /&gt;
&lt;code&gt;
svn log -v
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;On se retrouve avec une révision &lt;strong&gt;N&lt;/strong&gt; où le fichier a été supprimé. Donc à la révision précédente, &lt;strong&gt;N-1&lt;/strong&gt;, le fichier était présent. C'est ce fichier que l'on veut récupérer. Il suffit alors de faire:&lt;br /&gt;
&lt;code&gt;
svn -rN-1 copy http://localhost/svn/PROJET/path/2/file/mon-fichier.php path/2/file/mon-fichier.php
&lt;/code&gt;
&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Optimisation de la configuration de trac</title>
        <link>https://www.nikrou.net/post/2006/06/10/102-optimisation-de-la-configuration-de-trac</link>
        <guid isPermaLink="false">urn:md5:6241a2f3238dbc177ea7c86b4c96098b</guid>
        <pubDate>Sat, 10 Jun 2006 09:04:00 +0000</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>python</category>
                  <category>subversion</category>
                  <category>trac</category>
                <description>&lt;p&gt;&lt;a href=&quot;http://projects.edgewall.com/trac/&quot; hreflang=&quot;en&quot;&gt;trac&lt;/a&gt; est un outil formidable pour gérer un projet mais on a l'impression que l'on se complique la vie lorsqu'on veut &lt;a href=&quot;https://www.nikrou.net/post/2006/04/29/53-gestion-de-plusieurs-projets-avec-trac&quot;&gt;gérer plusieurs projets&lt;/a&gt; sur le même serveur. Avec le nombre de projets augmentant cela devient très rapidement rébarbatif mais heureusement il y a le &lt;a href=&quot;http://www.modpython.org/&quot; hreflang=&quot;en&quot;&gt;mod python d'apache&lt;/a&gt; pour trac!&lt;/p&gt; &lt;p&gt;Si je garde mon exemple de quatre projets (projet1, projet2, projet3 et projet4) ayant chacun son dépot et son répertoire trac dédié sous le répertoire &lt;em&gt;/var/trac/projets/&lt;/em&gt; alors la configuration d'apache peut se faire de la manière suivante:&lt;/p&gt;
&lt;pre&gt;&amp;lt;Location /projets&amp;gt;&lt;br /&gt;  SetHandler mod_python&lt;br /&gt;  PythonHandler trac.web.modpython_frontend&lt;br /&gt;  PythonOption TracEnvParentDir /var/trac/projets&lt;br /&gt;  PythonOption TracUriRoot /projets&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LocationMatch /projets/[^/]*/login&amp;gt;&lt;br /&gt;  AuthType Basic&lt;br /&gt;  AuthName &quot;Mes projets&quot;&lt;br /&gt;  AuthUserFile /path/2/dav_svn.users &lt;br /&gt;  Require valid-user&lt;br /&gt;&amp;lt;/LocationMatch&amp;gt;&lt;/pre&gt;
&lt;p&gt;Il faut bien entendu que le &lt;strong&gt;mod python&lt;/strong&gt; soit installé sur votre serveur (package libapache2-mod-python sur debian) pour que cela fonctionne. Pour prendre en compte un nouveau projet dans trac il suffit de créer l'environnement (avec trac-admin) sous le répertoire &lt;em&gt;/var/trac/projets/&lt;/em&gt;. C'est tout!&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Gestion de plusieurs projets avec trac</title>
        <link>https://www.nikrou.net/post/2006/04/29/53-gestion-de-plusieurs-projets-avec-trac</link>
        <guid isPermaLink="false">urn:md5:c15ad1b3c26458feafa032fa041cfebb</guid>
        <pubDate>Sat, 29 Apr 2006 09:32:52 +0000</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>python</category>
                  <category>subversion</category>
                  <category>trac</category>
                <description> &lt;p&gt;Pour ajouter un projet dans trac, voici la marche à suivre:&lt;/p&gt;

&lt;ol&gt;
 &lt;li&gt;
   &lt;p&gt;trac-admin /path/to/projetenv initenv (répertoire où sont placés les pages du wiki entre autre)&lt;/p&gt;
   &lt;p&gt;Il faut ensuite choisir un nom pour le projet ainsi que le chemin vers le dépôt subversion&lt;/p&gt;
   &lt;p&gt;Exemple: trac-admin /var/trac/projets/essai (le dépôt subverison correspondant est: /home/nicolas/projets/essai)&lt;/p&gt;

&lt;/li&gt;
 &lt;li&gt;
   &lt;p&gt;Modifier la conf d'apache&lt;/p&gt;

   &lt;pre&gt;
Alias /trac /usr/share/trac/htdocs/

AliasMatch /projets/(projet1|projet2|projet3|projet4)(/?.*) /var/trac/projets/$1/trac.cgi$2

&amp;lt;DirectoryMatch &quot;/var/trac/projets/projet1/trac.cgi&quot;&gt;
        SetEnv TRAC_ENV &quot;/var/trac/projets/projet1&quot;
        AllowOverride None
        Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
        AddHandler cgi-script .cgi
        Order allow,deny
        Allow from all
&amp;lt;/DirectoryMatch&gt;

&amp;lt;DirectoryMatch &quot;/var/trac/projets/projet2/trac.cgi&quot;&gt;
        SetEnv TRAC_ENV &quot;/var/trac/projets/projet2&quot;
        AllowOverride None
        Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
        AddHandler cgi-script .cgi
        Order allow,deny
        Allow from all
&amp;lt;/DirectoryMatch&gt;

&amp;lt;DirectoryMatch &quot;/var/trac/projets/projet3/trac.cgi&quot;&gt;
        SetEnv TRAC_ENV &quot;/var/trac/projets/projet3&quot;
        AllowOverride None
        Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
        AddHandler cgi-script .cgi
        Order allow,deny
        Allow from all
&amp;lt;/DirectoryMatch&gt;

&amp;lt;DirectoryMatch &quot;/var/trac/projets/projet4/trac.cgi&quot;&gt;
        SetEnv TRAC_ENV &quot;/var/trac/projets/projet4&quot;
        AllowOverride None
        Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
        AddHandler cgi-script .cgi
        Order allow,deny
        Allow from all
&amp;lt;/DirectoryMatch&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La configuration d'apache n'est pas optimale. On devrait pouvoir l'améliorer en factorisant les différents DirectoryMatch. De plus on utilise les mêmes fichiers de mots de passe pour tous les projets; on devrait pouvoir les séparer.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Revenir à une version antérieure avec subversion</title>
        <link>https://www.nikrou.net/post/2006/03/24/88-revenir-a-une-version-anterieure-avec-subversion</link>
        <guid isPermaLink="false">urn:md5:47f358ad1496d85eabe3e31ab9091fb5</guid>
        <pubDate>Fri, 24 Mar 2006 17:54:19 +0000</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>subversion</category>
                <description> &lt;p&gt;Cela fait un moment que je travaille sur le même projet en faisant des branches, des tags... Je fais des &quot;commit&quot; réguliers. Et tout à coup, arrivant à la révision 2347 je me suis apperçu que j'avais introduit, par mégarde, un nouveau bug qui n'était pas présent à la révision 2346.&lt;/p&gt;
&lt;p&gt;La question qui est sur toutes les lèvres: comment revenir facilement à la révision précédente ? Et bien rien de plus simple, il suffit de taper la commande suivante:&lt;/p&gt;
&lt;pre&gt;svn merge -r2347:2346 URL .&lt;/pre&gt;
&lt;p&gt;Deux remarques:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;c'est bien la commande merge qu'il faut utiliser; c'est clairement écrit dans la documentation.&lt;/li&gt;
&lt;li&gt;je ne me suis pas trompé; les numéros de révisions sont dans l'ordre décroissant contrairement à un merge &quot;classique&quot;. Mais en y réfléchissant bien, c'est logique, on veut bien passer de la révision 2347 à la révision 2346&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il ne reste plus qu'à faire un commit.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Gestion des sources</title>
        <link>https://www.nikrou.net/post/2006/03/22/87-gestion-des-sources</link>
        <guid isPermaLink="false">urn:md5:18d38de1aa3484eef47eade7bfcf28a5</guid>
        <pubDate>Wed, 22 Mar 2006 21:08:29 +0000</pubDate>
        <dc:creator>Nicolas</dc:creator>
                  <category>Outils</category>
                          <category>python</category>
                  <category>subversion</category>
                  <category>trac</category>
                <description> &lt;p&gt;Que l'on travaille seul ou à plusieurs sur un projet, le besoin se fait rapidement sentir de pouvoir garder un historique des modifications que l'on a faites. La méthode, qui consiste à commenter une partie du code pour éventuellement la réutiliser, atteint rapidement ses limites lorsqu'on travaille à plusieurs ou longtemps sur un même projet. En ayant pratiqué cette méthode je me suis retrouvé à un moment avec plus de commentaire que de code!&lt;/p&gt;
&lt;p&gt;Pour un projet qui dure ou pour un projet collaboratif, la meilleure façon de travailler est d'utiliser un gestionnaire de versions tel que &lt;a href=&quot;http://www.nongnu.org/cvs/&quot; title=&quot;Concurrent Versions System&quot; hreflang=&quot;en&quot;&gt;C.V.S&lt;/a&gt; ou &lt;a href=&quot;http://subversion.tigris.org/&quot; hreflang=&quot;en&quot;&gt;Subversion&lt;/a&gt;. Ma préférence va à Subversion surtout couplé avec &lt;a href=&quot;http://projects.edgewall.com/trac/&quot; hreflang=&quot;en&quot;&gt;Trac&lt;/a&gt; qui est une interface web à Subversion pour parcourir les sources. Trac intègre aussi un wiki, un gestionnaire de bugs, de tickets.&lt;/p&gt;
&lt;p&gt;Pour débuter avec Subersion, rien ne vaut la lecture de &lt;a href=&quot;http://svnbook.red-bean.com/&quot; hreflang=&quot;en&quot;&gt;la documentation&lt;/a&gt;, sous licence &lt;a href=&quot;http://creativecommons.org/licenses/by/2.0/&quot; hreflang=&quot;en&quot;&gt;Creative Commons&lt;/a&gt;, publiée par &lt;a href=&quot;http://www.oreilly.com/&quot; hreflang=&quot;en&quot;&gt;Oreilly&lt;/a&gt;.&lt;/p&gt;</description>
        
              </item>
      </channel>
</rss>
