<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GNU Squad &#187; Gestionnaires de versions</title>
	<atom:link href="http://blog.gnusquad.org/category/developpement/gestionnaires-de-versions/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gnusquad.org</link>
	<description>Freedom computers</description>
	<lastBuildDate>Tue, 15 Jun 2010 06:04:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Limiter le temps d&#8217;exécution d&#8217;une requête MySQL</title>
		<link>http://blog.gnusquad.org/2008/11/27/limiter-le-temps-d-execution-d-une-requete-mysql/</link>
		<comments>http://blog.gnusquad.org/2008/11/27/limiter-le-temps-d-execution-d-une-requete-mysql/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 12:03:54 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
				<category><![CDATA[Base de données]]></category>
		<category><![CDATA[Debian GNU/Linux]]></category>
		<category><![CDATA[Gestionnaires de versions]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=38</guid>
		<description><![CDATA[Vous est-il déjà arrivé de voir un de vos serveurs de base de données MySQL mis à genoux par la faute de développeurs incompétents qui effectuent des requêtes sur des tables sans index composées de dizaines de millions de tuples ?
Si la réponse est oui, voici ma solution « one line » pour les calmer [...]]]></description>
			<content:encoded><![CDATA[<p>Vous est-il déjà arrivé de voir un de vos serveurs de base de données MySQL mis à genoux par la faute de développeurs incompétents qui effectuent des requêtes sur des tables sans index composées de dizaines de millions de tuples ?<br />
Si la réponse est oui, voici ma solution « <em>one line</em> » pour les calmer un peu ! <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Logiciels utilisés :</p>
<ul>
<li>GNU Awk 3.1.5</li>
<li>MySQL Client 5.0.51a</li>
</ul>
<pre>
<strong>root@gnusquad</strong>:~# mysql -e 'SHOW PROCESSLIST' | awk 'BEGIN { MAX_TIME = 60 ; USERS = "boulet1|boulet2" } $6 &gt; MAX_TIME &amp;&amp; $5 == "Query" &amp;&amp; $2 ~ USERS {print "KILL " $1 ";"}' | mysql
</pre>
<p>Petites explications sur le code « awk » :</p>
<ul>
<li>$1 contient l&#8217;ID de la requête SQL</li>
<li>$2 contient le nom de l&#8217;utilisateur</li>
<li>$5 contient le type de commande (Query, Sleep, …)</li>
<li>$6 contient le temps d&#8217;exécution de la requête SQL en secondes</li>
<li>MAX_TIME contient le temps en secondes à partir duquel une requête doit être tuée</li>
<li>USERS contient une expression rationnelle indiquant les utilisateurs concernés par cette sanction</li>
</ul>
<p>Il ne vous reste plus qu&#8217;à mettre ce script dans le « <em>crontab</em> » en pensant à vous connecter avec un utilisateur MySQL ayant le droit « <em>SUPER</em> » pour pouvoir tuer les connexions si besoin est. <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>À lire :</p>
<ul>
<li><a href="http://man.gnusquad.org/gawk/section-1/en/">Man page de gawk</a></li>
</ul>
<p><span id="more-38"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2008/11/27/limiter-le-temps-d-execution-d-une-requete-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestion des mime-types dans Subversion</title>
		<link>http://blog.gnusquad.org/2008/06/04/gestion-des-mime-types-dans-subversion/</link>
		<comments>http://blog.gnusquad.org/2008/06/04/gestion-des-mime-types-dans-subversion/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 04:31:21 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Gestionnaires de versions]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=19</guid>
		<description><![CDATA[Par défaut sous Subversion, l&#8217;heuristique utilisée pour détecter les mime-types est très basique ce qui est gênant lorsque l&#8217;on veut utiliser des fichiers (ex : des images) du dépôt via mod_dav_svn pour les intégrer dans un site.
Logiciels utilisés :

Subversion 1.4.6 (r28521)
GNU Bash 3.1.17
GNU Find 4.4.0
File 4.24

Voici une petite commande permettant de définir les mime-types des [...]]]></description>
			<content:encoded><![CDATA[<p>Par défaut sous Subversion, l&#8217;heuristique utilisée pour détecter les mime-types est très basique ce qui est gênant lorsque l&#8217;on veut utiliser des fichiers (ex : des images) du dépôt via <em><a href="http://svnbook.red-bean.com/en/1.4/svn.ref.mod_dav_svn.conf.html">mod_dav_svn</a></em> pour les intégrer dans un site.</p>
<p>Logiciels utilisés :</p>
<ul>
<li>Subversion 1.4.6 (r28521)</li>
<li>GNU Bash 3.1.17</li>
<li>GNU Find 4.4.0</li>
<li>File 4.24</li>
</ul>
<p>Voici une petite commande permettant de définir les mime-types des fichiers de l’arborescence dans laquelle nous nous trouvons (vous pouvez retirez la partie « <em>| bash > /dev/null</em> » pour afficher ce qui sera exécuté) :</p>
<pre>
<em>user@gnusquad</em>:~/projet$ find . -type f ! -regex ".*/\.svn/.*" -exec echo svn propset svn:mime-type \"\$\(file -bi '{}'\)\" {} \; | bash &gt; /dev/null
</pre>
<p>Il se peut que des messages d&#8217;erreurs apparaissent dûs à un non conformisme de Subversion vis à vis de la RFC 1521.</p>
<blockquote><p>svn: Le type MIME &#8216;text/x-c++ charset=utf-8&#8242; ne se termine pas par des caractères alphanumériques</p></blockquote>
<p>Ce bug a été corrigé dans la révision 30795 de Subversion (tapez <em>svn &#8211;version | head -1</em> pour voir votre révision).</p>
<p>À lire :</p>
<ul>
<li> <a href="http://svnbook.red-bean.com/en/1.4/svn.advanced.props.html#svn.advanced.props.auto">Subversion : Automatic Property Setting</a></li>
<li><a href="http://www.faqs.org/rfcs/rfc1521.html">RFC 1521</a></li>
</ul>
<p><span id="more-19"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2008/06/04/gestion-des-mime-types-dans-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modifier le contenu d&#8217;une révision dans un référentiel Subversion</title>
		<link>http://blog.gnusquad.org/2008/05/01/modifier-contenu-revision-subversion/</link>
		<comments>http://blog.gnusquad.org/2008/05/01/modifier-contenu-revision-subversion/#comments</comments>
		<pubDate>Thu, 01 May 2008 08:37:00 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Gestionnaires de versions]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=3</guid>
		<description><![CDATA[Il peut parfois être utile de devoir modifier le contenu d&#8217;une révision dans un référentiel Subversion pour supprimer une information qui n&#8217;aurait jamais dû s&#8217;y trouver comme, par exemple, un mot de passe.
Logiciels utilisés :

Subversion 1.4.2
GNU Bash 3.1.17
GNU Sed 4.1.5

Commençons par créer un référentiel de test nommé « modification_revision » :
root@gnusquad:~# REPOS=/var/local/lib/svn/modification_revision
root@gnusquad:~# svnadmin create $REPOS
Effectuons [...]]]></description>
			<content:encoded><![CDATA[<p>Il peut parfois être utile de devoir modifier le contenu d&#8217;une révision dans un référentiel Subversion pour supprimer une information qui n&#8217;aurait jamais dû s&#8217;y trouver comme, par exemple, un mot de passe.</p>
<p>Logiciels utilisés :</p>
<ul>
<li>Subversion 1.4.2</li>
<li>GNU Bash 3.1.17</li>
<li>GNU Sed 4.1.5</li>
</ul>
<p>Commençons par créer un référentiel de test nommé « <em>modification_revision</em> » :</p>
<pre><strong>root@gnusquad</strong>:~# REPOS=/var/local/lib/svn/modification_revision
<strong>root@gnusquad</strong>:~# svnadmin create $REPOS</pre>
<p>Effectuons une copie locale (<em>checkout</em>) de ce référentiel :</p>
<pre><strong>root@gnusquad</strong>:~# svn co file://$REPOS
Révision 0 extraite.</pre>
<p>Ajoutons-y un fichier « <em>exemple</em> » et commitons le dans le référentiel :</p>
<pre><strong>root@gnusquad</strong>:~# cd modification_revision/
<strong>root@gnusquad</strong>:~/modification_revision# echo mon_password : gruikgruik &gt; exemple
<strong>root@gnusquad</strong>:~/modification_revision# svn add exemple
A         exemple
<strong>root@gnusquad</strong>:~/modification_revision# svn ci -m "ajout d'un fichier"
Ajout          exemple
Transmission des données .
Révision 1 propagée.</pre>
<p>Le but, maintenant, est de faire disparaître le mot de passe « <em>gruikgruik</em> » du référentiel afin que personne ne puisse le récupérer.</p>
<p>Commençons par effectuer un <em>dump</em> du référentiel dans le fichier <em>~/dump_svn</em> :</p>
<pre><strong>root@gnusquad</strong>:~/modification_revision# cd
<strong>root@gnusquad</strong>:~# svnadmin dump $REPOS &gt; dump_svn
* Révision 0 déchargée.
* Révision 1 déchargée.</pre>
<p>Modifions le mot de passe dans le dump avec <em>sed</em> par exemple en veillant à mettre le même nombre de caractères sinon vous obtiendrez l&#8217;erreur suivante par la suite : « <em>svnadmin: Fin prématurée des données dans le flux de sauvegarde</em> » à cause du <em>Content-length</em> de la révision :</p>
<pre><strong>root@gnusquad</strong>:~# sed -i s/gruikgruik/xxxxxxxxxx/g dump_svn</pre>
<p>Supprimons le référentiel et recréons en un vide :</p>
<pre><strong>root@gnusquad</strong>:~# rm -r $REPOS
<strong>root@gnusquad</strong>:~# svnadmin create $REPOS</pre>
<p>Importons le dump :</p>
<pre><strong>root@gnusquad</strong>:~# svnadmin load $REPOS &lt; dump_svn</pre>
<pre>&lt;&lt;&lt; Début d'une nouvelle transaction basée sur la révision 1
     * ajout de : exemple ...
svnadmin: Sommes de contrôle différentes, fichier '/exemple' :
   attendu :  6fe4a181ffeec4b6da1b63d377f14fb4
   obtenu :  def10992a3cb890493d37440f3538fd8</pre>
<p>Subversion nous informe que les sommes de contrôle sont différentes ce qui est tout à fait normal vu que l&#8217;on a modifié le mot de passe, mettons donc à jour celles-ci :</p>
<pre><strong>root@gnusquad</strong>:~# sed -i s/6fe4a181ffeec4b6da1b63d377f14fb4/def10992a3cb890493d37440f3538fd8/ dump_svn</pre>
<p>Puis pour en finir, réimportons proprement le dump :</p>
<pre><strong>root@gnusquad</strong>:~# rm -rf $REPOS
<strong>root@gnusquad</strong>:~# svnadmin create $REPOS
<strong>root@gnusquad</strong>:~# svnadmin load $REPOS &lt; dump_svn
&lt;&lt;&lt; Début d'une nouvelle transaction basée sur la révision 1
     * ajout de : exemple ... fait.

------- Révision 1 propagée (commit) &gt;&gt;&gt;</pre>
<p>Et voilà, notre référentiel ne contient plus de traces du mot de passe « <em>gruikgruik</em> ».<br />
<span id="more-3"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2008/05/01/modifier-contenu-revision-subversion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
