<?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>Linux Attitude&#187; Serveur</title>
	<atom:link href="http://linux-attitude.fr/tag/serveur/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Fri, 17 Feb 2012 08:00:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Strate NTP</title>
		<link>http://linux-attitude.fr/post/strate-ntp?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=strate-ntp</link>
		<comments>http://linux-attitude.fr/post/strate-ntp#comments</comments>
		<pubDate>Thu, 09 Feb 2012 08:10:35 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[planete-libre]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1470</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: ntp.conf&#160;; fudge Pour vérifier le bon fonctionnement de votre démon ntp, vous êtes amené à taper la commande suivante qui liste les source de temps utilisées&#160;: $ ntpdc -p Cette commande met une étoile face à la source de référence utilisée pour la synchronisation. Le choix se fait entre autre en fonction [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: ntp.conf&nbsp;; fudge</p>


<p>Pour vérifier le bon fonctionnement de votre démon ntp, vous êtes amené à taper la commande suivante qui liste les source de temps utilisées&nbsp;:</p>
<pre>
$ ntpdc -p
</pre>


<p>Cette commande met une étoile face à la source de référence utilisée pour la synchronisation. Le choix se fait entre autre en fonction du stratum de la source. Je rappelle que les serveurs NTP disposant d'une source de temps matérielle fiable (horloge atomique) ont pour stratum 1. Ceux qui se synchronisent sur eux, 2, et ainsi de suite.</p>


<p>Étant donné qu'il y a un grand nombre de serveurs publics de strate 2 et 3, vous devriez avoir accès à des serveurs de strate 4, ou au pire 5. Mais si le serveur a une strate plus élevée, il se peut que l'horloge choisie ne soit plus le serveur, mais l'horloge locale qui a une strate définie par défaut à 5 sur certaine distributions.</p>


<p>Et là c'est le drame, vous n'êtes plus synchronisés&nbsp;!</p>


<p>Pour résoudre ce problème, il y a plusieurs méthodes, se résumant toutes en la configuration des serveurs de temps&nbsp;:</p>
<pre>
# ntp.conf

# mettre l'option prefer sur le serveur voulu
serveur xxx.com prefer
# réduire la strate du serveur
fudge xxx.com stratum 4

# augmenter la strate de l'horloge locale
# 127.127 pour les horloges non réseau
# 1.0 pour l'horloge système
fudge 127.127.1.0 stratum 10
</pre>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/il-faut-laisser-le-temps-au-temps' rel='bookmark' title='Permanent Link: Il faut laisser le temps au temps'>Il faut laisser le temps au temps</a></li>
<li><a href='http://linux-attitude.fr/post/verrou-virtuel' rel='bookmark' title='Permanent Link: Verrou virtuel'>Verrou virtuel</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/planete-libre" title="planete-libre" rel="tag">planete-libre</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/strate-ntp/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Les machines en prod</title>
		<link>http://linux-attitude.fr/post/les-machines-en-prod?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=les-machines-en-prod</link>
		<comments>http://linux-attitude.fr/post/les-machines-en-prod#comments</comments>
		<pubDate>Thu, 02 Dec 2010 17:37:20 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Commande]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1118</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: molly-guard Je suis sûr qu'un certain nombre d'entre vous ont plusieurs machines en production. Et je suis certain que vous les gérez toutes à distance (merci ssh). Le risque est grand lorsqu'on a des machines distantes de confondre un terminal avec un autre. Vous pouvez bien sûr personnaliser un prompt différent pour [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: molly-guard</p>


<p>Je suis sûr qu'un certain nombre d'entre vous ont plusieurs machines en production. Et je suis certain que vous les gérez toutes à distance (merci ssh).</p>


<p>Le risque est grand lorsqu'on a des machines distantes de confondre un terminal avec un autre. Vous pouvez bien sûr personnaliser <a href="http://linux-attitude.fr/post/prompt-string">un prompt différent</a> pour chaque machine, mais je vous propose aujourd'hui une autre solution.</p>

<pre>
$ apt-get install molly-guard
</pre>


<p>Et voilà&nbsp;!</p>


<p>Maintenant les commandes shutdown, halt et reboot vous demanderont de taper le nom de la machine que vous voulez vraiment éteindre avant de le faire.
Ouf, le serveur mail/dns/web de l'entreprise ne sera pas éteint par erreur à la place de votre serveur de base de données de test.</p>


<p>Cerise sur le gateau, ceci n'arrive pas si vous êtes sur un terminal local sur la machine, puisque vous êtes sensés savoir où vous êtes.</p>


<p>Exercice pratique, faites de même pour les quelques (elles doivent rester rares) commandes critiques sur vos machines.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/presentation-cours' rel='bookmark' title='Permanent Link: Présentation, cours'>Présentation, cours</a></li>
<li><a href='http://linux-attitude.fr/post/partage-de-sourisclavier-entre-deux-machines' rel='bookmark' title='Permanent Link: Partage de souris/clavier entre deux machines'>Partage de souris/clavier entre deux machines</a></li>
<li><a href='http://linux-attitude.fr/post/multi-ecran-sur-plusieurs-machines' rel='bookmark' title='Permanent Link: Multi-écran sur plusieurs machines'>Multi-écran sur plusieurs machines</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/commande" title="Commande" rel="tag">Commande</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/les-machines-en-prod/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Traitement d&#8217;une url par apache</title>
		<link>http://linux-attitude.fr/post/traitement-dune-url-par-apache?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=traitement-dune-url-par-apache</link>
		<comments>http://linux-attitude.fr/post/traitement-dune-url-par-apache#comments</comments>
		<pubDate>Mon, 05 Jul 2010 16:53:26 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=914</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: apache, virtualhost, configuration Que se passe-t-il lorsqu'apache reçoit une requête&#160;? La question peut paraître anodine jusqu'à ce qu'on ait à écrire un fichier de configuration un peu complexe. Il faut alors avoir une idée de l'ordre dans lequel les opérations sont effectuées. Commençons par un aperçu rapide&#160;: -&#62; récupération du virtualhost concerné [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: apache, virtualhost, configuration</p>


<p>Que se passe-t-il lorsqu'apache reçoit une requête&nbsp;?</p>


<p>La question peut paraître anodine jusqu'à ce qu'on ait à écrire un fichier de configuration un peu complexe. Il faut alors avoir une idée de l'ordre dans lequel les opérations sont effectuées.</p>


<p>Commençons par un aperçu rapide&nbsp;: <br />
-&gt; récupération du virtualhost concerné <br />
-&gt; récupération de la partie requête  <br />
-&gt; rewrite rules et redirect  <br />
-&gt; alias et réécriture de la requête nom de fichier <br />
-&gt; traitement par &lt;Directory&gt;, &lt;DirectoryMatch&gt;, .htaccess, &lt;Files&gt;, &lt;FilesMatch&gt;, &lt;Location&gt; et &lt;LocationMatch&gt; <br />
-&gt; droits d'accès <br />
-&gt; traitement du fichier en fonction de son type. <br /></p>


<p>Ouf c'est long&nbsp;!
Comme cet article, alors prenez votre temps ...</p>


<h2>Traitement de l'URL</h2>

<p>Pour <em>chaque requête</em>, apache relit sa configuration (en fait il récupère la version parsée en mémoire).
Ensuite il parcourt les éléments dans l'ordre, les compile en une seule conf puis la utilise cette conf spécifiquement pour cette requête.</p>


<h3>Virtualhost</h3>

<p>Bon ca c'est facile, on se base sur les <strong>ServerName</strong> définis dans les <strong>&lt;Virtualhost&gt;</strong>. Si on n'en trouve pas, on cherche dans les <strong>ServerAlias</strong>, si on n'en trouve pas on cherche encore, mais cette fois avec les wildcard (*.mondomaine.com), si on ne trouve toujours pas, on prend le premier &lt;Virtualhost&gt; qui a été dacléré. Et enfin s'il n'y a pas de virtualhost, on prend le <strong>DocumentRoot</strong> défini à la racine du serveur apache lui-même.</p>


<p>Voilà on a trouvé le virtualhost, maintenant on prend la requête, qui est la partie située à droite de l'URL après l'hôte et le port.</p>


<p><span id="more-914"></span></p>


<h3>Transformation de l'URL</h3>


<p>Contrairement à ce qu'on pourrait penser, lorsqu'il y a modification de l'url, il n'y a pas de gestion de droits d'accès sur la requête originale, seulement sur l'url modifiée (par rewriterule en général).</p>


<p>On traite d'abord les <strong>RewriteRule</strong>, dans l'ordre de leur priorités.</p>


<p>Si aucune ne correspond, on traite ensuite les <strong>Redirect</strong> et les <strong>RedirectMatch</strong> dans l'ordre de leur écriture. Attention on prend aussi en compte ceux qui sont dans les <strong>&lt;Location&gt;</strong> qui correspondent, mais on fait comme s'ils avaient été écrits à la racine. C'est-à-dire qu'on n'enlève pas le préfixe du location pour les traiter.</p>


<p>On traite ensuite les <strong>Alias</strong>, <strong>AliasMatch</strong>, <strong>ScriptAlias</strong> et <strong>ScriptAliasMatch</strong> dans l'ordre de leur apparition. Ce traitement fournit le nom de fichier réel à utiliser pour une URL donnée.</p>


<p>Si on ne trouve pas d'alias on ajoute le <strong>DocumentRoot</strong> à la requête pour obtenir le chemin complet du fichier.</p>


<h2>Configuration et droits d'accès</h2>

<p>A partir de maintenant on repart de la configuration du virtualhost et pour chaque section on prend la configuration qui correspond à la requête en cours. Et à la fin on fusionne les configurations récupérées selon une règle de fusion dépendant de chaque module.</p>


<p>C'est complexe et chiant à retenir, donc pour simplifier retenez que les configurations spécifiques aux droits d'accès sont en mode <em>remplacement</em>, c'est-à-dire que la dernière configuration remplace toutes les autres.</p>


<h3>Directory et DirectoryMatch</h3>


<p>On sait maintenant quel chemin doit être lu, on parcourt l'arborescence pour savoir si c'est un fichier et si on peu le lire s'il a un vrai chemin sur le système ...</p>


<p>On part de / et au fur et a mesure qu'on descend dans le système de fichier on vérifie les <strong>&lt;Directory&gt;</strong>, puis les <strong>.htaccess</strong>, puis les <strong>&lt;DirectoryMatch&gt;</strong> dans l'ordre pour chacun des répertoires. On a donc séquentiellement pour par exemple /var/www&nbsp;:</p>
<ul>
<li>&lt;Directory /&gt;</li>
<li>/.htaccess</li>
<li>&lt;DirectoryMatch /&gt;</li>
<li>&lt;Directory /var&gt;</li>
<li>/var/.htaccess</li>
<li>&lt;DirectoryMatch /var&gt;</li>
<li>&lt;Directory /var/www&gt;</li>
<li>/var/www/.htaccess</li>
<li>&lt;DirectoryMatch /var/www&gt;</li>
</ul>

<p>Toutes les sections qui correspondent sont accumulées dans la configuration en cours.</p>


<p>Attention&nbsp;! Si l'option <strong>FollowSymLinks</strong> est <em>activée</em>, on fait la correspondance sur les liens symboliques <em>avant</em> de les déréférencer. Si l'option est <em>désactivée</em>, on la fait sur les liens <em>après</em> les avoir déréférencés. C'est assez contre intuitif&nbsp;!</p>


<h3>Files et FilesMatch</h3>


<p>Une fois arrivé au bout, on a un fichier, on lit alors les sections <strong>&lt;Files&gt;</strong> et <strong>&lt;FilesMatch&gt;</strong> dans l'ordre de leur apparition, y compris celles qu'on a trouvé dans les .htaccess ou les &lt;Directory&gt;.</p>


<p>Notez que ces sections ne prennent en compte que le nom de fichier, sans chemin.</p>


<p>Attention, même remarque que précédemment sur les liens symboliques&nbsp;: "Si l'option <strong>FollowSymLinks</strong> est <em>activée</em>, on matche sur les liens symboliques <em>avant</em> de les déréférencer. Si l'option est <em>désactivée</em>, on matche sur les liens <em>après</em> les avoir déréférencés."</p>



<h3>Location et LocationMatch</h3>


<p>Maintenant il nous reste à prendre en compte tous les <strong>&lt;Location&gt;</strong> et <strong>&lt;LocationMatch&gt;</strong> de la configuration qui correspondent à notre URL. Cette fois on les prend séquentiellement et uniquement en fonction de l'url.</p>


<p>Attention les étapes de réécriture de règle sont passées, on matche donc sur l'url <em>réécrite</em>.</p>



<h3>Configuration des droits</h3>


<p>Dans le cas des droits d'accès, les blocs de directives se remplacent. C'est-à-dire que si vous avez une série de "<strong>order</strong> / <strong>allow</strong> / <strong>deny</strong>" dans une section, elle remplace <em>intégralement</em> toute autre série de "order / allow / deny" que vous pourriez trouver dans une section précédente.</p>


<p>Attention ceci est valable pour chacun des modules <em>séparément</em>.</p>


<p>Un exemple pour être plus clair&nbsp;:</p>
<pre>
&lt;Location /&gt;
    order allow,deny
&lt;/Location&gt;
&lt;Directory /html&gt;
    deny from all
    AuthUserFile users.txt
&lt;/Directory&gt;
&lt;DirectoryMatch /&gt;
    AuthUserFile web.txt
&lt;/DirectoryMatch&gt;
&lt;Directory /&gt;
    order deny,allow
    allow from all
    AuthUserFile admins.txt
&lt;/Directory&gt;
</pre>


<p>Le premier &lt;Directory&gt; est lu, puis il est remplacé par le 2e &lt;Directory&gt;, puis il est remplacé par le &lt;DirectoryMatch&gt; puis par le &lt;Location&gt; <em>intégralement</em>, mais séparément pour le module authz_host (order, allow, deny) et le module authnz_user (AuthUserFile). On a donc pour une requête qui matcherait les 3 sections la configuration suivante&nbsp;:</p>
<pre>
order allow,deny
AuthUserFile web.txt
</pre>


<p>Pas évident hein :-) Surtout que cette règle n'est pas la même pour d'autres modules comme mod_rewrite.</p>


<h3>Traitement des droits</h3>


<p>Le traitement des droits lui-même est particulier.</p>


<p>Si on est en <strong>satisfy all</strong> (par défaut)&nbsp;:</p>
<ul>
<li>On prend tous les modules de traitement des droits d'accès et si l'un d'entre eux interdit l'accès, on interdit l'accès. <br /></li>
<li>Puis on prend tous les modules d'authentification utilisateur et si l'un d'entre eux autorise l'accès ou s'il n'y en a pas, on autorise l'accès.</li>
</ul>

<p>Si on est en <strong>satisfy any</strong>&nbsp;:</p>
<ul>
<li>On prend tous les modules de traitement des droits d'accès et si l'un d'entre eux interdit l'accès&nbsp;:
<ul>
<li>On demande son avis aux modules d'authentification, si l'un d'entre eux autorise l'accès ou s'il n'y en a pas, on autorise.</li>
</ul></li>
</ul>

<h3>Rewrite (again)</h3>


<p>Arrivé ici, on repasse dans les <strong>RewriteRules</strong> Mais cette fois on ne traite que le cas particulier des rewrite dans les sections <strong>&lt;Location&gt;</strong>, <strong>&lt;Directory&gt;</strong>, <strong>&lt;Files&gt;</strong> et <strong>.htaccess</strong></p>


<p>Ces rewrite se cumulent cette fois (contrairement aux module d'accès, mais toujours selon le même parsing vu précédemment).</p>


<p>Ces rewrites sont cette fois relatifs, contrairement aux rewrite globaux. Ce qui veut dire qu'on les écrit par rapport à une racine qui est l'endroit où la règle est écrite.</p>


<h2>Réponse</h2>


<p>Cool maintenant on a notre requête nettoyée et on sait vers quelle fichier elle pointe.</p>


<p>Reste à la traiter.</p>


<h3>Filter</h3>


<p>On cherche tous les filtres (input et output) associés à cette url. Par exemple il y a mod_include, vous savez, pour les fichier .shtml qui contiennent des truc genre&nbsp;:</p>
<pre>
&lt;!--#echo var=&quot;DATE_LOCAL&quot; --&gt; 
</pre>


<p>Il y a aussi les filtres pour compresser (oui pas besoin de zipper en php, apache peut le faire tout seul).</p>


<p>Tout ceci avec <strong>SetInputFilter</strong> et <strong>SetOutputFilter</strong>.</p>


<h3>Handler</h3>


<p>Ensuite on cherche le handler associé à ce type de fichier. Il y a bien sur le handler fichier (incroyable), mais aussi le handler php, le handler perl (sisi), le handler cgi, mais aussi le handler proxy, et tous ceux que vous pourriez définir avec <strong>SetHandler </strong>.</p>


<p>On et hop lance le tout&nbsp;: inputfilter -&gt; handler -&gt; outputfilter.</p>



<h2>Conclusion</h2>


<p>En résumé c'est le bordel&nbsp;! Celui qui a écrit ça devait en avoir pris une sacrée dose et pas que de la farine. Probablement un pote de celui qui a fait X11 ...</p>


<p>Ne supposez jamais que ça marche comme vous le pensez, testez à chaque modification de votre conf.</p>


<p>Espérons que le prochain apache en développement tiendra ses promesses et nettoiera un peu la gestion de la configuration et surtout des droits d'accès. Sinon je prédis un avenir merveilleux pour toutes les alternatives soit disant "légères" comme lighthttpd ou nginx.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/hebergement-de-fichiers-avec-webdav' rel='bookmark' title='Permanent Link: Hébergement de fichiers avec WebDAV'>Hébergement de fichiers avec WebDAV</a></li>
<li><a href='http://linux-attitude.fr/post/filtrage-de-fichiers-sur-apache' rel='bookmark' title='Permanent Link: Filtrage de fichiers sur apache'>Filtrage de fichiers sur apache</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/traitement-dune-url-par-apache/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Test de bootloader à distance</title>
		<link>http://linux-attitude.fr/post/test-de-bootloader-a-distance?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=test-de-bootloader-a-distance</link>
		<comments>http://linux-attitude.fr/post/test-de-bootloader-a-distance#comments</comments>
		<pubDate>Fri, 18 Jun 2010 08:17:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=901</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: ssh qemu-system -hda /dev/sda Supposons que vous administriez une machine distante. Vous n'avez pas d'accès physique à cette machine. C'est ennuyant puisque vous venez de changer la configuration de votre bootloader. Comment faire pour rebooter tout en garantissant que ca va marcher&#160;? Hé bien j'ai la solution qui vous permettra de tester [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: ssh qemu-system -hda /dev/sda</p>


<p>Supposons que vous administriez une machine distante. Vous n'avez pas d'accès physique à cette machine.
C'est ennuyant puisque vous venez de changer la configuration de votre bootloader.</p>


<p>Comment faire pour rebooter tout en garantissant que ca va marcher&nbsp;?</p>


<p>Hé bien j'ai la solution qui vous permettra de tester ce boot avant de rebooter&nbsp;: <a href="http://wiki.qemu.org/Main_Page" hreflang="en">qemu</a>.</p>


<h3>Préparer les disques</h3>

<p>Il nous faut des disques en lecture seule pour éviter que le boot de la machine virtuelle n'écrive sur un disque en cours d'utilisation.
Donc pour chacun de vos disques physique&nbsp;:</p>
<pre>
$ cp -a /dev/sda /root/sda
$ chmod 440 /root/sda
</pre>


<p>Ainsi nous avons des disques garantis en lecture seule.</p>


<p><span id="more-901"></span></p>


<h3>Préparer son terminal</h3>

<p>Nous allons enregistrer ce qui se passe sur le terminal, lequel va tourner en ncurses, il est donc important pour la lisibilité des logs de le dimensionner à la même taille que l'écran de boot, c'est-à-dire 80x25.</p>


<p>Modifiez la taille de votre fenêtre de terminal jusqu'à ce que les variables $COLUMNS et $LINES vaillent respectivement 80 et 25.</p>


<h3>Préparer son bootloader</h3>

<p>Quel que soit votre bootloader configurez le de façon à ce qu'il ne lance pas de mode graphique, sinon vous ne pourrez pas stocker les logs de ce qui se passe.</p>


<h3>Choisit son qemu</h3>

<p>Installez qemu. Puis en fonction du matériel à émuler choisissez qemu-system-i386 ou qemu-system-x86_64 ou une autre architecture si vous travaillez sur d'autres machines.</p>


<h3>Lancer le tout</h3>

<p>Préparez un 2e terminal pour tuer qemu , ca sera plus simple que d'attendre qu'il se termine proprement (killall qemu pour les impatients).</p>

<pre>
$ sync
$ ssh -t localhost &quot;qemu-system-x86_64 -m 512 -curses -hda /root/sda&quot; | tee logs
</pre>


<p>Pourquoi sync&nbsp;? au cas où vous auriez fait des modification impactant le boot, on force l'écriture de celles-ci sur le disque.</p>


<p>Pourquoi ssh&nbsp;? Pour profiter de l'option -t qui crée un terminal virtuel même lorsqu'on travaille dans un pipe.</p>


<p>Pourquoi tee&nbsp;? Pour stocker les logs de ce qui se passe tout en gardant la main sur le clavier. Tout est tellement rapide qu'il peut y avoir des erreurs invisibles.</p>


<p>Pourquoi -m 512 (512Mo de ram): prenez une valeur inférieure à votre matériel mais malgré tout proche pour éviter les effets de bord.</p>


<p>Pensez à ajouter les disques dont vous pourriez avoir besoin selon le niveau de boot que vous voudriez tester.</p>


<h3>Lire les logs</h3>

<p>Bon, qemu s'est lancé, le boot a planté, mais vous n'avez pas eu le temps de voit l'erreur.</p>


<p>Commencez par tuer le qemu s'il vous gêne. Puis lisez les logs&nbsp;:</p>
<pre>
$ less -R logs
</pre>


<p>Pourquoi -R&nbsp;? parce que cette option vous permet de ne pas traduire les caractères spéciaux que qemu écrit à travers ncurses et vous permet de voir le contenu des logs tels qu'ils sont apparus à l'écran.</p>


<h3>Mode graphique</h3>

<p>Si vous ne voulez pas de logs ou que vous ne pouvez pas empêcher le mode graphique de se lancer, vous pouvez faire sans. Dans ce cas, à vous de vous connecter à la machine de façon à ce qu'un serveur X soit accessible (par exemple avec ssh -X).</p>


<p>La commande devient alors&nbsp;:</p>
<pre>
$ sync
$ qemu-system-x86_64 -m 512 -hda /root/sda
</pre>


<p><strong>PS</strong>&nbsp;: Et ça marche avec les outils de virtualisation comme xen.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/chargeeeez' rel='bookmark' title='Permanent Link: Chargeeeez !'>Chargeeeez !</a></li>
<li><a href='http://linux-attitude.fr/post/securite-du-processus-de-boot' rel='bookmark' title='Permanent Link: Sécurité du processus de boot'>Sécurité du processus de boot</a></li>
<li><a href='http://linux-attitude.fr/post/presentation-cours' rel='bookmark' title='Permanent Link: Présentation, cours'>Présentation, cours</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/test-de-bootloader-a-distance/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Uptime</title>
		<link>http://linux-attitude.fr/post/uptime?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=uptime</link>
		<comments>http://linux-attitude.fr/post/uptime#comments</comments>
		<pubDate>Fri, 20 Feb 2009 18:05:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/uptime</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: uptimed Linux est un système très stable. Tellement stable que certaines personnes font une gloire personnelle de la durée d'allumage de leurs machines. Pour pouvoir vous vanter vous aussi auprès de vos collègues et briller dans les soirées, voici le moyen de savoir quelles ont été les différentes durées d'uptime de votre [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: uptimed</p>


<p>Linux est un système très stable. Tellement stable que certaines personnes font une gloire personnelle de la durée d'allumage de leurs machines.</p>


<p>Pour pouvoir vous vanter vous aussi auprès de vos collègues et briller dans les soirées, voici le moyen de savoir quelles ont été les différentes durées d'uptime de votre machine.</p>


<p>Uptimed est un simple démon disponible dans le paquet éponyme. Il suffit de l'installer. Ce démon ne fait qu'une chose et il le fait bien, il enregistre la durée depuis laquelle le système est lancé dans un fichier de logs et rend ces informations disponibles aux utilisateurs. Il est même capable de vous envoyer un mail pour vous avertir de l'atteinte d'un record.</p>


<p>Les utilisateurs ont accès aux meilleurs temps avec la commande uprecords&nbsp;:</p>
<pre>
$ uprecords
</pre>


<p>Tout ceci est bien joli et il est vrai que c'est très gratifiant d'avoir réussi à maintenir un système en fonctionnement pendant plusieurs années, voir une dizaine d'années pour certains. Mais il ne faut pas oublier une chose, la sécurité. Un noyau qui n'est jamais rebooté, ce n'est pas seulement un noyau stable, mais c'est aussi un noyau vulnérable car non mis à jour.</p>


<p>Alors bien sur certains argueront qu'il existe maintenant <a href="http://www.ksplice.com/" hreflang="en">ksplice</a>. Mais je pense que son usage reste marginal. C'est pourquoi, n'oubliez pas de mettre une sonde sur vos serveur pour surveiller les machines qui n'ont pas été rebootées depuis longtemps, c'est en fait un signe de faiblesse.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/recuperation-de-donnees' rel='bookmark' title='Permanent Link: Récupération de données'>Récupération de données</a></li>
<li><a href='http://linux-attitude.fr/post/lenny-barr' rel='bookmark' title='Permanent Link: Lenny barr'>Lenny barr</a></li>
<li><a href='http://linux-attitude.fr/post/filtrage-avec-sshd' rel='bookmark' title='Permanent Link: Filtrage avec sshd'>Filtrage avec sshd</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/securite" title="Sécurité" rel="tag">Sécurité</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/uptime/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>LaVoMatic</title>
		<link>http://linux-attitude.fr/post/lavomatic?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lavomatic</link>
		<comments>http://linux-attitude.fr/post/lavomatic#comments</comments>
		<pubDate>Mon, 22 Sep 2008 20:04:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Disque]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/lavomatic</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: lvm raid Aujourd'hui la suite tant attendue d'une série sur lvm. Figurez-vous qu'il est possible de faire du raid avec LVM. Hé oui, vous avez déjà remarqué que vous pouviez mettre plusieurs disque dans un vg. Pour l'instant lvm se contente de les mettre bout à bout, comme le ferait un raid [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: lvm raid</p>


<p>Aujourd'hui la suite tant attendue d'une <a href="http://linux-attitude.fr/post/Les-Vauriens-M-admirent">série</a> sur lvm.</p>


<p>Figurez-vous qu'il est possible de faire du raid avec LVM. Hé oui, vous avez déjà remarqué que vous pouviez mettre plusieurs
disque dans un vg. Pour l'instant lvm se contente de les mettre bout à bout, comme le ferait un raid de type linear.</p>


<h3>Striping</h3>

<p>Le raid0 aussi appelé striping découpe un disque en petits morceaux et les alterne pour en faire un disque plus gros. Le but est d'avoir un disque plus gros, mais aussi d'augmenter les performances. En effet, dès qu'on va lire ou écrire un fichier un peu plus gros que ces morceaux, on va le faire sur 2 disques simultanément et donc augmenter la bande passante.</p>


<p>Lorsqu'on répartit les données linéairement sur le disque on ne gagne pas en performances, par contre en cas de crash d'un des deux disques, il y a moyen de récupérer presque la moitié des données, alors que dans le cas du striping, vous êtes sur de ne rien pouvoir récupérer.</p>


<p>Pour faire du striping avec lvm, rien de plus simple. Lors de la création de votre LV, il suffit de préciser le nombre de "stripes" qu'on désire&nbsp;:</p>
<pre>
# 2 etant le nombre de partition sur lesquels découper le volume
$ lvcreate -L 1G -i 2 lv0 vg0
</pre>


<p>Notez que si vous voulez forcer le striping sur certaines partitions, il est possible de donner en paramètre à lvcreate la liste des pv sur lesquels vous voulez qu'il soit.</p>


<p>Et pour vérifier que c'est bien ce que vous vouliez&nbsp;:</p>
<pre>
$ lvdisplay -m /dev/vg0/lv0
</pre>


<p><span id="more-263"></span></p>


<h3>Miroir</h3>

<p>Le raid1 aussi appelé "mirroring" recopie intégralement un disque sur un autre pour permettre une récupération sans soucis lorsqu'un des deux disques grille, au coût d'un disque supplémentaire.</p>


<p>Alors lvm permet aussi de faire ce genre de chose tout aussi simplement&nbsp;:</p>
<pre>
# 1 correspond au nombre de copies du volume
$ lvcreate -m 1 -L 1G lv0 vg0
</pre>


<p>Les miroirs lvm diffèrent du raid1 du fait que lvm demande un périphérique supplémentaire pour stocker les logs du miroir. C'est grâce à ces logs qu'il sait quel est l'endroit qui pose problème lorsqu'il y en a un. C'est donc un peu plus exigeant qu'un raid1.</p>


<p>Et pour vérifier que c'est bien ce que vous vouliez&nbsp;:</p>
<pre>
$ lvdisplay -m /dev/vg0/lv0
</pre>


<p><img src="http://linux-attitude.fr/public/Schemas/lvm_raid.png" alt="lvm_raid.png" style="display:block; margin:0 auto;" title="lvm_raid.png, sep 2008" /></p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/raid-10-ou-raid-01' rel='bookmark' title='Permanent Link: Raid 10 ou raid 0+1 ?'>Raid 10 ou raid 0+1 ?</a></li>
<li><a href='http://linux-attitude.fr/post/que-faire-et-ne-pas-faire-en-raid' rel='bookmark' title='Permanent Link: Que faire et ne pas faire en raid'>Que faire et ne pas faire en raid</a></li>
<li><a href='http://linux-attitude.fr/post/la-vraie-magie' rel='bookmark' title='Permanent Link: La Vraie Magie'>La Vraie Magie</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/disque" title="Disque" rel="tag">Disque</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/lavomatic/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Les Vauriens M&#8217;admirent</title>
		<link>http://linux-attitude.fr/post/les-vauriens-m-admirent?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=les-vauriens-m-admirent</link>
		<comments>http://linux-attitude.fr/post/les-vauriens-m-admirent#comments</comments>
		<pubDate>Fri, 19 Sep 2008 23:44:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Disque]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/les-vauriens-m-admirent</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: lvcreate -s Avançons encore un peu dans notre exploration de lvm. LVM permet beaucoup de choses, et entre autre la création de snapshots. Un snapshot c'est une prise de vue instantanée, qui dans le cas de lvm se fait au niveau du disque. Ce qui veut dire que le contenu du snapshot [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: lvcreate -s</p>


<p>Avançons encore un peu dans notre <a href="http://linux-attitude.fr/post/Le-Veritable-Moi">exploration de lvm</a>. LVM permet beaucoup de choses, et entre autre la création de snapshots. Un <strong>snapshot</strong> c'est une prise de vue instantanée, qui dans le cas de lvm se fait au niveau du disque. Ce qui veut dire que le contenu du snapshot peut ne pas être cohérent, par exemple si le système est en train d'écrire sur le disque en plein milieu du snapshot.</p>


<p>On peut utiliser les snapshot pour beaucoup de choses, par exemple, Apple l'utilise pour faire sa machine à remonter dans le temps, on peut l'utiliser pour faire des backup cohérents mais aussi pour faire des expérimentations avec des retours arrière rapide.</p>


<h3>Un snapshot</h3>

<p>Partons d'un lv existant avec un vg sur lequel il reste de la place (hé oui, il faudra bien stocker nos snapshots. Faisons un snapshot de notre lv&nbsp;:</p>
<pre>
$ lvcreate -L 50M -s -n snap /dev/vg0/original
</pre>

<p>Et voila, c'est tout, fin de l'article&nbsp;!</p>


<p>Bon, pas encore. Déjà, pourquoi donner une taille au snapshot&nbsp;? Tout simplement parce que celui-ci est intelligent, donc il ne va pas copier l'intégralité du lv original. Au contraire, il ne va stocker que les différences. C'est pourquoi il est instantané et commence avec une occupation taille nulle. Par contre, il faut lui allouer une taille dans le vg, donc 50Mo sera la quantité maximum de différence qu'il pourra stocker. Au delà de cette taille, le snapshot sera cassé et il ne pourra plus fonctionner correctement (les données ne sont plus valides, laissez tomber).</p>


<p><img src="http://linux-attitude.fr/public/Schemas/lvm_snapshot.png" alt="lvm_snapshot.png" style="display:block; margin:0 auto;" title="lvm_snapshot.png, sep 2008" /></p>


<p><span id="more-262"></span></p>


<p>C'est pourquoi il faut faire attention à bien dimensionner ses snapshots et les gérer correctement. Après quelque quelque temps, vous verrez l'occupation du lv augmenter avec la commande lvdisplay&nbsp;:</p>
<pre>
$ lvdisplay /dev/vg0/snap
...
  Allocated to snapshot  26,27% 
...
</pre>


<p>Votre snapshot est occupé à 26%, vous avez encore un peu de marge. C'est à vous de monitorer cette valeur et de prendre une décision, soit supprimer le snapshot (lvremove) ou d'augmenter la place allouée au snapshot (lvextend).</p>


<p>Une fois le snapshot cassé, vous avez ce genre d'information&nbsp;:</p>
<pre>
$ lvdisplay /dev/vg0/snap
...
  LV snapshot status     source of
                         /dev/vg0/original [INACTIVE]
...
</pre>


<h3>Backup</h3>

<p>Donc la technique pour faire un backup est simple, seul problème, si la machine a besoin du système de fichier pendant le snapshot. La meilleure méthode serait de faire "umount;lvcreate -s;mount", mais on ne peut pas. On va donc avoir de préférence un système de fichier qui résiste au crash (ext3 par exemple) et limiter la casse avec sync&nbsp;:</p>
<pre>
$ sync
# on espère qu'il y aura le moins d'écriture possible entre ces 2 commandes
$ lvcreate -s -L 500M -s -n backup /dev/vg0/original

# et maintenant on a une durée de 500Mo d'écriture pour faire tranquillement notre backup
$ mount /dev/vg0/backup /mnt
$ tar cfz /backups/today.tgz /mnt # c'est vous qui voyez
$ umount /mnt
$ lvremove /dev/vg0/backup
</pre>


<h3>Annulation</h3>

<p>Maintenant supposons que nous voulions nous amuser avec notre système de fichier (par exemple pour tester un passage à la prochaine debian sans pour autant avoir peur de tout perdre. Sur / ça risque d'être un peu difficile. Pour ne pas vous perturber nous allons simplifier en utilisant le / d'une machine virtuelle (ou d'un chroot).</p>

<pre>
$ sync
# choisissez une grande taille, voire la même taille que la partition originale pour éviter tout problème
$ lvcreate -L 5G -s -n backup /dev/vg0/root
# pas besoin de monter le backup
# on bidouille
$ vi /etc/apt/sources.list &amp;&amp; apt-get update &amp;&amp; apt-get dist-upgrade
</pre>


<p>Et là paf c'est cassé, réparons (avec un noyau &lt;= 2.6.27):</p>
<pre>
# on va le casser
$ umount /dev/vg0/root

# on récupère le backup dans un espace temporaire
$ dd if=/dev/vg0/bakup of=/srv/temp.dd

# et on le restaure sur le lv d'origine
$ lvremove /dev/vg0/bakup
$ dd if=/srv/temp.dd of=/dev/vg0/root

# fin
$ rm /srv/temp.dd
$ mount /dev/vg0/root
</pre>


<p>Le problème de cette technique est qu'elle nécessite un espace aussi gros que la partition disponible pour la restauration. Un petit gzip bien placé peut vous faire gagner en place, mais c'est pas top. Mais ... un patch est en cours pour permettre de faire tout ça en une seule commande et sans nécessiter d'espace intermédiaire. Il ne devrait malheureusement pas être disponible dans le noyau avant la version 2.6.28</p>
<pre>
# noyau &gt; 2.6.27
$ lvconvert -M bakcup --nameorigin
</pre>


<p>Lire l'<a href="http://kerneltrap.org/Linux/LVM_Snapshot_Merging" hreflang="en">annonce</a> pour plus de détails.</p>


<h3>Deux snapshots</h3>

<p>Remarquez que de même, il n'est pas possible de faire le snapshot d'un snapshot. C'est bien dommage car cela empêche de faire des tests sur un arbre de test et de revenir à l'endroit ou l'on veut. Ce genre de fonctionnalité n'est pas encore prévue. Il va donc falloir le faire soi-même, ou alors atendre la sortie de <a href="http://btrfs.wiki.kernel.org/index.php/Main_Page" hreflang="en">btrfs</a> qui devrait permettre ce genre de chose directement sur le système de fichiers..</p>


<p>Donc en attendant, les commandes qui permettent de faire ça en utilisant des copies complètes&nbsp;:</p>
<pre>
# on snapshotte l'original
$ lvcreate -L 50M -s -n v1x /dev/vg0/v0

# on copie le snapshot (vérifier la taille)
$ lvcreate -L 5G -n v1 vg0
$ dd if=/dev/vg0/v1x of=/dev/vg0/v1
$ lvremove /dev/vg0/v1x

# et on peut resnapshotter
$ vcreate -L 500M -s -n v2 /dev/vg0/v1
</pre>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/snapshot-de-snapshot' rel='bookmark' title='Permanent Link: Snapshot de snapshot'>Snapshot de snapshot</a></li>
<li><a href='http://linux-attitude.fr/post/lavomatic' rel='bookmark' title='Permanent Link: LaVoMatic'>LaVoMatic</a></li>
<li><a href='http://linux-attitude.fr/post/la-vraie-magie' rel='bookmark' title='Permanent Link: La Vraie Magie'>La Vraie Magie</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/disque" title="Disque" rel="tag">Disque</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/les-vauriens-m-admirent/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced (User agent is rejected)
Database Caching 25/71 queries in 0.258 seconds using apc
Object Caching 1801/1838 objects using apc
Content Delivery Network via N/A

Served from: linux-attitude.fr @ 2012-05-23 20:36:55 -->
