<?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; Sysadmin</title>
	<atom:link href="http://linux-attitude.fr/category/sysadmin/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Tue, 20 Jul 2010 19:54:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Présentation, cours</title>
		<link>http://linux-attitude.fr/post/presentation-cours</link>
		<comments>http://linux-attitude.fr/post/presentation-cours#comments</comments>
		<pubDate>Thu, 15 Jul 2010 21:07:02 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Commande]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=949</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: script, scriptreplay


Vous voulez préparer un cours ou une présentation à base de ligne de commande, espionner quelqu'un ...&#160;?


Ça vous ennuie de taper les commandes en direct&#160;?


J'ai la solution&#160;: script.


Script

Script est une commande qui crée un faux terminal virtuel et duplique tout ce qui s'y passe dans un fichier typescript.


Exemple&#160;:

$ [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: script, scriptreplay</p>


<p>Vous voulez préparer un cours ou une présentation à base de ligne de commande, espionner quelqu'un ...&nbsp;?</p>


<p>Ça vous ennuie de taper les commandes en direct&nbsp;?</p>


<p>J'ai la solution&nbsp;: script.</p>


<h3>Script</h3>

<p>Script est une commande qui crée un faux terminal virtuel et duplique tout ce qui s'y passe dans un fichier typescript.</p>


<p>Exemple&nbsp;:</p>
<pre>
$ script
# on est ici dans un terminal
$ echo coucou
&gt; coucou
$ exit
# on est sorti du terminal
$ cat typescript
&gt; $ echo coucou
&gt; coucou
&gt; $ exit
</pre>


<p>Dit comme ça, ça ne semble pas très utiles mais 2 choses vont tout changer. La première c'est que script fait un vrai terminal virtuel et pas seulement une redirection, ce qui veut dire que contrairement aux pipe (|) et autres redirections (&gt;), il est capable d'enregistrer ce qui va sur le terminal (Il est important de savoir faire la différence entre le terminal et stdout).</p>


<p>Exemple&nbsp;: la commande time. Cette commande écrit le temps d'exécution directement sur le terminal et pas dans la sortie standard, on ne peut donc pas la récupérer facilement, script le peut.
<span id="more-949"></span></p>


<h3>Scriptreplay</h3>

<p>La 2e commande qui va tout changer&nbsp;: scriptreplay.</p>


<p>Maintenant faites le même test mais enregistrez vos commande avec le paramètre -t (la sortie de -t va dans stderr, ça pourrait être mieux, mais c'est comme ça)&nbsp;:</p>
<pre>
$ script -t 2&gt; timer
</pre>


<p>Et cette fois utilisez scriptreplay pour lire ce qui a été généré&nbsp;:</p>
<pre>
$ scriptreplay timer typescript
</pre>


<p>Et là vous avez out ce qu'il faut pour faire une présentation qui dure exactement le même temps que celui qui vous a été nécessaire pour taper les commandes.</p>


<p>Si vous voulez adapter les timer vous pouvez, le script est éditable, mais bon à la main c'est un peu chiant. Par contre vous pouvez utiliser ctrl-s (pause) et ctrl-q (unpause) pour contrôler l'exécution du rendu.</p>


<p><strong>PS</strong>&nbsp;: pour ceux qui suivent, il est possible de remplacer mon ssh -t de l'article sur <a href="/post/test-de-bootloader-a-distance">le test de bootloader</a> par une commande script, ce qui est un peu plus propre.</p>
	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><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/presentation-cours/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Hébergement</title>
		<link>http://linux-attitude.fr/post/hebergement</link>
		<comments>http://linux-attitude.fr/post/hebergement#comments</comments>
		<pubDate>Thu, 08 Jul 2010 18:07:26 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Hébergement]]></category>
		<category><![CDATA[Matériel]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=945</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: housing, server hosting, vps, web hosting


Petite fiche technique pour ne pas se perdre dans le monde de l'hébergement&#160;:


Housing

C'est le même terme en français, on dit aussi colocation, il désigne en général la fourniture de l'espace dans une armoire, du réseau et de l'électricité et c'est tout.


Pourtant c'est en général [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: housing, server hosting, vps, web hosting</p>


<p>Petite fiche technique pour ne pas se perdre dans le monde de l'hébergement&nbsp;:</p>


<h4>Housing</h4>

<p>C'est le même terme en français, on dit aussi colocation, il désigne en général la fourniture de l'espace dans une armoire, du réseau et de l'électricité et c'est tout.</p>


<p>Pourtant c'est en général l'offre la plus chère car la plus lourde à gérer pour l'hébergeur. C'est plutôt destiné aux entreprises qui ont leur propre matériel et/ou dont l'activité sera de revendre l'accès à leur propre matériel.</p>


<h4>Server hosting</h4>

<p>Ou serveur dédié en français. Pratique pour une PME, ce concept permet à un sysadmin ou une petite boite d'avoir un ou des serveurs qu'elle gère entièrement, sans contraintes mais aussi sans avoir à gérer la redondance électrique ou la redondance du réseau.</p>


<p>On a en général une bien meilleure disponibilité et un bien meilleur débit qu'un serveur hébergé chez soi. Donc valable dès qu'on offre des services à l'extérieur. De plus on ne s'embête plus avec les matériel et ses pannes ou presque.</p>


<h4>VPS</h4>

<p>Ou serveur virtuel en français. C'est une machine virtuelle sur laquelle vous avez tout pouvoir (root) mais située sur une machine physique partagée avec d'autres clients.</p>


<p>Cela permet de faire des machines très peu chères en contrepartie d'une absence de garantie de performances.</p>


<p>A noter qu'OVH a sorti un produit intermédiaire entre le vps et le dédié nommé RPS. Il s'agit d'un dédié léger mais dont le disque est partagé sur le réseau.
<span id="more-945"></span></p>


<h4>Web hosting</h4>

<p>Hébergement mutualisé en français. Ce genre d'offre en général est la moins cher et la plus facile à gérer. Disponible immédiatement ou presque, vous avez plus ou moins d'espace disque, une base de données plus ou moins grosse et un virtualhost php avec parfois un nom de domaine.</p>


<p>A choisir lorsqu'on fait un "simple" site web.</p>


<h4>Cloud</h4>

<p>Petit nouveau, le cloud désigne en fait un groupe de machines dont on vous vend la puissance de calcul. Il existe autant de formes de cloud que de vendeurs de cloud, tous ont cette particularité de vendre des quantités variables.. Il y a ceux qui vous vendent des vm en grande quantité, il y a ceux qui vous vendent des serveurs d'application, il y a ceux qui vous vendent de la base de données ou du simple dépôt de fichier.</p>


<p>A choisir lorsqu'on a des applications scalable et qu'on prévoit un grand nombre de clients <em>potentiels</em>.</p>


<h4>Autres</h4>

<p>Les hébergeur offrent aussi sous forme de pack des noms de domaine, des services dns, des services de boite mail, d'envoi en masse de mail, en général pour pas trop cher, cherchez, vous trouverez.</p>


<p>Il existe aussi d'autres offres plus rares d'hébergement d'application ruby, python, java mais il faudra chercher pour trouver quelque chose d'intéressant.</p>


<p>Dans le genre exotique vous verrez aussi des offres de type shell où vous avez un shell sur une machine partagée entre plusieurs utilisateurs. Ce genre d'activité nécessite en général une certaine confiance et a plutôt tendance à fonctionner à travers des réseaux sociaux.</p>
	Tags:<a href="http://linux-attitude.fr/tag/hebergement" title="Hébergement" rel="tag">Hébergement</a>, <a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/hebergement/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Traitement d&#8217;une url par apache</title>
		<link>http://linux-attitude.fr/post/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;:     
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;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /><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>
	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>L&#8217;avenir du disque</title>
		<link>http://linux-attitude.fr/post/lavenir-du-disque</link>
		<comments>http://linux-attitude.fr/post/lavenir-du-disque#comments</comments>
		<pubDate>Mon, 21 Jun 2010 16:03:32 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Disque]]></category>
		<category><![CDATA[Matériel]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=878</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;:


Aujourd'hui les disques atteignent des limites qui n'avaient pas été prévues lorsqu'on les fabriquait comme des machines à laver (notez que le premier disque tournait déjà à 3600 tours par minute.


Les disques ont d'abord été adressés au format cylindre, tête, secteur (CHS), puis au format LBA. Les différentes limites ont [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;:</p>


<p>Aujourd'hui les disques atteignent des limites qui n'avaient pas été prévues lorsqu'on les fabriquait comme des machines à laver (notez que <a href="http://www-03.ibm.com/ibm/history/exhibits/storage/storage_350.html" hreflang="en">le premier</a> <a href="http://actumultimedia.unblog.fr/2008/05/04/naissance-du-premier-disque-dur/" hreflang="fr">disque</a> tournait déjà à 3600 tours par minute.</p>


<p>Les disques ont d'abord été adressés au format cylindre, tête, secteur (CHS), puis au format LBA. Les différentes limites ont évolué en fonctions de la taille du bus d'adressage.</p>


<h3>Limites</h3>

<p>Aujourd'hui on rencontre encore plusieurs limites. Tout d'abord au niveau logiciel, les partitions qui prévoyaient un adressage linéaire sur 32 bits des secteurs trouvent une limite à 2To (2^32 * 512).</p>


<p>Aujourd'hui au niveau du disque lui-même, les fabricants qui stockaient les informations de redondance et de structure du disque sur chaque secteur commencent à trouver cet espace très restreint.</p>


<p>Aujourd'hui les disques sont tellement gros que la lecture d'un disque entier est extrêmement longue, une erreur dans un fichier et la récupération du système de fichier devient une opération très lourde.</p>


<p>Aujourd'hui les disques sont tellement gros que la restauration d'un disque dans un raid prends un temps énorme, au point qu'il est possible d'avoir une seconde défaillance pendant ce temps.</p>


<p>Aujourd'hui les disques normaux sont tellement gros qu'on utilise le même disque pour plusieurs machines.</p>


<p>Aujourd'hui les disques sont tellement petits qu'on en utilise plusieurs par machine.</p>


<p>Avec tous ces problèmes, on voit beaucoup de choses évoluer.</p>


<h4>RAID 6+1</h4>

<p>Les disques étant de plus en plus lents et de plus en plus gros, on est déjà passé du raid5 au raid6 pour éviter les problèmes de lenteur lorsqu'un disque manquait, on <a href="http://queue.acm.org/detail.cfm?id=1670144" hreflang="en">envisage</a> d'ajouter un nouveau disque de redondance pour éviter le cas où un 2e disque grille pendant la restauration du premier.</p>


<h4>SAN</h4>

<p>Maintenant tout le monde a un NAS chez lui, mais les serveurs utilisent des SANs qui se partagent sur des interfaces réseau standard et plus seulement SCSI ou Fiber Channel. Le <a href="https://secure.wikimedia.org/wikipedia/en/wiki/ISCSI" hreflang="en">iSCSI</a>, le <a href="https://secure.wikimedia.org/wikipedia/en/wiki/ATA_over_Ethernet" hreflang="en">AoE</a> ainsi que d'autres protocoles permettent d'accéder à ces périphériques de façon transparente et sans matériel supplémentaire.</p>


<h4>GPT</h4>

<p>Les disques atteignent couramment une taille de 2To. Le format de partition actuel ne permet pas d'utiliser le disque au delà de cette taille. Il devient donc rapidement obligatoire de passer au format <a href="https://secure.wikimedia.org/wikipedia/en/wiki/GUID_Partition_Table" hreflang="en">GPT</a>. Ceci implique des modifications dans le bios et dans le système d'exploitation.</p>


<h4>Secteur 4k</h4>

<p>Les secteurs de 512 octets devenant petit, on commence à fabriquer des disques ayant des secteurs de 4ko. Cela permettra une plus grande capacité, de meilleures performances, mais implique aussi des changements au niveau du bios et de système d'exploitation (très lourd cette fois). <a href="http://www.anandtech.com/show/2888" hreflang="en">Quelques</a> <a href="http://www.zdnet.com/blog/storage/are-you-ready-for-4k-sector-drives/731" hreflang="en">références</a> et <a href="http://lwn.net/Articles/377895/" hreflang="en">solutions</a>.</p>


<h4>Filesystem</h4>

<p>Toutes ces fonctionnalités nouvelles peuvent êtres prises en compte au niveau du système de fichier pour permettre des fonctionnalités sympathiques. Le <a href="http://www.ext3cow.com/Welcome.html" hreflang="en">snapshot</a> fréquent voir continu, l'utilisation de plusieurs disques locaux voire distants, la vérification <a href="https://btrfs.wiki.kernel.org/index.php/Main_Page" hreflang="en">d'intégrité</a> en live, la récupération d'une perte sans downtime, la possibilité d'utiliser des disques d'une taille quasiment <a href="https://secure.wikimedia.org/wikipedia/en/wiki/ZFS" hreflang="en">infinie</a> pour notre époque, l'usage d'un <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Global_File_System" hreflang="en">même filesystem</a> par <a href="http://oss.oracle.com/projects/ocfs2/" hreflang="en">plusieurs machines</a> ...</p>


<p>Tout ceci n'était qu'un aperçu qui je l'espère vous donnera envie de connaître les nouvelles technologies à venir.</p>
	Tags:<a href="http://linux-attitude.fr/tag/disque" title="Disque" rel="tag">Disque</a>, <a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/lavenir-du-disque/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Test de bootloader à distance</title>
		<link>http://linux-attitude.fr/post/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;:     
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 ce [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /><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>
	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>Raid 10 ou raid 0+1 ?</title>
		<link>http://linux-attitude.fr/post/raid-10-ou-raid-01</link>
		<comments>http://linux-attitude.fr/post/raid-10-ou-raid-01#comments</comments>
		<pubDate>Thu, 20 May 2010 16:31:50 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Disque]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[Savoir-faire]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=886</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: Raid 10, raid 0+1, raid 5, raid 6


Lorsqu'on parle de redondance, de haute disponibilité et de disque, on parle de Raid. J'en ai déjà parlé


Voici un petit aperçu des différents types de RAID, le but est ici de trouver les qualités de chacun. Un tableau final récapitule les avantage [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: Raid 10, raid 0+1, raid 5, raid 6</p>


<p>Lorsqu'on parle de redondance, de haute disponibilité et de disque, on parle de Raid. J'en ai <a href="/post/que-faire-et-ne-pas-faire-en-raid">déjà parlé</a></p>


<p>Voici un petit aperçu des différents types de RAID, le but est ici de trouver les qualités de chacun. Un tableau final récapitule les avantage et les inconvénients qu'il y a à choisir un type de raid donné.</p>


<h3>Jbod</h3>

<p>Just a bunch of disk, ce n'est pas un raid, le choix de ceux qui veulent pouvoir ajouter des disques bout à bout sans gain de performance.</p>


<p>Contrairement au raid 0 il a un avantage, la perte d'un disque n'empêche pas la récupération des données sur les disques restants par un outil de récupération tel que photorec. En effet, comme les disques sont simplement mis bouts à bout, la plupart des fichiers tiennent intégralement sur un seul des disques. Il est donc possible d'en récupérer le contenu après un crash.</p>


<p>Le jbod se fait avec du LVM sans striping ou avec le driver linear de md.</p>


<h3>Raid 0</h3>

<p>Le choix de ceux qui veulent des performances.</p>


<p>Chaque disque est découpé en bande (stripe) et les bandes sont entrelacées pour donner le disque final. Ce qui donne un gain de performance appréciable puisque les disque peuvent être lus simultanément, même pendant la lecture d'un gros fichier. Et ils peuvent être écrits simultanément pendant les écritures.</p>


<p>Le raid 0 peut être matériel, logiciel avec le driver md de linux ou logiciel avec LVM (avec striping)</p>


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


<h3>Raid 1</h3>

<p>Le choix de ceux qui ne veulent pas de pertes.</p>


<p>Tous les disques sont des copies intégrales. L'avantage le plus important est que lors de la perte d'un disque tout fonctionne comme si de rien n'était. On peut donc remplacer ce disque (ou pas :-).</p>


<p>Un autre avantage existe lors des lectures non séquentielles (lors de la lecture de 2 fichiers par exemple), dans ce cas il est possible d'utiliser un disque pour chaque lecture et donc d'accélérer ce type de lecture. Par contre la lecture d'un seul gros fichier n'est pas accélérée (sous linux).</p>


<p>Il n'y a en revanche aucun impact sur l'écriture, c'est le disque le plus lent qui détermine la vitesse d'écriture (la vitesse devrait être à peu près identique pour chacun).</p>


<p>Notez qu'on peut faire du raid 1 avec plus de 2 disques.</p>


<p>Le Raid 1 peut être matériel, logiciel avec le driver md ou logicielle avec LVM (support du miroring), enfin il est possible de faire du raid1 réseau avec drbd.</p>


<h3>Raid 5</h3>

<p>Le choix des économes.</p>


<p>En raid 5 chaque disque est découpé en bande, pour chaque groupe de bandes situées au même endroit des disques, une des bandes est choisie pour contenir des octets de redondance (la différence avec le 4 c'est le choix de la bande). Ainsi ce type de raid peut survivre au crash d'un des disques (la redondance permet de reconstruire la bande manquante), mais pas de plusieurs.</p>


<p>L'avantage du raid 5 est que lorsqu'on a de nombreux disques on économise des disques de redondance en n'en achetant qu'un pour la redondance et les autres pour les données.</p>


<p>Mais le raid 5 est assez limité en performances. La lecture se passe comme pour le raid 1. Par contre l'écriture nécessite la lecture de chacune des bandes d'un groupe pour écrire la bande de données, puis calculer et écrire la bande de redondance. C'est donc très lent, à éviter pour les bases de données actives.</p>


<p>D'autre part, lors du crash d'un disque, toutes bandes des disques doivent être lues pour reconstituer une bande manquante. Ce qui implique des baisses de performances énormes, auxquelles il faut ajouter la baisse de performances due à la reconstruction du disque qu'on va remettre. Comme les disque tournent à fond, il n'est pas rare de voir un autre disque exploser en vol à ce moment là -&gt; fin des données.</p>


<p>Le raid 5 peut être matériel ou logiciel avec le driver md de linux.</p>


<h3>Raid 6</h3>

<p>Le choix des très gros disques.</p>


<p>Le raid 6 fonctionne de la même façon que le raid 5 mais ajoute un deuxième disque de redondance. Ce ne sont pas simplement les données de redondance qui sont dupliquée, mais le calcul qui est différent, toutefois le concept est identique.</p>


<p>Le raid 6 soufre des mêmes inconvénients que le raid 5, il utilise même un disque de plus donc est un peu plus cher, de plus cela provoque une écriture supplémentaire pour chaque groupe de bandes.</p>


<p>Mais le raid 6 résiste au crash de 2 disques, ce qui est intéressant lorsque les disques sont assez gros et que la reconstruction du raid comment à être assez longue (et donc le risque de perte plus gros).</p>


<p>Le raid 6 peut être matériel ou logiciel avec le driver md de linux.</p>


<h3>Raid 10</h3>

<p>Le choix des riches.</p>


<p>Le raid 10 consiste à accumuler plusieurs raid 1 avec du raid 0 pour en augmenter la taille et les performances.</p>


<p>Le raid 10 offre les avantages simultanés du raid 1 et du raid 0. La perte d'un disque n'empêche pas le raid de tourner et l'utilisation de plusieurs disques en striping permet d'augmenter les performances de lectures.</p>


<p>Le seul inconvénient, c'est qu'il coûte deux fois le prix du raid 0.</p>


<p>Il peut se faire en matériel ou logiciel, md ou lvm.</p>


<h3>Raid 0+1</h3>

<p>Le mauvais choix.</p>


<p>Le raid 0+1 consiste à mettre 2 raid 0 en parallèle pour les redonder avec du raid 1. On pourrait croire que c'est la même chose que du raid 10, mais non. Et même si certains veulent vous faire croire que les performances sont meilleures, il n'en est rien.</p>


<p>Mais surtout imaginez un instant la perte d'un disque. Dans ce cas un des raid 0 sous-jacent est perdu. Il faut donc le recréer avec un nouveau disque (ce qui est à peu près instantané puisqu'on le laisse vide), puis reconstruire le raid 1 situé au dessus. Et cette deuxième partie va être longue puisqu'elle doit être faite sur la taille totale du raid 0, contrairement au raid 10 qui ne l'aurait fait que sur la taille totale du disque perdu.</p>


<h3>Petit récapitulatif</h3>

<table>
<tr>
<th>RAID</th>
<th>jbod</th>
<th>0</th>
<th>1</th>
<th>4</th>
</tr>
<tr>
<th>Quand le choisir</th>
<td>Pas d'argent, pertes partielles acceptables</td>
<td>Besoin de performances mais pertes totales acceptées</td>
<td>Pour éviter les pertes</td>
<td>Jamais</td>
</tr>
<tr>
<th>Inconvénients</th>
<td><ul><li>Pas de redondance</li><li>Pas de gain de performances</li></ul></td>
<td><ul><li>Pas de redondance</li></ul></td>
<td><ul><li>Peu de gains de performances</li><li>La taille ne peut dépasser celle du plus petit disque</li></ul></td>
<td><ul><li>Moins bon que raid 5 dans tous les domaines</li></ul></td>
</tr>
<tr>
<th>Avantages</th>
<td><ul><li>Possibilité de récupérer une parties de données après crash</li><li>Possibilité d'étendre un disque</li></ul></td>
<td><ul><li>Performances en lecture accrues</li></ul></td>
<td><ul><li>Résistance à la perte de N-1 disque</li><li>Légère amélioration des performances en lecture.</li></ul></td>
<td><ul><li>Ceux du raid 5</li></ul></td>
</tr>
</table>


<table>
<tr>
<th>RAID</th>
<th>5</th>
<th>6</th>
<th>10</th>
<th>0+1</th>
</tr>
<tr>
<th>Quand le choisir</th>
<td>Pour le prix</td>
<td>Pour les gros raid</td>
<td>Pour la sécurité et les performances</td>
<td>Jamais</td>
</tr>
<tr>
<th>Inconvénients</th>
<td><ul><li>Performances faibles en écriture</li><li>Performances en lecture faibles après un crash</li></ul></td>
<td><ul><li>Performances faibles en écriture</li><li>Performances en lecture faibles après un crash</li></ul></td>
<td><ul><li>Cher</li></ul></td>
<td><ul><li>Cher</li><li>reconstruction très longue</li></ul></td>
</tr>
<tr>
<th>Avantages</th>
<td><ul><li>Résistance à la perte d'un disque</li><li>Coût moindre par rapport aux autres raid</li></ul></td>
<td><ul><li>Résistance à la perte de 2 disques</li><li>Coût moindre par rapport aux autres raid sauf le 5</li></ul></td>
<td><ul><li>Résistance à la perte d'un certain nombre de disque</li><li>Performances en lecture accrues</li></ul></td>
<td><ul><li>Ceux du raid 10</li></ul></td>
</tr>
</table>

	Tags:<a href="http://linux-attitude.fr/tag/disque" title="Disque" rel="tag">Disque</a>, <a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/raid-10-ou-raid-01/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Postscript est un langage &#8230; de script</title>
		<link>http://linux-attitude.fr/post/postscript-est-un-langage-de-script</link>
		<comments>http://linux-attitude.fr/post/postscript-est-un-langage-de-script#comments</comments>
		<pubDate>Wed, 28 Apr 2010 17:25:46 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Commande]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=411</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;:


Savez-vous vraiment utiliser postscript ?
Savez-vous ce qu'est postscript&#160;?


Postscript est avant tout un langage, relativement complet. Ce langage se destine à l'affichage et à l'impression. Il contient donc de nombreuses primitives pour l'affichage, principalement vectoriel. Mais rien ne vous force à l'utiliser pour ça. Il existe bien des gens qui utilisent [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;:</p>


<p>Savez-vous vraiment utiliser postscript ?<br />
Savez-vous ce qu'est postscript&nbsp;?</p>


<p>Postscript est avant tout un langage, relativement complet. Ce langage se destine à l'affichage et à l'impression. Il contient donc de nombreuses primitives pour l'affichage, principalement vectoriel. Mais rien ne vous force à l'utiliser pour ça. Il existe bien des gens qui utilisent php pour faire des scripts d'administration ...</p>


<h3>Interprétation</h3>


<p>Le postscript s'interprète, les imprimantes sont donc des interpréteurs postscript, ce qui veut dire qu'on peut les programmer comme on veut. Il existe bien des gens qui programment leur carte graphique pour faire du calcul parallèle ...</p>


<p>Apprenons donc à interpréter un fichier nommé toto.ps&nbsp;:</p>
<pre>
# technique simple pour en faire un pdf
$ ps2pdf toto.ps

# ancienne technique chamane qui passe par l'imprimante
$ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr toto.ps
</pre>


<p>Vous pouvez aussi passer par l'interface de cups à la place de lpr.</p>


<p>Notez bien qu'ici l'interpréteur est ghostscript (gs) et qu'on a du spécifier le type d'imprimante, type qu'on n'a pas choisi au hasard. Pour avoir la liste des imprimantes supportées, tapez&nbsp;:</p>
<pre>
$ gs -help
</pre>

<p>Et lisez bien la liste vous verrez des bizarreries comme jpeg, png256, bmpgray ... Ce ne sont pas vraiment des imprimantes, donc vous devinez bien qu'il est donc possible de convertir très facilement un fichier postscript en image jpeg (enfin la première page en tout cas)&nbsp;:</p>
<pre>
$ gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=jpeg -sOutputFile=fichier.jpg toto.ps
</pre>


<p>Pour avoir les autres pages et la résolution de l'image, voici la commande&nbsp;:</p>
<pre>
# scriptez le si ca vous sert
$ gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=jpeg -r72 -sOutputFile=fichier-%d.jpg toto.ps
</pre>


<p>Un peu plus de détail sur les paramètres et les sorties possibles ici&nbsp;: <a href="http://pages.cs.wisc.edu/~ghost/doc/AFPL/8.00/Devices.htm" title="http://pages.cs.wisc.edu/~ghost/doc/AFPL/8.00/Devices.htm">http://pages.cs.wisc.edu/~ghost/doc...</a> ou dans le manuel.</p>


<p>Voila, on n'a pas trop parlé de script ici, mais il en sera question dans le prochain article. D'ailleurs si vous voulez développer dès à présent, il suffit de lancer gs sans -dBATCH et sans fichier postscript pour obtenir une console interactive.</p>


<p><strong>PS</strong>&nbsp;: Notez au passage qui toutes les commandes gs fonctionnent aussi avec du PDF car ce dernier est un autre langage compris par gs.</p>
	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><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/postscript-est-un-langage-de-script/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using apc (user agent is rejected)
Database Caching 7/31 queries in 0.040 seconds using apc

Served from: linux-attitude.fr @ 2010-07-31 04:05:28 -->