<?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>Le blog à Nono</title>
	<atom:link href="http://blogs.glou.org/arnaud/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.glou.org/arnaud</link>
	<description>C'est l'histoire d'un geek...</description>
	<lastBuildDate>Wed, 16 May 2012 10:17:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Limiter les connexions par adresse IP : mauvaise idée</title>
		<link>http://blogs.glou.org/arnaud/2012/05/16/limiter-les-connexions-par-adresse-ip-mauvaise-idee/</link>
		<comments>http://blogs.glou.org/arnaud/2012/05/16/limiter-les-connexions-par-adresse-ip-mauvaise-idee/#comments</comments>
		<pubDate>Wed, 16 May 2012 10:17:49 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[geekeries]]></category>
		<category><![CDATA[grmpf]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[système]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=457</guid>
		<description><![CDATA[Je gère depuis un petit moment un serveur de miroirs relativement important accessible, entre autres, via FTP et HTTP. Vu l&#8217;amour immodéré que je porte à cette relique du siècle dernier qu&#8217;est FTP, j&#8217;ai limité les ressources qu&#8217;il peut consommer pour favoriser HTTP. Entre autres, j&#8217;ai choisi de limiter le nombre de connexions simultanées à [...]]]></description>
			<content:encoded><![CDATA[<p>Je gère depuis un petit moment <a href="http://mirrors.ircam.fr/pub/">un serveur de miroirs relativement important</a> accessible, entre autres, via FTP et HTTP. Vu l&#8217;amour immodéré que je porte à cette relique du siècle dernier qu&#8217;est FTP, j&#8217;ai limité les ressources qu&#8217;il peut consommer pour favoriser HTTP. Entre autres, j&#8217;ai choisi de limiter le nombre de connexions simultanées à deux par adresse IP, et tant pis pour les amoureux de NAT qui devraient rejoindre ceux de FTP dans leurs 20 ans de retard.</p>
<p>Sauf que ça casse l&#8217;accès FTP non seulement pour les boîtes NAT, mais aussi pour l&#8217;outil de monitoring du miroir Apache, qui pour une raison ou une autre ouvre plusieurs connexions simultanément. Mauvaise idée, donc.</p>
<p>Grmpf.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/05/16/limiter-les-connexions-par-adresse-ip-mauvaise-idee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser Apache comme mandataire inverse</title>
		<link>http://blogs.glou.org/arnaud/2012/03/22/utiliser-apache-comme-mandataire-inverse/</link>
		<comments>http://blogs.glou.org/arnaud/2012/03/22/utiliser-apache-comme-mandataire-inverse/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 14:11:05 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[geekeries]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[système]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=452</guid>
		<description><![CDATA[Il y a quelques jours, j&#8217;ai dû (provisoirement) utiliser Apache comme mandataire inverse pour un de mes sites web. Vu que j&#8217;ai dû régler 2 ou 3 détails qui m&#8217;ont fait replonger dans la config d&#8217;Apache, un petit aide-mémoire. Le cahier des charges : le site http://gallery.glou.org/ doit apparaître comme http://photos.glou.org/pwg/, sachant que http://photos.glou.org/ est [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques jours, j&#8217;ai dû (provisoirement) utiliser Apache comme mandataire inverse pour un de mes sites web. Vu que j&#8217;ai dû régler 2 ou 3 détails qui m&#8217;ont fait replonger dans la config d&#8217;Apache, un petit aide-mémoire.</p>
<p>Le cahier des charges : le site <a href="http://gallery.glou.org/">http://gallery.glou.org/</a> doit apparaître comme <a href="http://photos.glou.org/pwg/">http://photos.glou.org/pwg/</a>, sachant que <a href="http://photos.glou.org/">http://photos.glou.org/</a> est déjà peuplé et se trouve sur une machine physique différente. Pourquoi ne pas utiliser simplement une redirection ? Simple : jusqu&#8217;à ce matin, la machine <em>gallery.glou.org</em> ne disposait pas d&#8217;une adresse IPv4 publique. Elle était par contre joignable normalement en IPv6. Ce problème étant résolu, la config décrite ici devrait disparaître dès que j&#8217;aurai un moment pour m&#8217;en occuper ; en attendant je la décris, elle pourrait resservir.</p>
<p>Travaillons d&#8217;abord sur <em>photos.glou.org</em> qui va jouer le rôle de mandataire. Il faut bien entendu y utiliser les modules Apache <em>mod_proxy</em> et <em>mod_proxy_http</em> pour la fonctionnalité de base ; ne pas oublier d&#8217;y ajouter <em>mod_substitute</em> pour réécrire les URL. Au final, la config (partielle) ressemble à ça :</p>
<pre>LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule substitute_module /usr/lib/apache2/modules/mod_substitute.so

&lt;VirtualHost *&gt;
  ServerName photos.glou.org

  .../...

  Redirect /pwg /pwg/
  ProxyPass /pwg/ http://gallery.glou.org/
  ProxyPassReverse /pwg/ http://gallery.glou.org/

  &lt;Location /pwg/&gt;
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|http://gallery.glou.org|http://photos.glou.org/pwg|"
  &lt;/Location&gt; 

&lt;/VirtualHost&gt;</pre>
<p>En l&#8217;état, ça marche mais les logs sur <em>gallery.glou.org</em> montreront toutes les requêtes comme provenant du mandataire. On va donc indiquer à Apache (sur <em>gallery</em>, donc, cette fois-ci) d&#8217;utiliser le format combined classique pour les requêtes directes et d&#8217;indiquer l&#8217;adresse d&#8217;origine véritable en plus de celle du mandataire pour les requêtes qu&#8217;il relaie. Ça se dit comme ça :</p>
<pre># Une copie du format combined standard, au cas ou.
LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined-std
LogFormat "%{X-Forwarded-For}i (via %h) %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined-proxy

SetEnvIf X-Forwarded-For ".+" proxiedrequest
CustomLog logs/proxy_log combined-std env=!proxiedrequest
CustomLog logs/proxy_log combined-proxy env=proxiedrequest</pre>
<p>Voilà, maintenant ça juste marche.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/03/22/utiliser-apache-comme-mandataire-inverse/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Les prochains concerts des Fourmis acidulées</title>
		<link>http://blogs.glou.org/arnaud/2012/02/25/les-prochains-concerts-des-fourmis-acidulees/</link>
		<comments>http://blogs.glou.org/arnaud/2012/02/25/les-prochains-concerts-des-fourmis-acidulees/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 20:10:33 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[musique]]></category>
		<category><![CDATA[concert]]></category>
		<category><![CDATA[fourmis acidulées]]></category>
		<category><![CDATA[rock]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=449</guid>
		<description><![CDATA[Pas moins de trois concerts prévus pour les deux mois qui viennent : Le 17 mars à l&#8217;Époque, 81 rue du Cardinal Lemoine, Paris 5ème, à l&#8217;occasion de la St Patrick. Le 24 mars au Mood&#8217;s, 13 passage du Moulinet, Paris 13ème, en compagnie de Coverbusters ; entrée 10 euros avec une boisson, ou 8 [...]]]></description>
			<content:encoded><![CDATA[<p>Pas moins de trois concerts prévus pour les deux mois qui viennent :</p>
<ul>
<li>Le 17 mars à l&#8217;Époque, 81 rue du Cardinal Lemoine, Paris 5ème, à l&#8217;occasion de la St Patrick.</li>
<li>Le 24 mars au Mood&#8217;s, 13 passage du Moulinet, Paris 13ème, en compagnie de Coverbusters ; entrée 10 euros avec une boisson, ou 8 euros en prévente auprès du groupe (par mail à <a href="javascript:DeCryptX('qsfwfouftAgpvsnjt.bdjevmfft/gs')">preventes [chez] fourmis-acidulees [point] fr</a> ou en <a href="https://www.weezevent.com/widget_billeterie.php?id_evenement=13626&amp;code=23889">cliquant ici</a>).</li>
<li>Le 14 avril au Cavern, 21 rue Dauphine, Paris 6ème.</li>
</ul>
<p>On vous y attend nombreux !</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/02/25/les-prochains-concerts-des-fourmis-acidulees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les vieux sont de retour</title>
		<link>http://blogs.glou.org/arnaud/2012/02/25/les-vieux-sont-de-retour/</link>
		<comments>http://blogs.glou.org/arnaud/2012/02/25/les-vieux-sont-de-retour/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 19:37:25 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[musique]]></category>
		<category><![CDATA[rock]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=446</guid>
		<description><![CDATA[Dans la série «les vieux sont de retour», je suis en train d&#8217;écouter le nouveau Van Halen, a Different Kind Of Truth, avec nul autre que David Lee Roth au chant. Une fois passé le premier morceau (Tattoo, je crois que c&#8217;est aussi le premier single, et il est, disons, dispensable), on les retrouve comme [...]]]></description>
			<content:encoded><![CDATA[<p>Dans la série «les vieux sont de retour», je suis en train d&#8217;écouter le nouveau Van Halen, <em>a Different Kind Of Truth</em>, avec nul autre que David Lee Roth au chant. Une fois passé le premier morceau (<em>Tattoo</em>, je crois que c&#8217;est aussi le premier single, et il est, disons, dispensable), on les retrouve comme on les avait quittés il y a 25 ans. Encore ! <img title="Very Happy" src="http://illiweb.com/fa/i/smiles/icon_biggrin.png" alt="Very Happy" longdesc="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/02/25/les-vieux-sont-de-retour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remettre les objectifs en face des trous avec exiftool</title>
		<link>http://blogs.glou.org/arnaud/2012/02/12/remettre-les-objectifs-en-face-des-trous-avec-exiftool/</link>
		<comments>http://blogs.glou.org/arnaud/2012/02/12/remettre-les-objectifs-en-face-des-trous-avec-exiftool/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 20:12:09 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[geekeries]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[EXIF]]></category>
		<category><![CDATA[exiftool]]></category>
		<category><![CDATA[objectifs]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=440</guid>
		<description><![CDATA[Un peu de contexte : j&#8217;ai un appareil photo Pentax K200D et un petit tas de vieux objectifs des années 60-70 entièrement manuels. Bien entendu, ces vieux objectifs (montés sur le boîtier via un adaptateur m42-Pentax K) n&#8217;embarquent aucune électronique, et le boîtier est donc incapable de les reconnaître. Tout au plus connaît-il à peu [...]]]></description>
			<content:encoded><![CDATA[<p>Un peu de contexte : j&#8217;ai un appareil photo Pentax K200D et un petit tas de vieux objectifs des années 60-70 entièrement manuels. Bien entendu, ces vieux objectifs (montés sur le boîtier via un adaptateur m42-Pentax K) n&#8217;embarquent aucune électronique, et le boîtier est donc incapable de les reconnaître. Tout au plus connaît-il à peu près leur focale : l&#8217;utilisateur (c&#8217;est moi <img src='http://blogs.glou.org/arnaud/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) l&#8217;indique à la main pour régler le stabilisateur. À peu près, parce que l&#8217;interface de réglage ne connaît que certaines valeurs courantes (par exemple, pas moyen de régler le boîtier sur 105mm, je me rabats sur 100mm qui est la valeur possible la plus proche).</p>
<p>Du coup j&#8217;ai un peu joué avec <a href="http://owl.phy.queensu.ca/~phil/exiftool/">exiftool</a> pour remettre les données EXIF en face des trous. Par exemple, pour <a href="http://photos.glou.org/arnaud/index.php?showimage=112">le concert de vendredi dernier</a>, j&#8217;ai utilisé mes trois Takumar (systématiquement à pleine ouverture, ça me simplifie la tâche) ; j&#8217;utilise le bout de script suivant pour enregistrer les infos pertinentes dans les photos :</p>
<pre>cd /le/repertoire/ou/j/ai/mis/mes/photos
exiftool -FocalLength="105.0 mm" -FNumber=2.8 \
    -FocalLengthIn35mmFormat="157.5 mm" \
    -LensModel="SMC Takumar 105mm f/2.8" \
    -if '$focallength eq "100.0 mm"' -ext jpg .
exiftool -FNumber=1.8 \
    -LensModel="Super Takumar 55mm f/1.8" \
    -if '$focallength eq "55.0 mm"' -ext jpg .
exiftool -FNumber=3.5 \
    -LensModel="Super Takumar 35mm f/3.5" \
    -if '$focallength eq "35.0 mm"' -ext jpg .
rm *_original</pre>
<p>Et voilà, c&#8217;est cuit ! <img src='http://blogs.glou.org/arnaud/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/02/12/remettre-les-objectifs-en-face-des-trous-avec-exiftool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les Fourmis au Mood&#8217;s le 24 mars</title>
		<link>http://blogs.glou.org/arnaud/2012/02/08/les-fourmis-au-moods-le-24-mars/</link>
		<comments>http://blogs.glou.org/arnaud/2012/02/08/les-fourmis-au-moods-le-24-mars/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 22:55:34 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[musique]]></category>
		<category><![CDATA[concert]]></category>
		<category><![CDATA[fourmis acidulées]]></category>
		<category><![CDATA[paris]]></category>
		<category><![CDATA[rock]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=437</guid>
		<description><![CDATA[Nous partagerons à nouveau la scène avec les Coverbusters le 24 mars prochain. Ça se passe au Mood&#8217;s, près de Tolbiac, à Paris 13ème. Plus de détails sur le site des Fourmis. Les pré-ventes sont à 8 euros avec une conso (au lieu de 10 sur place) en écrivant au groupe (preventes [chez] fourmis-acidulees [point] [...]]]></description>
			<content:encoded><![CDATA[<p>Nous partagerons à nouveau la scène avec les Coverbusters le 24 mars prochain. Ça se passe au Mood&#8217;s, près de Tolbiac, à Paris 13ème. Plus de détails <a href="http://www.fourmis-acidulees.fr/2012/02/07/prochain-concert-le-24-mars-2012-au-moods/">sur le site des Fourmis</a>.</p>
<p>Les pré-ventes sont à 8 euros avec une conso (au lieu de 10 sur place) en écrivant au groupe (<a href="javascript:DeCryptX('qsfwfouftAgpvsnjt.bdjevmfft/gs')">preventes [chez] fourmis-acidulees [point] fr</a>) ou en cliquant ci-dessous.</p>
<p><a href="https://www.weezevent.com/widget_billeterie.php?id_evenement=13626&amp;code=23889"><img class="alignnone" src="http://www.weezevent.com/images/statique/billetterie_en_ligne_v2_noir.png" alt="" width="218" height="38" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/02/08/les-fourmis-au-moods-le-24-mars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nouvel article : Plague</title>
		<link>http://blogs.glou.org/arnaud/2012/02/04/nouvel-article-plague/</link>
		<comments>http://blogs.glou.org/arnaud/2012/02/04/nouvel-article-plague/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 15:46:24 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[geekeries]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Plague]]></category>
		<category><![CDATA[RPM]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=435</guid>
		<description><![CDATA[Ça fait un bon moment que je devais le publier ici-même : mon article sur Plague initialement publié dans GNU/Linux Magazine France est en ligne.]]></description>
			<content:encoded><![CDATA[<p>Ça fait un bon moment que je devais le publier ici-même : mon <a title="Plague : une infrastructure de fabrication de paquets RPM" href="http://blogs.glou.org/arnaud/plague-une-infrastructure-de-fabrication-de-paquets-rpm/">article sur Plague</a> initialement publié dans GNU/Linux Magazine France est en ligne.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/02/04/nouvel-article-plague/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le piège à con du jour : variables locales en python</title>
		<link>http://blogs.glou.org/arnaud/2012/01/27/le-piege-a-con-du-jour-variables-locales-en-python/</link>
		<comments>http://blogs.glou.org/arnaud/2012/01/27/le-piege-a-con-du-jour-variables-locales-en-python/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 15:26:43 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[geekeries]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=424</guid>
		<description><![CDATA[Note pour plus tard. Soit un bout de code python qui ressemble à ça: mavariable = None def fonction():   if mavariable is None:    mavariable = 'toto'   blablabla() Ne pas oublier que dans ce cas la variable mavariable est locale à la fonction à cause de l&#8217;assignation à l&#8217;intérieur du if. La preuve [...]]]></description>
			<content:encoded><![CDATA[<p>Note pour plus tard. Soit un bout de code python qui ressemble à ça:</p>
<pre>mavariable = None

def fonction():
  if mavariable is None:
    mavariable = 'toto'
  blablabla()</pre>
<p>Ne pas oublier que dans ce cas la variable <em>mavariable</em> est locale à la fonction à cause de l&#8217;assignation à l&#8217;intérieur du <em>if</em>. La preuve :</p>
<pre>&gt;&gt;&gt; fonction()
Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  File "&lt;stdin&gt;", line 2, in fonction
UnboundLocalError: local variable 'mavariable' referenced before assignment</pre>
<p>Grmpf.</p>
<p>Merci à Sam qui a fouillé dans la doc : c&#8217;est effectivement écrit <a href="http://docs.python.org/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python">là</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/01/27/le-piege-a-con-du-jour-variables-locales-en-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Déplacer une VM KVM «à la main»</title>
		<link>http://blogs.glou.org/arnaud/2012/01/18/deplacer-une-vm-kvm-a-la-main/</link>
		<comments>http://blogs.glou.org/arnaud/2012/01/18/deplacer-une-vm-kvm-a-la-main/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 12:12:37 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[geekeries]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[LVM]]></category>
		<category><![CDATA[stockage]]></category>
		<category><![CDATA[virtualisation]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=412</guid>
		<description><![CDATA[Le contexte J&#8217;ai une petite ferme de serveurs physiques sous Scientific Linux 6 qui hébergent des machines virtuelles KVM gérées par libvirt. J&#8217;utilise des volumes logiques LVM comme disques virtuels. La plupart des VM ne sont pas critiques et supportent d&#8217;être arrêtées quelques minutes; par contre il vaut mieux ne pas les arrêter trop longtemps. [...]]]></description>
			<content:encoded><![CDATA[<h1>Le contexte</h1>
<p>J&#8217;ai une petite ferme de serveurs physiques sous <a href="http://scientificlinux.org/">Scientific Linux</a> 6 qui hébergent des machines virtuelles KVM gérées par <a href="http://www.libvirt.org/">libvirt</a>. J&#8217;utilise des volumes logiques LVM comme disques virtuels.</p>
<p>La plupart des VM ne sont pas critiques et supportent d&#8217;être arrêtées quelques minutes; par contre il vaut mieux ne pas les arrêter trop longtemps. Tout le problème est donc de recopier au moins le gros des données sans arrêter la VM.</p>
<p>Pour l&#8217;exemple, je déplacerai une VM <em>vm1</em>, dont le disque virtuel est sur <em>/dev/vg00/vm1</em>, de la machine physique <em>host1</em> à sa soeur <em>host2</em>. On supposera pour l&#8217;exemple que les deux machines sont identiques; en tout cas il vaut mieux qu&#8217;elles disposent de la même version du paquet <em>qemu-kvm</em>. Et quand je dis la même version c&#8217;est la même version au patch près, sinon la VM risque de ne pas démarrer sur le nouvel hôte.</p>
<h1>L&#8217;outil</h1>
<p>Je sais faire la même manip avec des isolateurs à la place des VM: un coup de rsync et c&#8217;est marre. Ah, si rsync savait se débrouiller à peu près efficacement avec un périphérique bloc&#8230; Et ben ça existe, ça s&#8217;appelle <a href="https://github.com/mpalmer/lvmsync">lvmsync</a>, c&#8217;est un script ruby qu&#8217;il suffit de poser sur les deux machines hôtes. En dehors de ça, vous aurez besoin de dmsetup (normalement il est installé, il fait partie du paquet <em>device-mapper</em> qui est lui-même une dépendance de <em>libvirt</em>) et root devra pouvoir se connecter en ssh sur <em>host2</em> depuis <em>host1</em>.</p>
<h1>La méthode</h1>
<p>On commence par créer le volume logique sur <em>host2</em>:</p>
<pre>lvcreate -l640 -nvm1 vg00</pre>
<p>À adapter évidemment, il doit être identique à l&#8217;original qui se trouve sur <em>host1</em>.</p>
<p>Ensuite, sur <em>host1</em>, on prend un instantané du disque de la VM et on le copie sur <em>host2</em>:</p>
<pre>lvcreate -L10G -s -nvm1-snap /dev/vg00/vm1
dd if=/dev/vg00/vm1-snap bs=10M | ssh root@host2 dd of=/dev/vg00/vm1 bs=10M</pre>
<p>On peut maintenant éteindre la VM, puis synchroniser le disque. Ensuite on exporte la configuration de la VM.</p>
<pre>virsh shutdown vm1
lvmsync /dev/vg00/vm1-snap host2:/dev/vg00/vm1
virsh dumpxml vm1 | ssh root@host2 'cat &gt; /var/tmp/vm1.xml'</pre>
<p>Reste plus, sur <em>host2</em>, qu&#8217;à importer et démarrer la VM:</p>
<pre>virsh define /var/tmp/vm1.xml
virsh start vm1</pre>
<p>Une fois que c&#8217;est fait, on peut faire le ménage sur <em>host1</em>:</p>
<pre>virsh undefine vm1
lvremove /dev/vg00/vm1-snap
lvremove /dev/vg00/vm1</pre>
<h1>C&#8217;est prêt!</h1>
<p>Et ça va quand même vachement plus vite comme ça. Maintenant, il va falloir écrire un bout de script pour emballer tout ça, on verra ça un autre jour. <img src='http://blogs.glou.org/arnaud/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/01/18/deplacer-une-vm-kvm-a-la-main/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrer une VM de Xen vers KVM</title>
		<link>http://blogs.glou.org/arnaud/2012/01/17/migrer-une-vm-de-xen-vers-kvm/</link>
		<comments>http://blogs.glou.org/arnaud/2012/01/17/migrer-une-vm-de-xen-vers-kvm/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 14:12:18 +0000</pubDate>
		<dc:creator>nono</dc:creator>
				<category><![CDATA[geekeries]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[virtualisation]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blogs.glou.org/arnaud/?p=398</guid>
		<description><![CDATA[Un petit aide-mémoire sur la migration d&#8217;une machine virtuelle Linux de Xen (sur CentOS 5.x, mais ça ne doit pas jouer énormément) vers KVM (sur Scientific Linux 6.x, donc avec libvirt). L&#8217;essentiel de ce qui suit vient de cette page. Préparation de la machine virtuelle J&#8217;ai donc une VM Xen, appelons-la testxen1 (parce que c&#8217;est [...]]]></description>
			<content:encoded><![CDATA[<p>Un petit aide-mémoire sur la migration d&#8217;une machine virtuelle Linux de Xen (sur CentOS 5.x, mais ça ne doit pas jouer énormément) vers KVM (sur Scientific Linux 6.x, donc avec <em>libvirt</em>). L&#8217;essentiel de ce qui suit vient de <a href="http://sativouf.blogspot.com/2010/02/xen-to-kvm-migration.html">cette page</a>.</p>
<h1>Préparation de la machine virtuelle</h1>
<p>J&#8217;ai donc une VM Xen, appelons-la <em>testxen1</em> (parce que c&#8217;est son nom), qui tourne sur l&#8217;ancien serveur. L&#8217;OS installé sur la VM est un CentOS 5. Sur cette machine virtuelle (qui tourne encore):</p>
<ul>
<li>éditer <em>/etc/inittab</em>, enlever le <em>getty(8)</em> qui tourne sur la console Xen et décommenter ceux des terminaux virtuels habituels;</li>
<li>installer un noyau Linux «normal» (pas un noyau Xen);</li>
<li>éditer <em>/etc/fstab</em> et remplacer les disques virtuels Xen (<em>xvda</em>, <em>xvdb</em> et ainsi de suite) par des disques IDE (<em>hda</em>, <em>hdb</em>&#8230;). NB: pas évident que cette étape soit partout la même, ça dépend peut-être de la version du noyau; à tester.</li>
<li>enlever le paramètre <em>console=xvc0</em> du nouveau noyau dans <em>/boot/grub/menu.lst</em>, et s&#8217;assurer que le nouveau noyau est bien sélectionné par défaut;</li>
<li>installer grub:</li>
</ul>
<pre>[root@testxen1 ~]# grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub&gt; device (hd0) /dev/xvda
device (hd0) /dev/xvda
grub&gt; root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub&gt; setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub&gt; quit
quit</pre>
<p>C&#8217;est fini pour la machine virtuelle, on peut maintenant l&#8217;arrêter.</p>
<h1>Sur la nouvelle machine physique</h1>
<p>On commence, bien sûr, par copier l&#8217;ancien (ou les anciens) disque(s) virtuel(s) sur la nouvelle machine. Dans mon cas, il s&#8217;agit de volumes logiques LVM, on fait bêtement ça à grands coups de <em>dd(1)</em>. Reste juste à créer la nouvelle VM:</p>
<pre>virt-install --connect qemu:///system -n testxen1 -r 1024 --vcpus=1 \
 --disk /dev/vg00/testxen1 --vnc --os-type linux --accelerate \
 --network=bridge=br102,model=virtio,mac=12:00:02:e3:00:01 \
 --noreboot --keymap us --import</pre>
<p>Quelques notes en vrac:</p>
<ul>
<li>bien évidemment, remplacer le nom de la machine (ici <em>testxen1</em>) par ce qu&#8217;on veut;</li>
<li>idem pour la mémoire (option <em>-r</em>) et le nombre de processeurs (option <em>&#8211;vcpus</em>);</li>
<li>dans le cas où on a plusieurs disques virtuels, on peut répéter plusieurs fois l&#8217;option <em>&#8211;disk</em>, avec le disque de démarrage en premier;</li>
<li>pour l&#8217;option <em>&#8211;network</em>, replacer <em>br102</em> par le nom du pont réseau qui va bien (si vous avez une config réseau différente, va falloir chercher <img src='http://blogs.glou.org/arnaud/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ) et bien entendu l&#8217;adresse MAC par la bonne valeur.</li>
</ul>
<p>Voilà, vous allez voir démarrer votre nouvelle VM sous vos yeux zébahis. Elle est pas belle, la vie? <img src='http://blogs.glou.org/arnaud/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.glou.org/arnaud/2012/01/17/migrer-une-vm-de-xen-vers-kvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

