<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://www.linux-france.org/~platu/weblog/"?>
<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Ph1l's (sys|net)admin [lfo] blog</title>
<atom:link href="http://www.linux-france.org/~platu/weblog/rss.xml" rel="self" type="application/rss+xml" />
<link>http://www.linux-france.org/~platu/weblog</link>
<description>Les petits et grands (bon)heur(t)s de l'exploitation et de l'enseignement</description>
<dc:language>fr-fr</dc:language>
<dc:creator>Philippe Latu</dc:creator>
<dc:date>2010-02-18T00:11:06+01:00</dc:date>
<admin:generatorAgent rdf:resource="http://nanoblogger.sourceforge.net" />
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2010/02/index.html#e2010-02-16T21_40_30.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2010/02/index.html#e2010-02-16T21_40_30.txt</guid>
<title>Networking Academy CCNA Security Course 1.0</title>
<dc:date>2010-02-16T21:40:30+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Enseignement, Networking Academy</dc:subject>
<description>
<![CDATA[<div xml:lang="fr" class="article" title=
"Networking Academy CCNA Security Course 1.0" lang="fr">
<div class="titlepage">
<div>
<div>
</div>
<div>
<div class="abstract" title="Résumé">
<p><span class="inlinemediaobject"><img src="http://www.linux-france.org/~platu/weblog/images/thumb53.png" align="right"
width="240" /></span> C'est fait&nbsp;! Je suis désormais «apte» à dispenser
le cours <em class="wordasword">CCNA security</em> après avoir suivi une
formation d'une semaine et passé les tests avec succès. C'était mon 4ème
séjour à l'université de Birmingham&nbsp;; un des 3 centres qui assurent cette
formation pour l'Europe. Les cours proposés dans le cadre <em class=
"citetitle">Cisco Networking Academy</em> sont, pour tout enseignant
intervenant dans le domaine, une bonne occasion de confronter sa pratique
pédagogique avec ce qui est proposé outre atlantique. Voici quelques éléments
de réaction «à chaud» sur ce cours. Si j'ai trouvé l'ensemble très
intéressant, il y a comme toujours des points négatifs et des points positifs.
Comme il faut bien choisir, ce billet débute par ce que j'ai le moins
apprécié.</p>
</div>
</div>
</div>
</div>
<div class="section" title="SDM FAILS">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="ccnasecinst.sdmfail" name=
"ccnasecinst.sdmfail"></a>SDM FAILS</h2>
</div>
</div>
</div>
<p>Ce n'est pas un scoop&nbsp;! Cette session de formation a été une occasion
supplémentaire de constater que l'outil <em class="wordasword">Security Device
Manager</em> (<acronym class="acronym">SDM</acronym>) est beaucoup trop
instable pour que l'on puisse construire des travaux pratiques ou des
évaluations en s'appuyant exclusivement dessus.</p>
<p>J'avais déjà publié un <a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/archives/2009/06/index.html#e2009-06-19T17_51_50.txt"
target="_top">billet consacré à l'installation de <acronym class=
"acronym">SDM</acronym></a> dans lequel je relatais toutes les difficultés
rencontrées.</p>
<p>Toute accusation de parti pris «pro» logiciel libre tient encore moins la
route que dans le précédent billet. Dans les universités britanniques que j'ai
fréquentées, on connaît tout juste le mot «Linux». Le découpage métier entre
gestion du parc des postes informatiques et enseignements sur les réseaux est
tout à fait frappant. Le formateur ne se soucie absolument pas du système
installé sur les PCs.</p>
<p>Dans les salles de travaux pratiques réseau du <em class="wordasword">tic
Learning Centre</em> de l'université de <a class="ulink" href=
"http://www.bcu.ac.uk/" target="_top">Birmingham</a>, chaque poste de travail
dispose de deux unités centrales raccordées au même jeu écran/clavier via un
micro <acronym class="acronym">KVM</acronym>. Une <acronym class=
"acronym">UC</acronym> est utilisable pour accéder au Web&nbsp;;
principalement au site <a class="ulink" href="http://cisco.netacad.net"
target="_top">netacad</a> pour les tests en ligne. L'autre <acronym class=
"acronym">UC</acronym> est réservée aux travaux pratiques. Un compte
utilisateur générique permet de reconfigurer les interfaces réseau à volonté
et d'installer les logiciels requis par les supports de travaux pratiques.
Parmi ces logiciels, on retrouve le fameux <em class="wordasword">Security
Device Manager</em>.</p>
<p>Le choix effectué ici est donc d'utiliser <acronym class=
"acronym">SDM</acronym> sur le système Windoze XP du poste dédié. Ce choix est
motivé par un souci d'économie dans l'utilisation de la mémoire flash des
routeurs. Dans le cadre du cours <em class="wordasword">CCNA Security</em>,
plusieurs travaux pratiques entraînent une consommation accrue de l'espace
disponible sur les cartes <em class="wordasword">CompactFlash</em>.</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>La partie <em class="wordasword">Configure IOS Resilience</em> du support
<em class="citetitle">Chapter 2 Lab A: Securing the Router for Administrative
Access</em> utilise les commandes <span class=
"command"><strong>secure&nbsp;boot-image</strong></span> et <span class=
"command"><strong>secure&nbsp;boot-config</strong></span> qui effectuent des
copies de sauvegarde de l'image du système d'exploitation et de la
configuration du routeur sur la carte <em class=
"wordasword">CompactFlash</em>.</p>
<p>De plus, les versions d'<acronym class="acronym">IOS</acronym> requises
pour ce cours appartiennent au «train T». Elles occupent donc un espace
beaucoup plus conséquent que les versions habituellement utilisées pour le
cours <acronym class="acronym">CCNA</acronym>.</p>
</li>
<li class="listitem">
<p>Le support <em class="citetitle">Chapter 5 Lab A, Configuring an Intrusion
Prevention System (IPS) Using the CLI and SDM</em> implique le chargement du
contenu du paquet des signatures <code class=
"systemitem">IOS-Sxxx-CLI.pkg</code> aussi sur la carte <em class=
"wordasword">CompactFlash</em>.</p>
</li>
</ul>
</div>
<div class="warning" title="Avertissement" style=
"margin-left: 0; margin-right: 3em;">
<table border="0" summary="Warning">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt=
"[Avertissement]" src="images/warning.png" /></td>
<th align="left">Avertissement</th>
</tr>
<tr>
<td align="left" valign="top">
<p>Lors du transfert du paquet des signatures <acronym class=
"acronym">IPS</acronym>, il faut impérativement arrêter <acronym class=
"acronym">SDM</acronym>. Sinon, le système du routeur se fige et la seule
solution est le redémarrage. Lors d'un test pratique (<em class=
"wordasword">skill test</em>), il n'est pas rare que l'on oublie de
sauvegarder la configuration. Ce genre de plantage peut donc être
catastrophique lors d'une évaluation.</p>
</td>
</tr>
</table>
</div>
<p>En plus du plantage système complet rencontré avec l'utilisation conjointe
des signatures <acronym class="acronym">IPS</acronym> et de <acronym class=
"acronym">SDM</acronym>, la partie 5 du support de travaux pratiques du
chapitre 9&nbsp;: <em class="citetitle">Use SDM to configure Easy VPN
Server</em> n'a donné aucun résultat dans la mesure le menu de configuration
n'est jamais apparu&nbsp;!</p>
<p>Voilà ce qui justifie le titre de cette section&nbsp;: l'utilisation du
<em class="wordasword">Security Device Manager</em> a été un fiasco.</p>
<p>Côté université Paul Sabatier, j'avais choisi d'installer <acronym class=
"acronym">SDM</acronym> sur les cartes <em class=
"wordasword">CompactFlash</em> des routeurs 1841 du <em class=
"wordasword">bundle</em> CCNA et de charger le système d'exploitation via TFTP
lors de l'initialisation. Les travaux pratiques du module <em class=
"citetitle">Accessing the Wan</em> de l'été dernier ont pu fonctionner
normalement sur cette base. J'espère donc pouvoir continuer sur cette base
lors de la prochaine session compte tenu de l'échec de l'utilisation de
<acronym class="acronym">SDM</acronym> à partir d'une installation sur
Windoze. Il va cependant falloir passer par un remplacement des cartes
<em class="wordasword">CompactFlash</em>.</p>
<p>Le coût des cartes <em class="wordasword">CompactFlash</em> vendues chez
<span class="trademark">Cisco</span>™ étant exorbitant, il faut utiliser des
cartes de fournisseurs tiers offrant des capacités beaucoup plus importantes
pour assurer correctement les travaux pratiques de ce cours.</p>
<p>Heureusement, on trouve des références telles que celle proposée par
l'excellent <a class="ulink" href=
"http://packetlife.net/blog/2009/nov/2/generic-compact-flash-cards-and-cisco/"
target="_top">PacketLife.net</a>.</p>
</div>
<div class="section" title="What Else ?!">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="ccnasecinst.whatelse" name=
"ccnasecinst.whatelse"></a>What Else ?!</h2>
</div>
</div>
</div>
<p>Après avoir dit tout le mal possible sur <acronym class=
"acronym">SDM</acronym>, que peut-on proposer comme alternative
constructive&nbsp;? Eh bien, pas grand chose.</p>
<p>La difficulté pédagogique est de taille. Comment construire une progression
qui puisse permettre de <span class="emphasis"><em>se lancer</em></span> dans
l'utilisation des technologies de filtrage réseau&nbsp;? Bien sûr, le plan du
cours est tout tracé&nbsp;: filtrage de paquets, suivi de communication
(<em class="wordasword">stateful</em>), inspection applicative et enfin
filtrage par politique de sécurité. C'est la partie la plus facile et
l'enseignant, aussi brillant soit-il, a tout loisir de disserter sur ces
questions jusqu'au moment fatidique où les travaux pratiques arrivent. Lorsque
l'on interroge les étudiants novices à l'oral ou que l'on demande de mettre en
place une démarche de validation des règles de filtrage étudiées, on prend la
mesure du décalage entre le discours et le niveau de compréhension de
l'auditoire.</p>
<p>Chaque année, le support que je propose sur l'<a class="ulink" href=
"http://www.linux-france.org/prj/inetdoc/cours/interco.netfilter/" target=
"_top">Introduction au filtrage réseau</a> sur les systèmes GNU/Linux est
celui qui pose le plus de problèmes aux étudiants. Tous les autres supports de
la série «passent» beaucoup plus facilement. En évaluation, la partie sur le
filtrage réseau est rarement traitée.</p>
<p>Pourtant, la conception du couple netfilter/iptables est très bien faite,
très claire et plus simple à aborder que les fonctions de filtrage de
l'<acronym class="acronym">IOS</acronym> dans lesquelles on retrouve beaucoup
plus de jargon et plus d'étapes historiques.</p>
<p>Dans les premières versions du curriculum <acronym class=
"acronym">CCNA</acronym>, le filtrage de paquets était vu de façon complète et
l'accent était mis sur la distinction entre masque réseau et <em class=
"wordasword">wildcard</em> dans les règles de filtrage. L'exercice
emblématique consistant à autoriser l'accès Internet à une moitié seulement
des adresses du réseau routé. On retrouvait ainsi une mécanique de décodage
d'adresses.</p>
<p>Quand il a fallu intégrer le suivi de communication (ou <em class=
"wordasword">stateful inspection</em>), la question a été repoussée au cours
<em class="citetitle">CCNA Security Course</em>. La commande <span class=
"command"><strong>auto secure</strong></span> sert d'échappatoire pour mettre
en place un suivi de communication entre deux interfaces&nbsp;; l'une exposée
au réseau public l'autre au réseau interne d'une entreprise. Le support
demande ensuite de modifier le jeu de protocoles soumis au suivi de
communication et d'examiner les entrées de la table de suivi. Cette démarche
convient très bien en phase de découverte de ces fonctions. La question qui
vient ensuite est de savoir jusqu'où aller dans la prise en main de l'outil à
un niveau donné. Pour qui a déjà une expérience d'exploitation sur une
infrastructure réelle, s'arrêter là peut s'avérer très frustrant et la
tentation de vouloir montrer des choses plus intéressantes est très grande. Le
choix qui a été fait au niveau du <em class="citetitle">CCNA Security
Course</em> est cohérent si l'on s'en tient à la «prise de contact» avec cette
technique de filtrage et que l'on craint de perdre trop rapidement l'attention
de l'auditoire.</p>
<p>C'est avec le filtrage par politique de sécurité (ou <em class=
"wordasword">Zone Based Firewall</em>) que les choses se corsent vraiment.
Comment faire pour introduire un «mélange» de classification venant des
fonctions de qualité de service (<acronym class="acronym">QoS</acronym>) et de
règles de filtrage&nbsp;? Le choix qui a été fait dans le <em class=
"citetitle">CCNA Security Course</em> s'appuie sur quelques clicks dans
<acronym class="acronym">SDM</acronym>. Cette manipulation pourrait
s'apparenter au recours à la commande <span class="command"><strong>auto
secure</strong></span> si l'on demandait d'intervenir sur la configuration
ensuite. Le problème ici, c'est que le jeu de commandes généré par les
quelques clicks est tellement complexe qu'il n'est plus question d'intervenir
sur la configuration autrement qu'à travers l'interface graphique. La syntaxe
des commandes de validation du fonctionnement du filtrage impose que l'on
comprenne l'enchaînement entre la classification et le filtrage réseau
proprement dit. Là, je crois pouvoir dire que l'on «perd le contact» avec les
étudiants encore plus rapidement.</p>
<p>Ceci-dit, je n'ai pas de méthode alternative de présentation simple
introduisant ces fonctions. Le chantier est ouvert&nbsp;!</p>
</div>
<div class="section" title="Keep the link">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="ccnasecinst.keeplink" name=
"ccnasecinst.keeplink"></a>Keep the link</h2>
</div>
</div>
</div>
<p>Le traitement de la sécurité au niveau d'un réseau local est très bon dans
ce cours. On y retrouve toutes les fonctions caractéristiques d'un
commutateur. Les travaux pratiques reprennent la démarche proposée dans le
guide de la <acronym class="acronym">NSA</acronym>&nbsp;: <a class="ulink"
href=
"http://www.nsa.gov/ia/guidance/security_configuration_guides/switches.shtml"
target="_top">Cisco IOS Switch Security Configuration Guide</a>.</p>
<p>Cette fois-ci, aucun «clickodrome» ne vient perturber l'attention et les
démarches de validation sont bien décrites.</p>
<p>J'ai particulièrement apprécié l'utilisation de la fonction <em class=
"wordasword">Switched Port Analyzer</em> (<acronym class=
"acronym">SPAN</acronym>) combinée avec <a class="ulink" href=
"http://www.wireshark.org/" target="_top">WireShark</a> pour analyser de façon
déportée le trafic entre deux hôtes. C'est une technique très
pédagogique&nbsp;!</p>
</div>
<div class="section" title="Alice doesn't trust Bob">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="ccnasecinst.alicebob" name=
"ccnasecinst.alicebob"></a>Alice doesn't trust Bob</h2>
</div>
</div>
</div>
<p>Le chapitre sur les techniques de cryptographie est très équilibré et
convient parfaitement pour une première approche sur la question. Les
algorithmes y sont présentés sous forme synthétique et contextuelle.
L'exercice d'équilibre entre niveau scientifique et exploitation est une fois
de plus délicat à négocier. Dans le cas présent c'est réussi. On dépasse le
simple catalogue d'algorithme et on dispose d'un premier niveau de choix
suivant les contextes d'exploitation. Ici, l'objectif principal est d'aboutir
à une synthèse comparative entre IPsec et SSL dans le but d'implémenter des
solutions VPNs de différentes catégories.</p>
</div>
<div class="section" title="Pour conclure">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="ccnasecinst.conclusion" name=
"ccnasecinst.conclusion"></a>Pour conclure</h2>
</div>
</div>
</div>
<p>Voilà pour l'analyse succincte du cours <a class="ulink" href=
"http://www.cisco.com/web/learning/netacad/course_catalog/CCNAsecurity.html"
target="_top">CCNA Security</a>. Comme c'est une formation que je dois assurer
au début du mois de Juillet prochain, j'ai encore du pain sur la planche. Je
dois notamment préparer des images de machines virtuelles assurant les
services Tacacs+ et Radius. J'aurai donc l'occasion de revenir sur ce sujet
dans d'autres billets.</p>
<p>Ce billet est disponible en version imprimable au format PDF&nbsp;:
<a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/telechargement/ccnasecinst.pdf"
target="_top">ccnasecinst.pdf</a>.</p>
<p><code class="literal">$Id: ccnasecinst.xml 1470 2010-02-16 20:23:44Z latu
$</code></p>
</div>
</div>
</body>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/11/index.html#e2009-11-04T23_16_22.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/11/index.html#e2009-11-04T23_16_22.txt</guid>
<title>Pourquoi tant de tftp://255.255.255.255&#160;?</title>
<dc:date>2009-11-04T23:16:22+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Networking Academy, Debian, Cisco</dc:subject>
<description>
<![CDATA[<div xml:lang="fr" class="article" title=
"Pourquoi tant de tftp://255.255.255.255&nbsp;?" lang="fr">
<div class="titlepage">
<div>
<div>
</div>
<div>
<div class="abstract" title="Résumé">
<p><span class="inlinemediaobject"><img src="http://www.linux-france.org/~platu/weblog/images/thumb23.png" align="right"
width="120" /></span> Les points d'accès Wifi 1232ag livrés avec le <em class=
"wordasword">bundle</em> CCNP sont configurés en mode <em class=
"wordasword">Lightweight Access Point</em>. Or, les étudiants du M2 STRI ont
besoin d'un point d'accès autonome. En voulant «basculer» le système
d'exploitation du point d'accès en mode autonome j'ai perdu une bonne
demi-heure avant de m'apercevoir que la requête TFTP émise par le point
d'accès utilisait l'adresse de diffusion 255.255.255.255 et que mon serveur
TFTP n'était pas en écoute sur cette adresse.</p>
</div>
</div>
</div>
</div>
<div class="section" title="Le point d'accès">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="tftpd-hpa-allones.ap" name=
"tftpd-hpa-allones.ap"></a>Le point d'accès</h2>
</div>
</div>
</div>
<p>La documentation officielle sur la conversion à rebours du mode allégé en
mode autonome est détaillée en <a class="ulink" href=
"http://www.cisco.com/en/US/docs/wireless/access_point/conversion/lwapp/upgrade/guide/lwapnote.html#wp161272"
target="_top">dix étapes</a> qui consistent à réinitialiser le point d'accès
alors qu'il est directement relié par un câble droit avec une machine
disposant d'un service TFTP.</p>
<p>On repère le mode de configuration à la console via la version de l'IOS
installé.</p>
<pre class="screen" width="80">
AP0023.5e13.4ea2#sh ver

Cisco IOS Software, C1200 Software (C1200-RCVK9W8-M), <span class=
"emphasis"><em>Version 12.3(11)JX1</em></span>, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2006 by Cisco Systems, Inc.
Compiled Mon 17-Jul-06 11:41 by alnguyen

ROM: Bootstrap program is C1200 boot loader
BOOTLDR: C1200 Boot Loader (C1200-BOOT-M) Version 12.3(2)JA4, RELEASE SOFTWARE (fc1)

AP0023.5e13.4ea2 uptime is 23 minutes
System returned to ROM by power-on
System image file is "<span class=
"emphasis"><em>flash:/c1200-rcvk9w8-mx/c1200-rcvk9w8-mx</em></span>"

cisco AIR-LAP1232AG-E-K9   (PowerPC405GP) processor (revision A0) with 15038K/1336K bytes of memory.
Processor board ID FCZ1251Z0DR
PowerPC405GP CPU at 196Mhz, revision number 0x0145
Last reset from power-on
LWAPP image version 3.0.51.0
1 FastEthernet interface

32K bytes of flash-simulated non-volatile configuration memory.
Base ethernet MAC Address: 00:23:5E:13:4E:A2
Part Number                          : 73-8704-14
PCA Assembly Number                  : 800-23211-14
PCA Revision Number                  : A0
PCB Serial Number                    : FOC12482M20
Top Assembly Part Number             : 800-29149-01
Top Assembly Serial Number           : FCZ1251Z0DR
Top Revision Number                  : A0
Product/Model Number                 : AIR-LAP1232AG-E-K9

Configuration register is 0xF
</pre>
<p>Suivre la procédure donnée dans la documentation ne pose pas de difficulté
particulière. Ce qui est déroutant, c'est le message d'erreur obtenu&nbsp;:
<code class="literal">Premature end of tar file</code>. Cette erreur n'est pas
très explicite au regard du problème réel. Le transfert se termine d'autant
plus prématurément qu'il n'a jamais débuté&nbsp;!</p>
<pre class="screen" width="80">
Xmodem file system is available.
flashfs[0]: 3 files, 2 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 7741440
flashfs[0]: Bytes used: 1861632
flashfs[0]: Bytes available: 5879808
flashfs[0]: flashfs fsck took 11 seconds.
Reading cookie from flash parameter block...done.
Base ethernet MAC Address: 00:23:5e:13:4e:a2
Initializing ethernet port 0...
Reset ethernet port 0...
Reset done!
ethernet link up, 100 mbps, full-duplex
Ethernet port 0 initialized: link is up
button is pressed, wait for button to be released...
button pressed for 27 seconds
process_config_recovery: set IP address and config to default 10.0.0.1
process_config_recovery: image recovery
image_recovery: Download default IOS tar image tftp://255.255.255.255/c1200-k9w7-tar.default

examining image...
extracting info (274 bytes)
<span class="emphasis"><em>Premature end of tar file</em></span>
ERROR: Image is not a valid IOS image archive.Loading "flash:/c1200-rcvk9w8-mx/c1200-rcvk9w8-mx"...##
</pre></div>
<div class="section" title="Le service TFTP">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="tftpd-hpa-allones.tftpd" name=
"tftpd-hpa-allones.tftpd"></a>Le service TFTP</h2>
</div>
</div>
</div>
<p>À quelques jours d'intervalle, je venais juste de publier une révision de
la section <a class="ulink" href=
"http://www.linux-france.org/prj/inetdoc/articles/devmgmt/devmgmt.tftp.html"
target="_top"><em class="citetitle">Échanges avec le protocole TFTP</em></a>
de l'article <em class="citetitle">Gestion des équipements réseau avec
GNU/Linux</em>. Cette révision était motivée par la prise en charge de la
configuration du paquet <code class="systemitem">tftpd-hpa</code> via un jeu
de (menus|écrans) <code class="systemitem">debconf</code>.</p>
<pre class="screen" width="80">
$ dpkg -l tftpd-hpa | grep ^ii
ii  tftpd-hpa           5.0-7           HPA's tftp server
</pre>
<p>Parmi ces menus, on trouve celui relatif à l'adresse sur laquelle le
service est en écoute. Cette adresse est définie à la valeur <code class=
"systemitem">0.0.0.0:69</code> et ne correspond pas à l'adresse de diffusion
<code class="systemitem">255.255.255.255</code>.</p>
<p>Le résumé de la configuration du paquet est donné par le fichier
<code class="filename">/etc/default/tftpd-hpa</code>.</p>
<pre class="screen" width="80">
$ cat /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa

## The configuration of this file is managed by debconf as long
## as a line beginning with the '#DEBCONF#' token is included.
##
## Do not edit this file manually, use:
## dpkg-reconfigure tftpd-hpa

#DEBCONF#

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
</pre>
<p>Dans le contexte particulier de la mise à jour système du point d'accès, il
est nécessaire de redéfinir l'adresse d'écoute du service en <code class=
"systemitem">255.255.255.255</code>.</p>
<p>Après exécution de la commande <strong class="userinput"><code><code class=
"prompt">#</code>&nbsp;dpkg-reconfigure tftpd-hpa</code></strong>, on
obtient&nbsp;:</p>
<pre class="screen" width="80">
$ cat /etc/default/tftpd-hpa | grep ADDRESS
TFTP_ADDRESS="255.255.255.255"
</pre>
<p>Au prix de cette reconfiguration, le service TFTP pourra traiter la requête
du point d'accès.</p>
<pre class="screen" width="80">
flashfs[0]: 3 files, 2 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 7741440
flashfs[0]: Bytes used: 1861632
flashfs[0]: Bytes available: 5879808
flashfs[0]: flashfs fsck took 11 seconds.
Reading cookie from flash parameter block...done.
Base ethernet MAC Address: 00:23:5e:13:4e:a2
Initializing ethernet port 0...
Reset ethernet port 0...
Reset done!
ethernet link up, 100 mbps, full-duplex
Ethernet port 0 initialized: link is up
button is pressed, wait for button to be released...
button pressed for 23 seconds
process_config_recovery: set IP address and config to default 10.0.0.1
process_config_recovery: image recovery
image_recovery: Download default IOS tar image tftp://255.255.255.255/c1200-k9w7-tar.default

examining image...
extracting info (274 bytes)
<span class="emphasis"><em>Image info:
Version Suffix: k9w7-.123-8.JED
Image Name: c1200-k9w7-mx.123-8.JED
Version Directory: c1200-k9w7-mx.123-8.JED
Ios Image Size: 4342272
Total Image Size: 5079552
Image Feature: WIRELESS LAN
Image Family: C1200
Wireless Switch Management Version: 1.0
Extracting files...</em></span>
extracting info (274 bytes)
c1200-k9w7-mx.123-8.JED/ (directory) 0 (bytes)
c1200-k9w7-mx.123-8.JED/html/ (directory) 0 (bytes)
c1200-k9w7-mx.123-8.JED/html/level/ (directory) 0 (bytes)
c1200-k9w7-mx.123-8.JED/html/level/1/ (direc

&lt;snipped/&gt;

Deleting current version...
Deleting flash:/c1200-rcvk9w8-mx...done.
New software image installed in flash:/c1200-k9w7-mx.123-8.JED
Configuring system to use new image...done.
Requested system reload in progress...download took about 289 seconds
Loading "flash:/c1200-k9w7-mx.123-8.JED/c1200-k9w7-mx.123-8.JED"...###
</pre></div>
<div class="section" title="Pour conclure">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="tftpd-hpa-allones.conclusion" name=
"tftpd-hpa-allones.conclusion"></a>Pour conclure</h2>
</div>
</div>
</div>
<p>Voilà des années que l'on est habitué à voir ces requêtes TFTP à
destination de l'adresse <em class="wordasword">All-Ones</em> et que l'on
cherche à s'en débarrasser à toute force. Le jour où on est contraint de
l'utiliser, on ne réagit même pas au fait que le service n'est pas configuré
correctement. Bref, je devrais certainement compléter la documentation avec
cet exemple.</p>
<p>Ce billet est disponible en version imprimable au format PDF&nbsp;:
<a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/telechargement/tftpd-hpa-allones.pdf"
target="_top">tftpd-hpa-allones.pdf</a>.</p>
<p>$Id: tftpd-hpa-allones.xml 1432 2009-11-04 22:05:26Z latu $</p>
</div>
</div>
</body>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/11/index.html#e2009-11-04T23_10_43.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/11/index.html#e2009-11-04T23_10_43.txt</guid>
<title>Nouveau shell GRUB sur clé USB</title>
<dc:date>2009-11-04T23:10:43+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Debian, M6300</dc:subject>
<description>
<![CDATA[<div xml:lang="fr" class="article" title="Nouveau shell GRUB sur clé USB"
lang="fr">
<div class="titlepage">
<div>
<div>
</div>
<div>
<div class="abstract" title="Résumé">
<p><span class="inlinemediaobject"><img src="http://www.linux-france.org/~platu/weblog/images/grub-usb1.png" align=
"right" width="120" /></span> Dans la série sur les turpitudes de la gestion
d'amorçage d'un système d'exploitation, voici un billet sur la trousse à
outils de secours ultime&nbsp;: l'installation de grub(2) sur clé
<acronym class="acronym">USB</acronym> et l'utilisation de son <em class=
"wordasword">shell</em> spécifique. Après avoir vanté les mérites du <a class=
"ulink" href=
"http://www.linux-france.org/~platu/weblog/archives/2009/09/index.html#e2009-09-12T12_17_37.txt"
target="_top">vieux gestionnaire d'amorce</a> <acronym class=
"acronym">LILO</acronym>, voici le temps de la découverte des avantages du
gestionnaire de nouvelle génération&nbsp;: <acronym class=
"acronym">GRUB</acronym>.</p>
</div>
</div>
</div>
</div>
<div class="section" title="Contexte GRUB sur Debian GNU/Linux">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="grub-usb.context" name=
"grub-usb.context"></a>Contexte GRUB sur Debian GNU/Linux</h2>
</div>
</div>
</div>
<p>À l'heure de la rédaction de ce billet, <acronym class=
"acronym">GRUB</acronym> est en cours de transition entre une version
«historique» fournie avec le paquet <code class=
"systemitem">grub-legacy</code> et une version plus actuelle distribuée via
plusieurs paquets&nbsp;: <code class="systemitem">grub-common</code> et
<code class="systemitem">grub-pc</code>.</p>
<p>Attention ! Il n'est pas question ici de promouvoir cette nouvelle version.
La transition entre les deux versions n'est pas achevée et j'ai trois ou
quatre machines sur lesquelles la migration n'a pas fonctionné comme prévu.
Dans ce genre de cas, la version de <acronym class="acronym">GRUB</acronym>
correspondant au paquet <code class="systemitem">grub-legacy</code> ayant
largement fait ses preuves, le passage à un nouveau gestionnaire d'amorce
n'est pas justifié.</p>
<p>En revanche, j'ai découvert presque par hasard que le <em class=
"wordasword">shell</em> de la nouvelle version possède des fonctions dites
<em class="wordasword">auto completion</em> particulièrement séduisantes
lorsque la gestion d'amorçage est dans un état calamiteux. Ces mêmes fonctions
utilisées via un dispositif de stockage externe tel qu'une clé <acronym class=
"acronym">USB</acronym> deviennent indispensables pour amorcer un système
d'exploitation sur une machine dont le partitionnement et les versions de
noyaux disponibles sont inconnus.</p>
</div>
<div class="section" title="Installation de GRUB sur clé USB">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="grub-usb.install" name=
"grub-usb.install"></a>Installation de GRUB sur clé USB</h2>
</div>
</div>
</div>
<p>Cette section relève du plagiat éhonté puisque ce type d'installation a
déjà été maintes fois présenté sur la toile. Voici tout de même la liste des
instructions d'installation.</p>
<p>Dans cet exemple, le disque dur du transportable M6300 est référencé
<code class="filename">/dev/sda</code> et la clé <acronym class=
"acronym">USB</acronym> <code class="filename">/dev/sdb</code>. Ses
caractéristiques se retrouvent dans les messages système après connexion.</p>
<pre class="screen" width="80">
usb 1-4: new high speed USB device using ehci_hcd and address 3
usb 1-4: New USB device found, idVendor=090c, idProduct=1000
usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-4: Product: USB Flash Disk
usb 1-4: Manufacturer: General
usb 1-4: SerialNumber: AA08061700013029
usb 1-4: configuration #1 chosen from 1 choice
Initializing USB Mass Storage driver...
scsi5 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 3
usb-storage: waiting for device to settle before scanning
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usb-storage: device scan complete
scsi 5:0:0:0: Direct-Access     General  USB Flash Disk   1100 PQ: 0 ANSI: 0 CCS
sd 5:0:0:0: Attached scsi generic sg2 type 0
sd 5:0:0:0: [sdb] 3917824 512-byte logical blocks: (2.00 GB/1.86 GiB)
sd 5:0:0:0: [sdb] Write Protect is off
sd 5:0:0:0: [sdb] Mode Sense: 43 00 00 00
sd 5:0:0:0: [sdb] Assuming drive cache: write through
sd 5:0:0:0: [sdb] Assuming drive cache: write through
sdb: sdb1
sd 5:0:0:0: [sdb] Assuming drive cache: write through
sd 5:0:0:0: [sdb] Attached SCSI removable disk
</pre>
<div class="itemizedlist">
<ul class="itemizedlist" compact="compact">
<li class="listitem">
<p>La première opération consiste à créer une partition unique <em class=
"wordasword">bootable</em> sur la clé <acronym class="acronym">USB</acronym>
et à formater cette partition avec un système de fichier <acronym class=
"acronym">FAT32</acronym>. De cette façon, le <acronym class=
"acronym">BIOS</acronym> de la machine reconnaîtra un périphérique de stockage
utilisable pour amorcer un système d'exploitation.</p>
<p>Pour cette opération, on utilise l'outil de partitionnement <span class=
"application">parted</span> qui permet de faire tous les traitements
requis.</p>
<pre class="screen" width="80">
# parted /dev/sdb
GNU Parted 1.8.8.git-dirty
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) rm 1
(parted) print
Model: General USB Flash Disk (scsi)
<span class="emphasis"><em>Disk /dev/sdb: 2006MB</em></span>
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start  End  Size  Type  File system  Flags

(parted) <span class="emphasis"><em>mkpart primary 1MB 2006</em></span>
(parted) mkfs 1 fat32
Warning: The existing file system will be destroyed and all data on the 
         partition will be lost. Do you want to continue?
parted: invalid token: 1
Yes/No? Yes
Partition number? 1
File system type?  [ext2]? fat32
(parted) toggle 1 boot
(parted) quit
Information: You may need to update /etc/fstab.
</pre>
<p>On note que la capacité exacte de la clé <acronym class=
"acronym">USB</acronym> donnée par la commande <span class=
"command"><strong>print</strong></span> est utilisée pour créer la partition
avec la commande <span class="command"><strong>mkpart</strong></span>.</p>
</li>
<li class="listitem">
<p>La seconde opération consiste à installer <acronym class=
"acronym">GRUB</acronym> sur le système de fichiers créé précédemment. On
utilise la version courante des paquets installé sur le transportable.</p>
<pre class="screen" width="80">
# dpkg -l grub* | grep ^ii
ii  grub         0.97-59    GRand Unified Bootloader (dummy package)
ii  grub-common  1.97-1     GRand Unified Bootloader, version 2 (common files)
ii  grub-pc      1.97-1     GRand Unified Bootloader, version 2 (PC/BIOS version)
</pre>
<p>Après avoir créé le répertoire d'installation de <acronym class=
"acronym">GRUB</acronym>, on copie l'ensemble des modules disponibles de façon
à pouvoir traiter le maximum de configurations différentes possibles.</p>
<pre class="screen" width="80">
# mount /dev/sdb1 /mnt
# mkdir -p /mnt/boot/grub
# cp /usr/lib/grub/i386-pc/* /mnt/boot/grub/
</pre>
<p>On créé une carte minimale des périphériques de stockage disponibles avant
de lancer l'installation du gestionnaire d'amorce.</p>
<pre class="screen" width="80">
# echo '(hd0) /dev/sdb' &gt; /mnt/boot/grub/device.map
# grub-install --root-directory=/mnt /dev/sdb
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0) /dev/sdb
</pre></li>
</ul>
</div>
<p>Ces deux étapes accomplies, la phase d'installation est achevée et on peut
passer à l'exploitation du gestionnaire d'amorçage <acronym class=
"acronym">GRUB</acronym> à partir d'une clé <acronym class=
"acronym">USB</acronym>.</p>
</div>
<div class="section" title="Utilisation du shell GRUB">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="grub-usb.shell" name="grub-usb.shell"></a>Utilisation
du shell GRUB</h2>
</div>
</div>
</div>
<p>Dans cette section, on utilise la séquence d'initialisation du
transportable M6300 pour illustrer les fonctions du <em class=
"wordasword">shell</em> <acronym class="acronym">GRUB</acronym> à l'aide de
clichés de qualité <span class="emphasis"><em>remarquable</em></span> pris
avec un téléphone mobile.</p>
<p>On commence par la sélection du périphérique de démarrage. Sur le
transportable, la touche <span class="keycap"><strong>F12</strong></span>
permet de choisir la clé <acronym class="acronym">USB</acronym>. Sur un poste
fixe, il faut utiliser les menus du <acronym class="acronym">BIOS</acronym>
pour désigner le premier périphérique de stockage utilisé pour lancer un
système d'exploitation.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="283">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/grub-usb2.png" width="265.748031496063" alt=
"Choix du périphérique de démarrage" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/grub-usb2.png" target="_top">Choix du
périphérique de démarrage</a></p>
</div>
</div>
<p>Une fois que l'invite de commande du <em class="wordasword">shell</em>
<acronym class="acronym">GRUB</acronym> est disponible, la première opération
à réaliser consiste à choisir la racine du <span class=
"emphasis"><em>gestionnaire d'amorçage</em></span> à l'aide de la commande
<span class="command"><strong>root</strong></span>.</p>
<div class="itemizedlist">
<ul class="itemizedlist" compact="compact">
<li class="listitem">
<p>La commande <span class="command"><strong>root</strong></span>, utilisée
sans paramètre, renvoie la racine en cours d'utilisation. Dans la vue
ci-dessous, on reconnaît l'identification du système de fichier de la clé
<acronym class="acronym">USB</acronym> que l'on formaté en <acronym class=
"acronym">FAT32</acronym>.</p>
<pre class="screen" width="80">
(hd0,1): Filesystem is fat
</pre></li>
<li class="listitem">
<p>La même commande utilisée avec un autre périphérique de stockage en
paramètre sert à désigner une nouvelle racine à partir de laquelle on va
pouvoir choisir le noyau à utiliser. Ici, on désigne le disque dur du
transportable et sa première partition. Le message renvoyé indique que le
système de fichiers a bien été reconnu et que l'on peut le parcourir à partir
du <em class="wordasword">shell</em>. C'est justement la fonction qui nous
intéresse&nbsp;!</p>
</li>
</ul>
</div>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="283">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/grub-usb3.png" width="265.748031496063" alt=
"Racine du gestionnaire d'amorçage" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/grub-usb3.png" target="_top">Racine du
gestionnaire d'amorçage</a></p>
</div>
</div>
<p>Pour choisir le noyau Linux à utiliser pour le lancement du système
d'exploitation, on dispose de deux commandes du <em class=
"wordasword">shell</em>&nbsp;: <span class=
"command"><strong>linux</strong></span> et <span class=
"command"><strong>initrd</strong></span>. La commande <span class=
"command"><strong>linux</strong></span> sert à désigner le fichier contenant
la partie monolithique du noyau. Généralement, ce fichier est baptisé
<code class="filename">vmlinuz-*</code>. La commande <span class=
"command"><strong>initrd</strong></span> sert elle aussi à désigner un
fichier. Il s'agit cette fois ci de l'<em class="wordasword">initial
ramdisk</em> qui contient une pseudo arborescence racine du système
d'exploitation dans laquelle on trouve un <em class="wordasword">shell</em>
minimal (<em class="wordasword">BusyBox</em>), un ensemble d'outils et les
modules du noyau.</p>
<p>Pour chaque utilisation des commandes <span class=
"command"><strong>linux</strong></span> et <span class=
"command"><strong>initrd</strong></span>, le <em class="wordasword">shell</em>
<acronym class="acronym">GRUB</acronym> renvoie un message de confirmation.
Dans le cliché ci-dessous, on utilisé la touche de <span class=
"emphasis"><em>tabulation</em></span> pour obtenir la liste des fichiers
disponibles.</p>
<div class="mediaobject"><a id="grub-usb.shell.img4" name=
"grub-usb.shell.img4"></a>
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="283">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/grub-usb4.png" width="265.748031496063" alt=
"Choix du noyau Linux" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/grub-usb4.png" target="_top">Choix du noyau
Linux</a></p>
</div>
</div>
<p>Une fois les deux fichiers du noyau choisis, il ne reste plus qu'à utiliser
la commande <span class="command"><strong>boot</strong></span> pour lancer le
système d'exploitation normalement ou presque&nbsp;... Lors de l'utilisation
de la commande <span class="command"><strong>linux</strong></span> j'ai
malencontreusement oublié de préciser la <span class="emphasis"><em>véritable
racine</em></span> du système d'exploitation. En fait, cet oubli était
volontaire. Il permet de montrer comment identifier les volumes logiques
disponibles à partir du <em class="wordasword">shell</em> <span class=
"application">BusyBox</span> fourni via <span class=
"command"><strong>initrd</strong></span>.</p>
<div class="mediaobject"><a id="grub-usb.shell.img5" name=
"grub-usb.shell.img5"></a>
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="283">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/grub-usb5.png" width="265.748031496063" alt=
"Repérage de la racine du système d'exploitation" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/grub-usb5.png" target="_top">Repérage de la
racine du système d'exploitation</a></p>
</div>
</div>
<p>Comme précisé plus haut, l'arborescence contenue dans le fichier
<code class="filename">initrd</code> contient un certain nombre d'outils, dont
ceux nécessaires à la gestion de volumes logiques. Dans le scénario de
découverte d'une machine inconnue, on peut activer tous les volumes
disponibles à l'aide de la commande <span class="command"><strong>vgchange -a
y</strong></span>. On identifie ainsi le volume correspondant à la fameuse
racine du système d'exploitation.</p>
<p>Une fois l'identification faite, il est possible de relancer le système à
l'aide de la commande <span class="command"><strong>reboot</strong></span> et
de reprendre les étapes précédentes en précisant le paramètre <strong class=
"userinput"><code>root=/dev/mapper/Amethyste-root</code></strong> à la
commande <span class="command"><strong>linux</strong></span>. Et cette
fois-ci, le système d'exploitation pourra se lancer normalement.</p>
</div>
<div class="section" title="Quelques commandes utiles">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="grub-usb.commands" name=
"grub-usb.commands"></a>Quelques commandes utiles</h2>
</div>
</div>
</div>
<p>Avec la version de <acronym class="acronym">GRUB</acronym> utilisée, le
<em class="wordasword">shell</em> est essentiellement modulaire. Qu'il
s'agisse de ses propres fonctionnalités comme la commande <span class=
"command"><strong>ls</strong></span> ou du support des systèmes de fichiers
nécessaires au lancement d'un système d'exploitation, tout est disponible sous
forme de modules.</p>
<p>Il n'est pas question ici de reprendre la documentation officielle sur les
commandes que l'on trouve à l'adresse <a class="ulink" href=
"http://grub.enbug.org/ListeDesCommandes" target=
"_top">http://grub.enbug.org/</a>. Simplement, voici quelques exemples de
commandes et de syntaxe utiles pour la rédaction de ce billet.</p>
<div class="variablelist">
<dl>
<dt><span class="term">lsmod,</span> <span class="term">insmod</span></dt>
<dd>
<p>Ces deux commandes permettent de lister et charger des modules en mémoire.
On peut citer l'exemple du module <code class="systemitem">raid</code> qui
permet de reconnaître les système de fichiers sur des partitions
<acronym class="acronym">RAID</acronym> logicielles.</p>
</dd>
<dt><span class="term">root</span></dt>
<dd>
<p>Cette commande est utilisable soit pour consulter la racine du système
d'amorçage reconnu soit pour désigner une nouvelle racine. Cette racine est
fonction de carte établie lors de l'installation de <acronym class=
"acronym">GRUB</acronym> sur le système. Cette carte est stockée dans le
fichier <code class="filename">/boot/grub/device.map</code>. Quantité
d'erreurs rapportées sur les forums de la toile sont relatives à un changement
de référence sur la liste des périphériques de stockage contenue dans ce
fichier. Il est essentiel que cette carte et le paramétrage des menus soient
cohérents.</p>
<p>Dans le cas du transportable, on dispose des informations
suivantes&nbsp;:</p>
<pre class="screen" width="80">
$ cat /boot/grub/device.map
<span class="emphasis"><em>(hd0)   /dev/sda</em></span>

$ grep -3 hd0 /boot/grub/grub.cfg                                 

### BEGIN /etc/grub.d/05_debian_theme ###
insmod ext2                              
<span class="emphasis"><em>set root=(hd0,1)</em></span>
search --no-floppy --fs-uuid --set 171f0aff-232a-4dc4-a4bc-b9f2ff2f6757
insmod png                                                             
if background_image /grub/moreblue-orbit-grub.png ; then
--
### BEGIN /etc/grub.d/10_linux ###
menuentry "Debian GNU/Linux, with Linux 2.6.31.5" {
        insmod ext2
<span class="emphasis"><em>        set root=(hd0,1)</em></span>
        search --no-floppy --fs-uuid --set 171f0aff-232a-4dc4-a4bc-b9f2ff2f6757
        linux   /vmlinuz-2.6.31.5 root=/dev/mapper/Amethyste-root ro
        initrd  /initrd.img-2.6.31.5
}
</pre></dd>
<dt><span class="term">linux</span></dt>
<dd>
<p>Cette commande désigne le fichier image de la partie monolithique du noyau
ainsi que ses paramètres d'initialisation tels que la racine du système
d'exploitation. Les paramètres de lancement du noyau Linux sont documentés
dans le fichier <code class="filename">kernel-parameters.txt</code> fourni
avec ses sources. Comme dans le cas de la commande <span class=
"command"><strong>root</strong></span> de <acronym class=
"acronym">GRUB</acronym>, le fichier <code class=
"filename">/boot/grub/grub.cfg</code> donne un bon exemple avec la syntaxe des
deux paramètres importants&nbsp;:</p>
<pre class="screen" width="80">
linux   /vmlinuz-2.6.31.5 root=/dev/mapper/Amethyste-root ro
</pre>
<div class="itemizedlist">
<ul class="itemizedlist" compact="compact">
<li class="listitem">
<p>Le paramètre <em class="parameter"><code>root</code></em> indique la racine
du système d'exploitation à partir de laquelle le processus <code class=
"systemitem">init</code> est lancé.</p>
</li>
<li class="listitem">
<p>Le paramètre <em class="parameter"><code>ro</code></em> précise que cette
racine doit être montée en lecture seule (<em class="wordasword">read
only</em>) durant le lancement du système.</p>
</li>
</ul>
</div>
<p>Si <a class="link" href="#grub-usb.shell.img4">aucun paramètre</a> n'est
fourni, l'initialisation du système s'arrête au niveau du <em class=
"wordasword">shell</em> <span class="application">BusyBox</span>.</p>
</dd>
<dt><span class="term">initrd</span></dt>
<dd>
<p>Cette commande simple désigne le fichier image de l'arborescence de
chargement des modules du noyau Linux. En plus de la mise à disposition des
modules, cette arborescence fournit un ensemble minimum d'outils. Ces outils
peuvent être utilisés pour <a class="link" href=
"#grub-usb.shell.img5">identifier</a> les points de montage des différents
périphériques de stockage.</p>
<pre class="screen" width="80">
initrd  /initrd.img-2.6.31.5
</pre></dd>
</dl>
</div>
</div>
<div class="section" title="Pour conclure">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="grub-usb.conclude" name="grub-usb.conclude"></a>Pour
conclure</h2>
</div>
</div>
</div>
<p>Si vous êtes parvenu jusqu'à la lecture de ces lignes, vous serez peut-être
moins intimidé par ce terrible monstre qu'est le gestionnaire d'amorce&nbsp;!
Il faut dire que dans le contexte d'exploitation professionnelle, ces
manipulations se font dans des conditions de stress très importantes. Si un
système ne se lance plus normalement, c'est que l'on est face à un problème
sérieux.</p>
<p>Disposer d'un gestionnaire d'amorce sur périphérique externe comme une clé
<acronym class="acronym">USB</acronym> peut être déterminant dans ces
situations critiques.</p>
<p>Enfin, c'est l'occasion de recycler une superbe clé <acronym class=
"acronym">USB</acronym> Canal+ qui aurait été totalement inutile
autrement&nbsp;! Vous l'aurez constaté, je n'ai aucun goût pour les <em class=
"wordasword">goodies</em>.</p>
<p>Ce document est disponible en version imprimable au format PDF&nbsp;:
<a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/telechargement/grub-usb.pdf"
target="_top">grub-usb.pdf</a>.</p>
<p>$Id: grub-usb.xml 1430 2009-11-02 22:39:06Z latu $</p>
</div>
</div>
</body>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/10/index.html#e2009-10-10T11_46_54.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/10/index.html#e2009-10-10T11_46_54.txt</guid>
<title>Recette de cuisine sur les bases Iceweasel/Firefox</title>
<dc:date>2009-10-10T11:46:54+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Debian, M6300</dc:subject>
<description>
<![CDATA[<p>Ce billet est un plagiat éhonté de nombreux autres sur le même sujet&nbsp;:
optimiser le temps de chargement du navigateur web Iceweasel/Firefox. Avec le
temps, les bases stockées dans le répertoire personnel ont tendance à grossir
et les performances du navigateur s'en ressentent.</p>

<p>Voici donc, pour mémoire, un script à 2€cts qui permet d'optimiser les bases
en question.</p>

<pre>for base in ~/.mozilla/firefox/*.default/*.sqlite; do
  echo $(basename $base) "cleanup";
  sqlite3 $base "VACUUM";
done</pre>

<p>À l'exécution, on obtient à l'écran&nbsp;:</p>

<pre>phil@topaze:~$ for base in ~/.mozilla/firefox/*.default/*.sqlite; do
>   echo $(basename $base) "cleanup";
>   sqlite3 $base "VACUUM";
> done
content-prefs.sqlite cleanup
cookies.sqlite cleanup
downloads.sqlite cleanup
formhistory.sqlite cleanup
permissions.sqlite cleanup
places.sqlite cleanup
search.sqlite cleanup
urlclassifier3.sqlite cleanup</pre>

<p>Normalement, au redémarrage les performances sont visiblement
meilleures.</p>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/09/index.html#e2009-09-19T15_01_16.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/09/index.html#e2009-09-19T15_01_16.txt</guid>
<title>Linux kernel device mapper &amp; udev</title>
<dc:date>2009-09-19T15:01:16+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Debian, M6300</dc:subject>
<description>
<![CDATA[<div xml:lang="fr" class="article" title=
"Linux kernel device mapper &amp; udev" lang="fr">
<div class="titlepage">
<div>
<div>
</div>
<div>
<div class="abstract" title="Résumé">
<p><span class="inlinemediaobject"><img src="http://www.linux-france.org/~platu/weblog/images/thumb45.png" align="right"
width="120" /></span> Ce billet fait suite au précédent sur les <a class=
"ulink" href=
"http://www.linux-france.org/~platu/weblog/archives/2009/09/index.html#e2009-09-12T12_17_37.txt"
target="_top">gestionnaires d'amorce GNU/Linux</a>. Le fonctionnement de
<em class="citetitle">GRUB</em> était compromis par les liens symboliques
utilisés pour la représentation des volumes logiques de stockage. Le propos
ici est d'illustrer la transparence du processus d'assurance qualité de la
distribution Debian.</p>
</div>
</div>
</div>
</div>
<div class="section" title="Contexte de la gestion des volumes logiques">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="dmsetup-udev.context" name=
"dmsetup-udev.context"></a>Contexte de la gestion des volumes logiques</h2>
</div>
</div>
</div>
<p>Sur un système GNU/Linux, le logiciel <em class="wordasword">Linux Kernel
Device Mapper</em> est en charge de la gestion des volumes logiques
<acronym class="acronym">LVM</acronym>, <acronym class=
"acronym">RAID</acronym> et quelques autres. De façon classique, ce logiciel
est réparti entre les espaces mémoire noyau et utilisateur. La partie
utilisateur est fournie à l'aide du paquet Debian baptisé <code class=
"systemitem">dmsetup</code>.</p>
<p>Ce paquet est notamment responsable de la mise en place des entrées
représentant les volumes logiques dans l'arborescence du système&nbsp;; le
répertoire <code class="filename">/dev</code>. Cette «responsabilité» est
partagée avec les fonctions du démon <code class="systemitem">udevd</code>
dont les règles servent à ajouter ou supprimer des entrées dynamiquement en
fonction de périphériques de stockage physiquement branchés ou débranchés sur
le système.</p>
<p>Cet été, dans la branche <em class="wordasword">unstable</em> de la
distribution Debian, il y a eu quelques «croisements gênants» dans les
attributions des entrées de périphériques. Il s'agissait de savoir lesquelles
des entrées <code class="filename">/dev/dm-*</code> ou des entrées
<code class="filename">/dev/mapper/*</code> devaient être des liens
symboliques ou des fichiers <em class="wordasword">nodes</em> de
périphériques. Ce conflit a eu des effets de bords sur l'exécution de quelques
autre outils&nbsp; dont <em class="citetitle">GRUB</em> qui est devenu
inutilisable.</p>
</div>
<div class="section" title="Processus d'assurance qualité Debian">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="dmsetup-udev.qa" name="dmsetup-udev.qa"></a>Processus
d'assurance qualité Debian</h2>
</div>
</div>
</div>
<p>Dans un pareil cas de figure, il faut s'en remettre au processus
d'assurance qualité de la distribution. Deux méthodes d'accès types sont à
notre disposition.</p>
<div class="itemizedlist">
<ul class="itemizedlist" compact="compact">
<li class="listitem">
<p>La première méthode utilise les <span class="emphasis"><em>rapports de
<em class="wordasword">bugs</em></em></span>. Elle consiste à faire appel à
votre moteur de recherche favori qui doit avoir indexé les rapports de
<em class="wordasword">bugs</em> sur la question. Bien sûr, les risques
d'aléas et de redondances sur ces indexes de moteur de recherche sont
importants. Aussi, la page web dédiée aux rapports de <em class=
"wordasword">bugs</em>&nbsp;: <a class="ulink" href=
"http://www.debian.org/Bugs/" target="_top">http://www.debian.org/Bugs/</a>
offre de meilleures fonctionnalités tout en suivant le principe du moteur de
recherche.</p>
</li>
<li class="listitem">
<p>La seconde méthode fait appel <span class="emphasis"><em>aux pages de
suivis des paquets</em></span>. Il existe, pour chaque paquet ou famille de
paquets, un tableau de bord synthétisant l'ensemble des paramètres
d'état&nbsp;: <em class="wordasword">changelog</em>, dates et chronologie de
publication entre les branches, nombre de bug, etc. La page web de départ est
à l'adresse&nbsp;: <a class="ulink" href="http://packages.qa.debian.org/"
target="_top">http://packages.qa.debian.org</a>. Le point de départ de la
recherche est basé sur le nom du paquet.</p>
</li>
</ul>
</div>
<p>Si on retient la seconde méthode dans le contexte présent, c'est le paquet
<code class="systemitem">dmsetup</code> qui constitue le point de départ. On
utilise l'adresse donnée et on saisit le nom du paquet dans le champ de
recherche. On est alors renvoyé automatiquement vers la page de la famille
<code class="systemitem">lvm2</code> puisque <code class=
"systemitem">dmsetup</code> en dépend.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="425">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/dmsetup-udev.png" width="389.763779527559" alt=
"Page de suivi qualité LVM2" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/dmsetup-udev.png" target="_top">Page de suivi
qualité LVM2</a></p>
</div>
</div>
<p>En consultant la liste des <em class="wordasword">bugs</em> de ce paquet,
on retrouve le numéro <a class="ulink" href=
"http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542422" target=
"_top">542422</a> dont l'historique retrace le problème rencontré et donne
quelques explications essentielles.</p>
<p>Si on suit la même démarche avec le paquet <code class=
"systemitem">grub-common</code> qui contient la commande <span class=
"command"><strong>grub-probe</strong></span>, on retrouve le numéro <a class=
"ulink" href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542435" target=
"_top">542435</a> qui lui aussi correspond parfaitement au problème rencontré.
On trouve même une référence au <em class="wordasword">bug</em> cité
précédemment.</p>
<pre class="screen" width="80">
This is now fixed with 

lvm2 (2.02.51-2) unstable; urgency=low

  * Make mapper/* the real device, dm-* a symlink. (closes: #542422)
</pre>
<p>Enfin, maintenant que les causes sont bien identifiées et que le problème a
été corrigé, il reste à trouver la méthode de correction des entrées mal
référencées. En revenant à la liste des <em class="wordasword">bugs</em> du
paquet <code class="systemitem">dmsetup</code>, on trouve le numéro <a class=
"ulink" href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=543795" target=
"_top">543795</a> qui propose une commande de correction en forçant une
nouvelle exécution du processus de création pour chaque entrée de
périphérique.</p>
<pre class="screen" width="80">
# echo change &gt; /sys/block/dm-0/uevent
</pre>
<p>Une fois ce traitement fait, les entrées <code class=
"filename">/dev/dm-*</code> sont redevenues des liens symboliques pointant
vers les fichiers <em class="wordasword">nodes</em> du répertoire <code class=
"filename">/dev/mapper/</code> et le gestionnaire d'amorce <em class=
"citetitle">GRUB</em> fonctionne à nouveau.</p>
</div>
<div class="section" title="Pour conclure">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="dmsetup-udev.conclude" name=
"dmsetup-udev.conclude"></a>Pour conclure</h2>
</div>
</div>
</div>
<p>Voici donc un exemple d'utilisation du processus d'assurance qualité de la
distribution Debian. Cet exemple est représentatif de l'importance de la
diffusion de l'information en toute transparence. Avec un système
propriétaire, il serait tout simplement impossible de mener la démarche
décrite dans ce billet.</p>
<p>Ceci-dit, le processus à ses limites. Si le paquet qui fournit la
fonctionnalité n'est pas très utilisé ou que les utilisateurs ne prennent pas
le temps de remonter les problèmes, la dynamique de la démarche qualité se
rompt facilement et tous les bénéfices sont perdus.</p>
<p>Ce document est disponible en version imprimable au format PDF&nbsp;:
<a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/telechargement/dmsetup-udev.pdf"
target="_top">dmsetup-udev.pdf</a>.</p>
<p>$Id: dmsetup-udev.xml 1419 2009-09-19 13:00:41Z latu $</p>
</div>
</div>
</body>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/09/index.html#e2009-09-12T12_17_37.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/09/index.html#e2009-09-12T12_17_37.txt</guid>
<title>Gestionnaire de démarrage Debian Sid</title>
<dc:date>2009-09-12T12:17:37+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Debian, M6300</dc:subject>
<description>
<![CDATA[<div xml:lang="fr" class="article" title=
"Gestionnaire de démarrage Debian Sid" lang="fr">
<div class="titlepage">
<div>
<div>
</div>
<div>
<h3 class="subtitle"><i>Retour vers le futur avec LILO</i></h3>
</div>
<div>
<div class="abstract" title="Résumé">
<p><span class="inlinemediaobject"><img src="http://www.linux-france.org/~platu/weblog/images/thumb39.png" align="right"
width="120" /></span> La révision système de mon transportable en cette
période de rentrée m'a amené à redécouvrir les vertus du gestionnaire de
démarrage <em class="citetitle">LILO</em>. Bien sûr, mes choix en matière de
système de fichiers et de gestionnaire de volumes logiques (<acronym class=
"acronym">LVM2</acronym>) peuvent paraître «singuliers». Si j'ai rencontré
quelques difficultés, je ne peux m'en prendre qu'à moi-même&nbsp;; surtout en
utilisant la branche <em class="wordasword">unstable</em> de la distribution
<em class="citetitle">Debian</em>. Voici un résumé des manipulations possibles
pour récupérer un fonctionnement correct de gestionnaire de démarrage à partir
d'une situation catastrophique&nbsp;: une machine inutilisable sur laquelle
aucun système d'exploitation ne peut être lancé à partir du disque dur.</p>
</div>
</div>
</div>
</div>
<div class="section" title="Choix d'un gestionnaire de démarrage">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lilo-revival.choice" name=
"lilo-revival.choice"></a>Choix d'un gestionnaire de démarrage</h2>
</div>
</div>
</div>
<p>Les deux logiciels phares de gestion du lancement de système d'exploitation
qui dominent le monde GNU/Linux sont&nbsp;: <em class="citetitle">LILO</em> et
<em class="citetitle">GRUB</em>.</p>
<p><em class="citetitle">LILO</em> ou <a class="ulink" href=
"http://fr.wikipedia.org/wiki/Linux_loader" target="_top"><em class=
"wordasword">LInux LOader</em></a> est la solution historique avec laquelle
j'ai débuté il y a quelques années déjà. À l'usage, le fait de devoir passer
par une écriture du <a class="ulink" href=
"http://fr.wikipedia.org/wiki/Master_boot_record" target="_top"><em class=
"wordasword">Master boot record</em></a> (<acronym class=
"acronym">MBR</acronym>) à chaque modification du ou des noyaux utilisables
sur un système et le manque d'options lors de l'initialisation de la machine
ont conduit à l'émergence d'un nouveau gestionnaire de démarrage. De plus, il
semble que le développement de <em class="citetitle">LILO</em> ait été
abandonné.</p>
<p><em class="citetitle">GRUB</em> ou <a class="ulink" href=
"http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader" target=
"_top"><em class="wordasword">GRand Unified Bootloader</em></a> est la
solution qui a gagné les faveurs de la majorité des distributions GNU/Linux.
Relativement au gestionnaire historique, il est possible de modifier les
paramètres de démarrage du système d'exploitation lors de l'initialisation de
la machine. De plus, le système de menus permet d'offrir plus de choix aux
utilisateurs novices.</p>
<p>Si l'on doit retenir une différence de conception importante entre les deux
gestionnaires d'amorce, c'est la capacité à accéder à un système de fichiers.
En effet, <em class="citetitle">LILO</em> utilise les fonctions du <a class=
"ulink" href="http://fr.wikipedia.org/wiki/Basic_Input_Output_System" target=
"_top"><acronym class="acronym">BIOS</acronym></a> pour accéder directement au
contenu du disque dur sans se préoccuper du système de fichiers utilisé. À
l'inverse, <em class="citetitle">GRUB</em> a besoin de reconnaître un système
de fichiers <a class="ulink" href="http://fr.wikipedia.org/wiki/Ext2" target=
"_top"><em class="citetitle">ext2</em></a> pour accéder à l'ensemble de ses
fonctions et menus.</p>
<p>Suivant les cas de figure, cet accès à un système de fichiers peut être un
avantage ou un gros inconvénient comme on le voit ci-dessous.</p>
</div>
<div class="section" title="Contexte Debian Sid">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lilo-revival.debian-grub" name=
"lilo-revival.debian-grub"></a>Contexte Debian Sid</h2>
</div>
</div>
</div>
<p>Même si les fonctionnalités offertes par <em class="citetitle">GRUB</em>
sont très séduisantes, le développement de cet outil connaît quelques
soubresauts assez gênants&nbsp;: Le billet <a class="ulink" href=
"http://blog.zugschlus.de/archives/826-The-grub-drama.html" target=
"_top"><em class="citetitle">The grub drama</em></a> publié sur <a class=
"ulink" href="http://planet.debian.net/" target="_top"><em class=
"citetitle">Planet Debian</em></a> au printemps dernier résume assez bien les
griefs nés entre utilisateurs et développeurs suite à la décision d'initier un
nouveau développement.</p>
<p>Ensuite, les soucis récents sont venus des contradictions entre le
développements des règles <a class="ulink" href=
"http://en.wikipedia.org/wiki/Udev" target="_top"><em class=
"citetitle">udev</em></a> de création des entrées de l'arborescence des
périphériques et d'autres outils&nbsp;; dont <em class=
"citetitle">GRUB</em>.</p>
<p>L'histoire commence avec une énième mise à jour du noyau et un «pic de
stress» en constatant que la liste des noyaux disponibles donnée par la
commande <span class="command"><strong>update-grub&nbsp;-v</strong></span> est
<span class="emphasis"><em>vide</em></span>. La commande ci-dessus n'étant
qu'un script <em class="wordasword">shell</em>, une nouvelle exécution en mode
<em class="wordasword">debug</em> via la directive <span class=
"command"><strong>sh&nbsp;-x</strong></span> montre que c'est le programme
<span class="command"><strong>grub-probe</strong></span> qui échoue
lamentablement dans la reconnaissance du système de fichiers&nbsp;!</p>
<p>Une fois de plus, <em class="citetitle">Google</em> n'est pas mon ami et la
quasi totalité des liens renvoyés correspondent à des listes de disques
érronées dans le fichier <code class="filename">device.map</code>. Sur mon
transporable, il n'y a qu'un disque <acronym class="acronym">SATA</acronym>
référencé <code class="filename">/dev/sda</code>&nbsp;; donc peu de chance de
se tromper de ce côté là.</p>
<p>Voici une copie du fichier <code class="filename">/etc/fstab</code> qui
montre une utilisation du gestionnaire de volumes logiques <acronym class=
"acronym">LVM2</acronym>.</p>
<pre class="screen" width="80">
$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# &lt;file system&gt; &lt;mount point&gt;   &lt;type&gt;  &lt;options&gt;       &lt;dump&gt;  &lt;pass&gt;
proc            /proc           proc    defaults        0       0
/dev/mapper/Amethyste-root /               ext4    errors=remount-ro 0       1
/dev/sda1                  /boot           ext3    defaults        0       2
/dev/mapper/Amethyste-home /home           ext4    defaults        0       2
/dev/mapper/Amethyste-tmp  /tmp            ext4    defaults        0       2
/dev/mapper/Amethyste-usr  /usr            ext4    defaults        0       2
/dev/mapper/Amethyste-var  /var            ext4    defaults        0       2
/dev/mapper/Amethyste-swap none            swap    sw              0       0
/dev/hda                   /media/cdrom0   udf,iso9660 user,noauto     0       0
</pre>
<p>Relativement à ces définitions de points de montages, l'exécution de la
commande <span class="command"><strong>mount</strong></span> ne correspond pas
tout à fait. Les entrées du répertoire <code class=
"filename">/dev/mapper</code> ne sont pas utilisées.</p>
<pre class="screen" width="80">
$ mount
/dev/dm-0 on / type ext4 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
/dev/dm-4 on /home type ext4 (rw)
/dev/dm-2 on /tmp type ext4 (rw)
/dev/dm-3 on /usr type ext4 (rw)
/dev/dm-5 on /var type ext4 (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
capifs on /dev/capi type capifs (rw,mode=0666)
</pre>
<p>À ce moment là, je n'ai pas vu le lien entre les points de montages et
<span class="command"><strong>grub-probe</strong></span>. J'ai donc tenté un
redémarrage de la machine. C'est là que le drame s'est produit&nbsp;: plus de
noyau accessible&nbsp;! La machine était inutilisable.</p>
</div>
<div class="section" title="Knoppix 6.0 à la rescousse">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lilo-revival.knoppix" name=
"lilo-revival.knoppix"></a>Knoppix 6.0 à la rescousse</h2>
</div>
</div>
</div>
<p>Dans mon <a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/archives/2009/07/index.html#e2009-07-11T18_28_27.txt"
target="_top">billet précédent sur les joies de la gestion de parc avec
Ghost</a>, j'avais déjà eu à utiliser la version 6.0.0 de <a class="ulink"
href="http://knoppix-fr.org/" target="_top">KNOPPIX</a> pour jouer avec les
propriétés du systèmes de fichiers <em class="citetitle">ext3</em>. Une fois
de plus, ce <em class="wordasword">live-cd</em> a servi à récupérer une
situation calamiteuse.</p>
<p>Une fois la machine initialisée avec <em class="citetitle">KNOPPIX</em>, je
suis logiquement retombé sur le même problème avec <span class=
"command"><strong>grub-probe</strong></span>. Cette commande refusait
obstinément de reconnaître le moindre système de fichiers. Il était bien
possible d'installer <em class="citetitle">GRUB</em>, mais une fois le
<em class="wordasword">Shell</em> lancé, les commandes <span class=
"command"><strong>root DEVICE</strong></span> et <span class=
"command"><strong>setup DEVICE</strong></span> échouaient.</p>
<p>C'est là que l'idée d'utiliser <em class="citetitle">LILO</em> s'est
imposée. Il fallait nécessairement utiliser un gestionnaire d'amorce qui ne
dépende absolument pas d'un accès aux systèmes de fichiers du disque de la
machine.</p>
<p>Là où l'utilisation de <em class="citetitle">KNOPPIX</em> devient
intéressante, c'est que même lorsqu'un outil n'est pas disponible sur le
<acronym class="acronym">CD</acronym> il est toujours possible d'utiliser le
gestionnaire de paquets et d'accéder via le réseau aux dépôts <em class=
"citetitle">Debian</em>. Une fois le câble réseau de la machine branché et une
requête <acronym class="acronym">DHCP</acronym> plus tard, il était possible
d'installer <em class="citetitle">LILO</em>.</p>
<p>Lors de l'initialisation du <acronym class="acronym">CD</acronym>, j'ai
l'habitude de donner les options suivantes&nbsp;:</p>
<pre class="screen" width="80">
<code class="prompt">#</code> knoppix lang=fr 2
</pre>
<p>Une fois que l'accès au réseau est établi, on utilise la gestion de paquets
de façon tout à fait classique&nbsp;:</p>
<pre class="screen" width="80">
<code class="prompt">#</code> apt-get update
<code class="prompt">#</code> apt-get install lilo
</pre></div>
<div class="section" title="Configuration LILO">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lilo-revival.lilo-config" name=
"lilo-revival.lilo-config"></a>Configuration LILO</h2>
</div>
</div>
</div>
<p>La gestion de volume logiques n'est pas activée automatiquement lors de
l'initialisation du <em class="wordasword">live-CD</em>. Il est donc
nécessaire de le faire manuellement.</p>
<pre class="screen" width="80">
<code class="prompt">#</code> modprobe dm-mod
<code class="prompt">#</code> vgchange -a y
<code class="prompt">#</code> lvdisplay -c
File descriptor 7 (/proc/6669/status) leaked on lvdisplay invocation. Parent PID 11242: bash
  /dev/Amethyste/root:Amethyste:3:1:-1:1:1048576:128:-1:0:-1:254:0
  /dev/Amethyste/swap:Amethyste:3:1:-1:2:4194304:512:-1:0:-1:254:1
  /dev/Amethyste/tmp:Amethyste:3:1:-1:1:1048576:128:-1:0:-1:254:2
  /dev/Amethyste/usr:Amethyste:3:1:-1:1:25165824:3072:-1:0:-1:254:3
  /dev/Amethyste/home:Amethyste:3:1:-1:1:125829120:15360:-1:0:-1:254:4
  /dev/Amethyste/var:Amethyste:3:1:-1:1:154787840:18895:-1:0:-1:254:5
</pre>
<p>Une fois que le noyau est au courant de la présence des volumes logiques,
on peut commencer les manipulations sur le gestionnaire d'amorce. On commence
par le montage manuel des partitions ou volumes nécessaires.</p>
<pre class="screen" width="80">
<code class="prompt">#</code> mount /dev/Amethyste/root /mnt
<code class="prompt">#</code> mount /dev/sda1 /mnt/boot
</pre>
<p>La partie la plus facile à traiter est l'écriture du <em class=
"wordasword">Master Boot Record</em>. Cette étape passée, <em class=
"citetitle">GRUB</em> à disparu.</p>
<pre class="screen" width="80">
<code class="prompt">#</code> lilo -M /dev/sda mbr
</pre>
<p>Vient ensuite la phase de configuration à l'aide du fichier <code class=
"filename">/etc/lilo.conf</code>. Fort heureusement, un fichier exemple est
fourni dans la documentation du paquet <em class="citetitle">LILO</em>&nbsp;:
<code class="filename">/usr/share/doc/lilo/examples/conf.sample</code>. Sur la
base de cet exemple, on s'adapte au contexte de la machine.</p>
<pre class="screen" width="80">
<code class="prompt">#</code> cat /mnt/etc/lilo.conf
# /etc/lilo.conf: Sample Debian LILO boot loader configuration.

boot=/dev/sda1
root=/dev/mapper/Amethyste-root
compact
large-memory

# To use the new LILO boot menu, add the following
bitmap=/boot/sid.bmp
bmp-colors=1,,0,2,,0
bmp-table=120p,173p,1,15,17
bmp-timer=254p,432p,1,0,0
install=bmp

# install=menu
map=/boot/map
vga=normal
delay=20
timeout=150
prompt

image=/vmlinuz
        root=/dev/mapper/Amethyste-root
        initrd=/initrd.img
        label=Linux
        read-only

image=/vmlinuz
        root=/dev/mapper/Amethyste-root
        initrd=/initrd.img
        label=Linux_single
        append=" single "
        read-only

image=/vmlinuz.old
        root=/dev/mapper/Amethyste-root
        initrd=/initrd.img.old
        label=Linux_old
        read-only
</pre>
<p>Dernière étape essentielle, il faut appliquer cette configuration à l'aide
d'une nouvelle écriture dans le <em class="wordasword">Master Boot
record</em>.</p>
<pre class="screen" width="80">
<code class="prompt">#</code> lilo -r /mnt/
</pre>
<p>Après réinitialisation de la machine, on dispose à nouveau d'une liste de
noyaux et le système d'exploitation se lance normalement. Une seule
réaction&nbsp;OUF&nbsp;!</p>
</div>
<div class="section" title="Pour conclure">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lilo-revival.conclude" name=
"lilo-revival.conclude"></a>Pour conclure</h2>
</div>
</div>
</div>
<p>Voilà comment échapper à une grosse galère sur la gestion du démarrage d'un
système. Même si <em class="citetitle">LILO</em> n'est plus du tout le
gestionnaire d'amorce en vogue, il peut s'avérer fort utile et le fait qu'il
ne dépende d'aucun accès à un système de fichier est un avantage déterminant
dans certains cas. Il est vraiment dommage que son développement se soit
arrêté.</p>
<p>Dans le prochain billet, je dois traiter le problème de la gestion des
entrées de périphériques <em class="citetitle">LVM2</em> via <em class=
"citetitle">udev</em> ou <em class="citetitle">dmsetup</em>. Tous mes soucis
venaient en fait de là&nbsp;!</p>
<p>Ce document est disponible en version imprimable au format PDF&nbsp;:
<a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/telechargement/lilo-revival.pdf"
target="_top">lilo-revival.pdf</a>.</p>
<p>$Id: lilo-revival.xml 1417 2009-09-12 10:17:12Z latu $</p>
</div>
</div>
</body>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/07/index.html#e2009-07-11T18_28_27.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/07/index.html#e2009-07-11T18_28_27.txt</guid>
<title>Debian Lenny/Stable vs Ghost version 11</title>
<dc:date>2009-07-11T18:28:27+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Enseignement, Debian</dc:subject>
<description>
<![CDATA[<div xml:lang="fr" class="article" title=
"Debian Lenny/Stable vs Ghost version 11" lang="fr">
<div class="titlepage">
<div>
<div>
</div>
<div>
<div class="abstract" title="Résumé">
<p><span class="inlinemediaobject"><img src="http://www.linux-france.org/~platu/weblog/images/thumb46.png" align="right"
width="120" /></span> Le début du mois de juillet est traditionnellement la
saison de refonte des configurations des postes de travaux pratiques. Même si
la gestion de parc n'est pas vraiment mon domaine de prédilection, je suis
intervenu en dépannage sur l'utilisation de <span class="trademark">Symantec
Ghost</span>™ version 11 pour déployer des images de postes dits <em class=
"wordasword">multiboot</em>&nbsp;: <span class="trademark">Windows XP</span>™,
<span class="trademark">DOS</span>™ et Debian GNU/Linux Lenny/stable. Une fois
de plus, le support GNU/Linux par les logiciels propriétaires laisse à
désirer.</p>
</div>
</div>
</div>
</div>
<div class="section" title="Symantec Ghost v11 et ext3">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lenny-ghost.ghost" name=
"lenny-ghost.ghost"></a>Symantec Ghost v11 et ext3</h2>
</div>
</div>
</div>
<p>La documentation officielle du produit annonce un support du système de
fichiers <code class="systemitem">ext3</code> dans la gestion des images. Ce
support apparaît aujourd'hui comme complètement dépassé et la restauration
d'un système de fichiers issu de l'installation classique de la distribution
Debian GNU/Linux stable échoue systématiquement.</p>
<p>Si le système de fichiers <code class="systemitem">ext3</code> avait été
publié récemment ou si ses spécifications n'étaient pas ouvertes, cette
situation serait «prévisible». Or, il n'en est rien&nbsp;; <code class=
"systemitem">ext3</code> est devenu le système de fichiers par défaut des
distributions GNU/Linux il y a plusieurs années et ses évolutions sont
parfaitement connues.</p>
<p>On peut donc s'étonner légitimement en constatant qu'un logiciel de gestion
de parc qui se veut professionnel n'ait pas intégré la moindre évolution.
Comment se fait-il que l'on puisse procéder à un archivage à partir d'un jeu
de paramètres figé sans même relever, à l'aide d'une simple lecture, l'état du
système de fichiers courant&nbsp;?</p>
<p>La commande <span class="command"><strong>tune2fs</strong></span> nous
renseigne simplement sur les caractéristiques du système de fichiers. Voici un
exemple extrait d'une installation récente.</p>
<pre class="screen" width="80">
# cat /etc/issue
Debian GNU/Linux 5.0 \n \l

# tune2fs -l /dev/mapper/vm--debian-usr | egrep 'features|Inode size'
Filesystem features:      has_journal ext_attr <span class=
"emphasis"><em>resize_inode</em></span> dir_index filetype needs_recovery sparse_super large_file
Inode size:               <span class="emphasis"><em>256</em></span>
</pre>
<p>L'extrait ci-dessus illustre les deux principales caractéristiques non
supportées par <span class="trademark">Symantec Ghost</span>™ en version 11.
Pour pouvoir archiver une installation il est nécessaire de <span class=
"emphasis"><em>dégrader le système de fichiers</em></span> <code class=
"systemitem">ext3</code>.</p>
</div>
<div class="section" title="Formatage ext3 compatible Ghost v11">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lenny-ghost.degraded-ext3" name=
"lenny-ghost.degraded-ext3"></a>Formatage ext3 compatible Ghost v11</h2>
</div>
</div>
</div>
<p>Après de multiples itérations d'archivage/restauration d'une image
<span class="trademark">Symantec Ghost</span>™, les deux paramètres sensibles
qui ressortent sont les suivants.</p>
<div class="variablelist">
<dl>
<dt><span class="term"><em class="wordasword">Inode size</em>,</span>
<span class="term">Taille inode</span></dt>
<dd>
<p><span class="trademark">Symantec Ghost</span>™ suppose que la taille
d'inode est figée à 128 octets. La valeur par défaut de ce paramètre est
maintenant de 256 octets. Lors du formatage, l'option <code class=
"option">-I</code> permet de fixer cette valeur manuellement. Il faut
consulter les pages de manuels de l'outil <span class=
"command"><strong>mkfs.ext3</strong></span> pour obtenir les informations
détaillées sur cette option.</p>
<p>La difficulté posée par ce paramètre provient du fait qu'il n’est pas
possible de changer cette valeur après la création du système de fichiers. Il
est donc nécessaire de procéder à un reformatage de la partition à
archiver.</p>
</dd>
<dt><span class="term">resize_inode</span></dt>
<dd>
<p>Cette propriété a pour but de réserver de la place pour permettre à la
table des descripteurs de groupe de blocs de grossir plus tard. C’est utile
pour permettre le changement de taille à chaud avec <span class=
"command"><strong>resize2fs</strong></span>. Les utilisateurs du gestionnaire
de volume logique <acronym class="acronym">LVM</acronym> sont <a class="ulink"
href=
"http://www.linux-france.org/~platu/weblog/archives/2008/10/07/index.html#e2008-10-07T12_06_27.txt"
target="_top">très attachésà cette propriété</a>.</p>
<p>Là encore, la propriété n'est pas supportée par le logiciel propriétaire et
le système de fichiers restauré est inexploitable.</p>
</dd>
</dl>
</div>
<p>Voici donc un exemple de commande de formatage à utiliser pour obtenir un
système de fichiers <code class="systemitem">ext3</code> dégradé mais
permettant de créer des archives utilisables avec <span class=
"trademark">Symantec Ghost</span>™ en version 11.</p>
<pre class="screen" width="80">
# mkfs.ext3 -I 128 -O^resize_inode,^dir_index /dev/sda3
</pre>
<p>Dans cet exemple, <code class="option">/dev/sda3</code> désigne la
partition sur laquelle le système GNU/Linux doit être installé.</p>
</div>
<div class="section" title="Processus d'archivage">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lenny-ghost.backup" name=
"lenny-ghost.backup"></a>Processus d'archivage</h2>
</div>
</div>
</div>
<p>Comme il n'est logiquement pas possible de dégrader le système de fichiers
lors de l'installation du système, on doit passer par un transfert
intermédiaire lors de la création du poste maître.</p>
<div class="orderedlist">
<ol class="orderedlist" type="1">
<li class="listitem">
<p>On commence par procéder à une installation du système GNU/Linux selon les
besoins du poste de travaux pratiques. Dans la plupart des cas, on peut se
contenter d'une installation sur une partition unique sachant que
l'installation doit être reconstruite en cas d'évolution.</p>
</li>
<li class="listitem">
<p>On transfère le système de fichiers du système après installation vers une
autre machine de façon à pouvoir le récupérer après reformatage de la
partition. De façon classique, on peut utiliser <span class=
"command"><strong>rsync</strong></span> et <span class=
"command"><strong>ssh</strong></span> pour faire cette opération. Voici un
exemple d'instruction de copie d'une arborescence système à partir du compte
super-utilisateur pour préserver les identités sur les objets de
l'arborescence du système de fichiers.</p>
<pre class="screen" width="80">
# rsync --exclude /proc \
        --exclude /sys \
        --exclude /tmp \
        --exclude /var/tmp \
        -avz / root@otherhost:/var/backup-master/
</pre></li>
<li class="listitem">
<p>On réinitialise le poste et on lance le système sur un <em class=
"wordasword">live CD</em>. Le système <a class="ulink" href=
"http://knoppix-fr.org/" target="_top">KNOPPIX</a> convient parfaitement pour
ce genre d'opération&nbsp;; il contient tous les outils nécessaires à ces
manipulations. Une fois le système initialisé, on peut passer au formatage du
système de fichiers dégradé.</p>
<pre class="screen" width="80">
# mkfs.ext3 -I 128 -O^resize_inode,^dir_index /dev/sda3
</pre>
<p>Toujours à partir du système <em class="wordasword">live CD</em>, on
récupère l'arborescence du système de fichiers sauvegardé lors de l'étape
précédente.</p>
<pre class="screen" width="80">
# mount /dev/sda3 /mnt

# rsync -avz root@otherhost:/var/backup-master/ /mnt/
&lt;snipped/&gt;

# mkdir /mnt/proc /mnt/sys /mnt/tmp /mnt/var/tmp

# chmod 1777 /mnt/tmp /mnt/var/tmp
</pre></li>
<li class="listitem">
<p>Après redémarrage du poste, on retrouve une configuration <em class=
"wordasword">multiboot</em> exploitable avec <span class="trademark">Symantec
Ghost</span>™.</p>
</li>
</ol>
</div>
</div>
<div class="section" title="Pour conclure">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="lenny-ghost.conclude" name=
"lenny-ghost.conclude"></a>Pour conclure</h2>
</div>
</div>
</div>
<p>Voilà comment échapper à un piège supplémentaire posé par un logiciel
propriétaire&nbsp;! Bien évidemment, si cette «recette» a le mérite de
fonctionner, il doit certainement être possible de faire mieux. N'hésitez pas
à me contacter si vous avez des propositions ;)).</p>
<p>Ce document est disponible en version imprimable au format PDF&nbsp;:
<a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/telechargement/lenny-ghost.pdf"
target="_top">lenny-ghost.pdf</a>.</p>
<p>$Id: lenny-ghost.xml 1410 2009-07-11 16:27:57Z latu $</p>
</div>
</div>
</body>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/06/index.html#e2009-06-19T17_51_50.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/06/index.html#e2009-06-19T17_51_50.txt</guid>
<title>Installation Cisco SDM et formation CCNA Exploration</title>
<dc:date>2009-06-19T17:51:50+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Enseignement, Networking Academy, Cisco</dc:subject>
<description>
<![CDATA[<div xml:lang="fr" class="article" title=
"Installation Cisco SDM et formation CCNA Exploration" lang="fr">
<div class="titlepage">
<div>
<div>
</div>
<div>
<div class="abstract" title="Résumé">
<p><span class="inlinemediaobject"><img src="http://www.linux-france.org/~platu/weblog/images/thumb1.png" align="right"
width="120" /></span> Autant le dire d'emblée, cet article pourrait très bien
s'intituler «Chronique d'une abominable galère&nbsp;!». En effet, le logiciel
<em class="wordasword">Security Device Manager</em> est très difficile à
exploiter dans des conditions nominales avec une infrastructure de travaux
pratiques usuelle. Après avoir consacré une grande quantité d'énergie à
essayer d'installer et d'utiliser cet outil dans des contextes très divers et
variés, il apparaît qu'il n'est utilisable que dans des conditions pour le
moins «singulières».</p>
<p>Chère lectrice, cher lecteur, qui souriez ironiquement à la lecture de la
phrase précédente, nous allons évacuer rapidement le poncif habituel sur le
thème&nbsp;: «encore un utilisateur Linux qui se plaint&nbsp;; il l'a bien
cherché&nbsp;!». Dans ce cas précis, la principale objection tient dans le
paradoxe suivant&nbsp;: «pour que <acronym class="acronym">SDM</acronym>
fonctionne sur un système GNU/Linux, encore faudrait-il qu'il fonctionne
correctement sur <span class="trademark">Windows XP</span>™&nbsp;!</p>
<p>D'après la <a class="ulink" href=
"http://www.cisco.com/en/US/prod/collateral/routers/ps5318/product_data_sheet0900aecd800fd118.html"
target="_top">documentation officielle</a>, <acronym class=
"acronym">SDM</acronym> peut être installé soit sur un routeur, soit sur un
PC, ou bien encore sur les deux. La lecture des mille et un messages postés
sur les forums ne nous avance guère. L'expérience montre que ce logiciel n'est
exploitable que s'il est installé directement sur le routeur. C'est ce mode
d'installation qui est décrit dans la première partie de l'article.</p>
<p>Côté utilisation, le tableau n'est pas brillant non plus. Il faut disposer
d'un machine Java en retard d'au moins 10 révisions et corrections de bugs et
d'un navigateur 32 bits. En conséquence, il suffit de disposer d'un poste de
travail à jour sur le plan sécurité pour que l'accès à <acronym class=
"acronym">SDM</acronym> soit impossible. La seconde partie de l'article est
consacrée à l'installation et à la configuration d'une version 32 bits de
<a class="ulink" href="http://www.mozilla-europe.org/fr/firefox/" target=
"_top">Firefox</a> associée à une <a class="ulink" href=
"http://java.sun.com/products/archive/" target="_top">machine virtuelle
Java</a> extraite des archives. Ces opérations sont réalisées sans l'aide d'un
gestionnaire de paquets puisqu'un <a class="ulink" href=
"http://packages.qa.debian.org/s/sun-java6.html" target="_top">processus
d'assurance qualité correct</a> ne permet pas la diffusion de logiciels
contenant des vulnérabilités connues et corrigées (CVE-2006-2426).</p>
</div>
</div>
</div>
</div>
<div class="section" title="Installation SDM sur routeur 1841">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="sdm-ccna.router-install" name=
"sdm-ccna.router-install"></a>Installation SDM sur routeur 1841</h2>
</div>
</div>
</div>
<p>Les routeurs <a class="ulink" href=
"http://www.cisco.com/en/US/products/ps5875/" target="_top">1841</a> fournis
dans le <em class="wordasword">bundle</em> sont d'excellentes machines qui
permettent de faire les manipulations des curriculas <acronym class=
"acronym">CCNA</acronym> et <acronym class="acronym">CCNP</acronym>
<acronym class="acronym">BSCI</acronym> dans des conditions très
confortables.</p>
<p>Sur ces modèles, le système d'exploitation (<acronym class=
"acronym">IOS</acronym>) est stocké sur une mémoire de type <a class="ulink"
href="http://fr.wikipedia.org/wiki/CompactFlash" target=
"_top">CompactFlash</a>. Dans le contexte de cet article, la capacité de
stockage est limitée à 32Mo, ce qui ne permet pas de faire cohabiter le
système d'exploitation et <acronym class="acronym">SDM</acronym> sur la même
carte.</p>
<p>Heureusement, il existe une astuce assez répandue qui consiste à
télécharger le fichier image du système d'exploitation à partir d'un serveur
<acronym class="acronym">TFTP</acronym> lors de l'initialisation du routeur.
De cette façon, on économise l'espace de stockage du système et on peut
implanter les fichiers nécessaires au fonctionnement de <acronym class=
"acronym">SDM</acronym> à la place.</p>
<p>Pour la mise en œuvre d'un serveur <acronym class="acronym">TFTP</acronym>,
il est possible de consulter la section correspondante de l'article <a class=
"ulink" href=
"http://www.linux-france.org/prj/inetdoc/articles/devmgmt/devmgmt.tftp.html"
target="_top">Gestion des équipements réseau avec GNU/Linux</a>. Ici, on
considère que le service <acronym class="acronym">TFTP</acronym> est
disponible.</p>
<p>Du point de vue de l'organisation des travaux pratiques, ce mode de
fonctionnement impose une connexion particulière lors de la mise sous tension
des routeurs en début de séance. Il faut que le port FastEthernet fa0/0 soit
raccordé à un commutateur qui permette de joindre le service <acronym class=
"acronym">TFTP</acronym> de la salle. Dans le cas de <a class="ulink" href=
"http://www.linux-france.org/prj/inetdoc/cours/archi.tp/archi.tp.brassage.html"
target="_top">l'architecture STRI</a>, la passerelle de la salle joue
justement ce rôle.i</p>
<p>Une fois la phase d'initialisation du système d'exploitation achevée, il
est possible de rebrasser et reconfigurer les interfaces réseau suivant les
besoins des questions de travaux pratiques.</p>
<p>Autre contrainte, en fin de séance il est nécessaire de restaurer une
configuration minimale contenant les instructions nécessaires au rechargement
du système via <acronym class="acronym">TFTP</acronym> lors de la remise sous
tension suivante du routeur.</p>
<p>Voici les opérations de préparation d'un routeur 1841 en fonction des
éléments énoncés.</p>
<p>Dans l'exemple qui suit, l'adresse <acronym class="acronym">IP</acronym> du
routeur est <code class="systemitem">192.168.1.3</code> et celle du serveur
<acronym class="acronym">TFTP</acronym> est <code class=
"systemitem">192.168.1.1</code>.</p>
<div class="variablelist">
<dl>
<dt><span class="term">Paramètres ROMMON</span></dt>
<dd>
<p>Pour que le routeur puisse accéder au serveur <acronym class=
"acronym">TFTP</acronym> avant l'initialisation de son système d'exploitation
complet, il doit utiliser une image «minimum» baptisée <acronym class=
"acronym">ROMMON</acronym> lui permettant de communiquer avec ce serveur. Les
paramètres de communication réseau doivent être stockés en <acronym class=
"acronym">NVRAM</acronym> pour être réutilisés lors des remise sous tension
suivantes.</p>
<pre class="screen" width="80">
rommon 10 &gt; FE_PORT=0
rommon 11 &gt; FE_SPEED_MODE=3
rommon 12 &gt; IP_ADDRESS=192.168.1.3
rommon 13 &gt; IP_SUBNET_MASK=255.255.255.0
rommon 14 &gt; DEFAULT_GATEWAY=192.168.1.1
rommon 15 &gt; TFTP_SERVER=192.168.1.1
rommon 16 &gt; TFTP_FILE=c1841-ipbasek9-mz.124-24.T.bin
rommon 17 &gt; sync
rommon 18 &gt;
</pre>
<p>On accède au mode <acronym class="acronym">ROMMON</acronym> en utilisant
une séquence de <em class="wordasword">break</em>. On tape <span class=
"keycap"><strong>ALT+F</strong></span> dans <span class=
"application">minicom</span>.</p>
</dd>
<dt><span class="term">Test téléchargement <acronym class=
"acronym">TFTP</acronym></span></dt>
<dd>
<p>Une fois les paramètres mémorisés, on effectue un test de téléchargement du
système d'exploitation et d'initialisation du système à l'aide de la commande
<acronym class="acronym">ROMMON</acronym> <span class=
"command"><strong>tftpdnld</strong></span>.</p>
<pre class="screen" width="80">
rommon 20 &gt; tftpdnld -r

          IP_ADDRESS: 192.168.1.3
      IP_SUBNET_MASK: 255.255.255.0
     DEFAULT_GATEWAY: 192.168.1.1
         TFTP_SERVER: 192.168.1.1
           TFTP_FILE: c1841-ipbasek9-mz.124-24.T.bin
        TFTP_MACADDR: 00:14:f2:75:4b:26
        TFTP_VERBOSE: Progress
    TFTP_RETRY_COUNT: 18
        TFTP_TIMEOUT: 7200
       TFTP_CHECKSUM: Yes
             FE_PORT: 0
       FE_SPEED_MODE: 100MB/FD
......
Receiving c1841-ipbasek9-mz.124-24.T.bin from 192.168.1.1 !!!!!!!
&lt;snipped/&gt;
</pre></dd>
<dt><span class="term">Configuration minimale</span></dt>
<dd>
<p>On applique ici les commandes de configuration nécessaires à
l'initialisation du système via <acronym class="acronym">TFTP</acronym>.</p>
<pre class="screen" width="80">
Router&gt;en
Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#no boot system
Router(config)#boot system tftp://192.168.1.1/c1841-ipbasek9-mz.124-24.T.bin
Router(config)#config-register 0x010F
Router(config)#^Z
Router#
Router#reload

System configuration has been modified. Save? [yes/no]: yes
Building configuration...
[OK]
Proceed with reload? [confirm]
</pre>
<p>Au redémarrage, le routeur doit recharger son image système à partir du
réseau avant de s'initialiser avec cette même image.</p>
</dd>
</dl>
</div>
<p>Dans certains cas, la manipulation ci-dessus ne suffit pas et une image
système doit nécessairement être présente sur la mémoire flash avant le
téléchargement réseau. Il s'agit probablement d'un problème de gestionnaire de
démarrage (<em class="wordasword">boot loader</em>) qui se bloque sur
l'absence d'image système en mémoire flash. Il est donc nécessaire de placer
une image système la plus petite possible de façon à répondre à l'objectif
initial&nbsp;: installer <acronym class="acronym">SDM</acronym>.</p>
<p>Voici un extrait du processus d'initialisation en trois étapes.</p>
<pre class="screen" width="80">
Router#reload
Proceed with reload? [confirm]

*Jun 16 07:09:22.619: %SYS-5-RELOAD: Reload requested  by console. Reload Reason: Reload Command.
System Bootstrap, Version 12.4(13r)T5, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 2007 by cisco Systems, Inc.
PLD version 0x10
GIO ASIC version 0x127
c1841 platform with 131072 Kbytes of main memory
Main memory is configured to 64 bit mode with parity disabled


Upgrade ROMMON initialized
program load complete, entry point: 0x8000f000, size: 0xcb80
program load complete, entry point: 0x8000f000, size: 0xcb80

program load complete, entry point: 0x8000f000, size: 0xc7d244
Self decompressing the image : ######&lt;snipped/&gt;################# [OK]

Smart Init is enabled
smart init is sizing iomem
ID            MEMORY_REQ         TYPE
Unable to read eeprom
                0X003AA110 public buffer pools
                0X00211000 public particle pools
0X0013          0X00035000 Card in slot 1

If any of the above Memory Requirements are
"UNKNOWN", you may be using an unsupported
configuration or there is a software problem and
system operation may be compromised.

Allocating additional 8246951 bytes to IO Memory.
PMem allocated: 117440512 bytes; IOMem allocated: 16777216 bytes

%Error opening tftp://192.168.1.1/c1841-ipbasek9-mz.124-24.T.bin (Timed out)
Retrying...

Loading c1841-ipbasek9-mz.124-24.T.bin from 192.168.1.1 (via FastEthernet0/0): !!
&lt;snipped/&gt;!!!!!!!!!!!!!!!!!!!!!!!!!
[OK - 27542552 bytes]
program load complete, entry point: 0x8000f000, size: 0x1a44278
Self decompressing the image : ######&lt;snipped/&gt;################# [OK]
</pre>
<div class="variablelist">
<dl>
<dt><span class="term">Validation de l'initialisation système via
<acronym class="acronym">TFTP</acronym></span></dt>
<dd>
<p>La commande rituelle <span class="command"><strong>show
version</strong></span>, doit permettre de retrouver la version de
l'<acronym class="acronym">IOS</acronym> en cours d'exécution ainsi que son
origine.</p>
<pre class="screen" width="80">
Router#sh ver
Cisco IOS Software, 1841 Software (C1841-IPBASEK9-M), Version 12.4(24)T, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2009 by Cisco Systems, Inc.
Compiled Wed 25-Feb-09 16:11 by prod_rel_team

ROM: System Bootstrap, Version 12.4(13r)T5, RELEASE SOFTWARE (fc1)
ROM: Cisco IOS Software, 1841 Software (C1841-IPBASE-M), Version 12.3(11)YZ2, RELEASE SOFTWARE (fc2)

Router uptime is 59 minutes
System returned to ROM by reload at 07:09:22 UTC Tue Jun 16 2009
<span class=
"emphasis"><em>System image file is "tftp://192.168.1.1/c1841-ipbasek9-mz.124-24.T.bin"</em></span>
</pre></dd>
<dt><span class="term">Copie des fichiers <acronym class=
"acronym">SDM</acronym> en mémoire flash</span></dt>
<dd>
<p>On utilise à nouveau le service <acronym class="acronym">TFTP</acronym>
pour transférer les fichiers nécessaires au fonctionnement de <acronym class=
"acronym">SDM</acronym>.</p>
<pre class="screen" width="80">
Router#copy tftp://192.168.1.1/common.tar flash:
Destination filename [common.tar]?
Accessing tftp://192.168.1.1/common.tar...
Loading common.tar from 192.168.1.1 (via FastEthernet0/0): !!!!!!
[OK - 1505280 bytes]
&lt;snipped&gt;
</pre>
<p>Une fois que les transferts sont terminés, on obtient la liste des fichiers
suivants en mémoire flash.</p>
<pre class="screen" width="80">
Router#sh flash:
-#- --length-- -----date/time------ path
1      1505280 Jun 16 2009 07:05:40 common.tar
2       512000 Jun 16 2009 07:05:56 dg_sdm.tar
3       931840 Jun 16 2009 07:06:14 es.tar
4         1038 Jun 16 2009 07:06:22 home.shtml
5       112640 Jun 16 2009 07:06:34 home.tar
6      6389760 Jun 16 2009 07:07:10 sdm.tar
7     13095908 Jun 16 2009 07:08:10 c1841-ipbase-mz.123-11.YZ2.bin

9240576 bytes available (22560768 bytes used)
</pre></dd>
</dl>
</div>
<p>Le routeur est maintenant prêt. Il reste à traiter le volet interface
utilisateur sur le poste de travail.</p>
</div>
<div class="section" title="Configuration du poste de travail">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="sdm-ccna.user-install" name=
"sdm-ccna.user-install"></a>Configuration du poste de travail</h2>
</div>
</div>
</div>
<p>La principale difficulté rencontrée lors de l'utilisation de
<acronym class="acronym">SDM</acronym> vient de son intégration sur le poste
de travail. Côté routeur, <span class="trademark">Cisco</span>™ a une «bonne
maîtrise du système». Dès que l'on sort du châssis de l'équipement réseau,
c'est une autre affaire.</p>
<p>Tout comme dans la section précédente, on a recours à une astuce pour
utiliser un navigateur 32 bits et une machine virtuelle Java ancienne. Les
opérations présentées ci-après sont effectuées sur un poste de travail
installé et configuré avec une distribution <em class=
"citetitle">Debian&nbsp;GNU/Linux AMD64</em>. Normalement, n'importe quelle
installation de distribution doit faire l'affaire dans la mesure où la
configuration mise en œuvre ne dépend pas du gestionnaire de paquets.</p>
<p>Au risque de paraître «lourd», il faut rappeler que ce qui suit n'est pas
du tout conforme à une bonne pratique d'administration système qui veut que le
gestionnaire de paquets ne propose que des paquets contenant les derniers
correctifs de sécurité.</p>
<div class="variablelist">
<dl>
<dt><span class="term">Installation Firefox 32 bits dans l'arborescence
utilisateur</span></dt>
<dd>
<p>On commence par créer l'arborescence d'installation. Dans cet exemple, le
répertoire <code class="filename">~/cna/sdm</code>.</p>
<pre class="screen" width="80">
:~$ mkdir -p ~/cna/sdm
</pre>
<p>Dans ce répertoire, on télécharge la version Linux 32 bits de <span class=
"application">Firefox</span> à partir de l'adresse&nbsp;: <a class="ulink"
href="http://www.mozilla-europe.org/fr/firefox/" target=
"_top">http://www.mozilla-europe.org/fr/firefox/</a>. On extrait ensuite
l'arborescence de l'archive.</p>
<pre class="screen" width="80">
:~/cna/sdm$ ls
firefox-3.0.11.tar.bz2
:~/cna/sdm$ tar xf firefox-3.0.11.tar.bz2
:~/cna/sdm$ ls
firefox  firefox-3.0.11.tar.bz2
</pre>
<p>Avant de lancer l'exécution de ce navigateur, il faut contrôler
l'installation des paquets de bibliothèques 32 bits fournies par la
distribution.</p>
<pre class="screen" width="80">
:~/cna/sdm$ dpkg -l ia32* | grep ^ii
ii  ia32-libs            2.7                ia32 shared libraries for use on amd64 and ia64 systems
<span class=
"emphasis"><em>ii  ia32-libs-gtk        2.7                GTK+ ia32 shared libraries</em></span>
ii  ia32-libs-xulrunner  1.8.1.3-0.2        xulrunner ia32 shared libraries

:~/cna/sdm$ dpkg -l lib32* | grep ^ii
ii  lib32asound2         1.0.20-2           shared library for ALSA applications (32 bit)
ii  lib32gcc1            1:4.4.0-6          GCC support library (32 bit Version)
ii  lib32ncurses5        5.7+20090523-1     shared libraries for terminal handling (32-bit)
<span class=
"emphasis"><em>ii  lib32nss-mdns        0.10-3             NSS module for Multicast DNS name resolution</em></span>
ii  lib32stdc++6         4.4.0-6            The GNU Standard C++ Library v3 (32 bit Version)
ii  lib32z1              1:1.2.3.3.dfsg-13  compression library - 32 bit runtime
</pre>
<p>Les bibliothèques 32 bits étant présentes sur le système, on peut lancer le
navigateur et contrôler l'état des <em class="wordasword">plugins</em>
installés.</p>
<pre class="screen" width="80">
:~/cna/sdm/firefox/firefox
</pre>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="390">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-firefox32-nude.png" width="372.047244094489"
alt="Copie d'écran - Firefox 32 bits sans plugin" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-ferefx32-nude.png" target=
"_top">Firefox 32 bits sans plugin</a></p>
</div>
</div>
</dd>
<dt><span class="term">Installation Machine Virtuelle Java JRE 6u4</span></dt>
<dd>
<p>Dans la même arborescence d'installation, on télécharge la machine
virtuelle Java à partir de l'adresse du site d'archives&nbsp;: <a class=
"ulink" href="http://java.sun.com/products/archive/" target=
"_top">http://java.sun.com/products/archive/</a>. Si on se réfère à la
<a class="ulink" href=
"http://www.cisco.com/en/US/prod/collateral/routers/ps5318/product_data_sheet0900aecd800fd118.html"
target="_top">documentation officielle</a>, c'est le paquet baptisé
<acronym class="acronym">JRE 6u4</acronym> qu'il faut installer. On
sélectionne ensuite l'archive auto-extractible.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="390">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-jre6u4-download.png" width="372.047244094489"
alt="Copie d'écran - Choix de l'archive JRE 6u4" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-jre6u4-download.png" target=
"_top">Choix de l'archive JRE 6u4</a></p>
</div>
</div>
<p>Une fois l'archive présente dans le répertoire <code class=
"filename">~/cna/sdm</code>, on procède de la même façon qeu pour le
navigateur. On extrait l'arborescence et on met en place le lien symbolique
d'accès au <em class="wordasword">plugin</em> Java.</p>
<pre class="screen" width="80">
:~/cna/sdm$ sh ./jre-6u4-linux-i586.bin
:~/cna/sdm$ ls
firefox  firefox-3.0.11.tar.bz2  jre1.6.0_04  jre-6u4-linux-i586.bin
:~/cna/sdm$ cd firefox/plugins/
:~/cna/sdm/firefox/plugins$ ln -s ../../jre1.6.0_04/plugin/i386/ns7/libjavaplugin_oji.so
:~/cna/sdm/firefox/plugins$ cd ~/cna/sdm
:~/cna/sdm$ firefox/firefox
</pre>
<p>Il ne reste plus qu'à valider l'installation du <em class=
"wordasword">plugin</em> Java et sa version.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="390">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-jre6u4-plugin.png" width="372.047244094489" alt=
"Copie d'écran - Validation plugin JRE 6u4" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-jre6u4-plugin.png" target=
"_top">Validation plugin JRE 6u4</a></p>
</div>
</div>
<p>L'installation du navigateur est maintenant complète et il est possible de
placer un raccourci sur le bureau de son gestionnaire graphique favori.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="390">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-sdm-link.png" width="372.047244094489" alt=
"Copie d'écran - Copie d'écran et intégration bureau" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-sdm-link.png" target="_top">Copie
d'écran et intégration bureau</a></p>
</div>
</div>
</dd>
</dl>
</div>
<p>Une fois la validation terminée, il est possible de constituer une archive
de sauvegarde de cette configuration de navigation dans l'arborescence
utilisateur.</p>
<pre class="screen" width="80">
:~/cna$ tar cjf sdm-firefox.tar.bz2 sdm/
:~/cna$ ls -sh sdm-*
66M sdm-firefox.tar.bz2
</pre>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="390">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-sdm-shot1.png" width="372.047244094489" alt=
"Copie d'écran - Copie d'écran SDM" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/sdm-ccna-sdm-shot1.png" target="_top">Copie
d'écran SDM</a></p>
</div>
</div>
</div>
<div class="section" title="Pour conclure">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="sdm-ccna.conclusion" name=
"sdm-ccna.conclusion"></a>Pour conclure</h2>
</div>
</div>
</div>
<p>Voilà&nbsp;! Si vous êtes arrivés jusque là vous disposez d'une interface
d'utilisation de <em class="wordasword">Security Device Manager</em>
fonctionnelle. Il ne reste plus qu'à implanter le navigateur «local» sur
l'image maître des postes de la salle de travaux pratiques. Pour les quatre
routeurs 1841 du <em class="wordasword">bundle</em>, il est possible
d'implanter un fichier de configuration type à recharger depuis le serveur
<acronym class="acronym">TFTP</acronym>.</p>
<p>Le mode d'exploitation présenté ici est certainement critiquable en bien
des points. Si vous avez d'autres propositions, n'hésitez pas à en faire
part&nbsp;!</p>
<p>Merci d'avoir eu le courage de lire ces lignes jusqu'à la fin.</p>
<p>Ce document est disponible en version imprimable au format PDF&nbsp;:
<a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/telechargement/sdm-ccna.pdf"
target="_top">sdm-ccna.pdf</a>.</p>
<p>$Id: sdm-ccna.xml 1405 2009-06-19 15:50:48Z latu $</p>
</div>
</div>
</body>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/06/index.html#e2009-06-04T20_43_34.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/06/index.html#e2009-06-04T20_43_34.txt</guid>
<title>Anatomie d'un hyperviseur Linux</title>
<dc:date>2009-06-04T20:43:34+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>KVM, Enseignement, Debian</dc:subject>
<description>
<![CDATA[<p>Alors que j'avance <a
href="http://www.linux-france.org/prj/inetdoc/changelog/">très
laborieusement</a> dans la révision de l'article <a
href="http://www.linux-france.org/prj/inetdoc/articles/vm/">Virtualisation
système et enseignement</a>, un article d'une qualité autrement supérieure
vient d'être publié sur le site <i>IBM developerWorks</i> sur les
caractéristiques d'un hyperviseur pour le noyau Linux&nbsp;: <a
href="http://www.linux-france.org/prj/inetdoc/articles/vm/">Anatomy of a Linux
hypervisor</a></p>

<p>D'une manière générale, les articles de la série <i>Anatomy of ...</i> sont
tous d'une grande qualité. À lire absolument.</p>]]>
</description>
</item>
<item>
<link>http://www.linux-france.org/~platu/weblog/archives/2009/05/index.html#e2009-05-11T22_24_39.txt</link>
<guid isPermaLink="true">http://www.linux-france.org/~platu/weblog/archives/2009/05/index.html#e2009-05-11T22_24_39.txt</guid>
<title>X.Org 1.6.1 / hal / KDE 4.2 / TwinView</title>
<dc:date>2009-05-11T22:24:39+01:00</dc:date>
<dc:creator>Philippe Latu</dc:creator>
<dc:subject>Enseignement, Debian, M6300</dc:subject>
<description>
<![CDATA[<div xml:lang="fr" class="article" title=
"X.Org 1.6.1 / hal / KDE 4.2 / TwinView" lang="fr">
<div class="titlepage">
<div>
<div>
</div>
<div>
<div class="abstract" title="Résumé">
<p><span class="inlinemediaobject"><img src="http://www.linux-france.org/~platu/weblog/images/thumb42.png" align="right"
width="120" /></span> Dans mon précédent billet sur la <a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/archives/2009/04/19/index.html#e2009-04-19T17_32_49.txt"
target="_top">migration KDE 4.2</a>, j'ai présenté un tableau sans doute trop
optimiste de la situation. Voici donc un nouveau billet sur mes déboires
récentes avec mon transportable M6300&nbsp;!</p>
</div>
</div>
</div>
</div>
<div class="section" title="Le contexte">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="xorg-hal-twinview.context" name=
"xorg-hal-twinview.context"></a>Le contexte</h2>
</div>
</div>
</div>
<p>Voilà de nombreuses années que j'ai pris l'habitude d'utiliser une
configuration d'interface graphique à «double tête»&nbsp;: un écran pour les
manipulations personnelles et un écran de vidéo-projection à destination des
étudiants. De cette façon, il est possible de consulter des notes différentes
des vues projetées lors d'un cours ou de préparer une configuration sur un
équipement pendant que les étudiants traitent une série de questions lors
d'une séance de travaux pratiques.</p>
<p>Du point de vue du gestionnaire graphique <a class="ulink" href=
"http://www.x.org/" target="_top">X.Org</a>, cette configuration à «double
tête» était basée sur l'extension <em class="citetitle">Xinerama</em>. Cette
extension permet de disposer de deux écrans de configuration indépendante.
Avec les version KDE 3.5.x, le gestionnaire de bureau est aussi
indépendant&nbsp;: fond d'écran, icônes, raccourcis, etc. Depuis le passage à
X.Org 1.6.1 et KDE 4.2, tout çà ne fonctionne plus du tout. L'interface X.Org
redémarre de façon aléatoire et certaines touches du clavier bloquent
l'interface graphique. Il a donc fallu reprendre la configuration à zéro.</p>
<p>Dans les sections suivantes, on trouve une description point par point des
choix retenus pour revenir à un fonctionnement nominal.</p>
</div>
<div class="section" title="Les périphériques d'entrée clavier/souris">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="xorg-hal-twinview.hal" name=
"xorg-hal-twinview.hal"></a>Les périphériques d'entrée clavier/souris</h2>
</div>
</div>
</div>
<p>Avec l'arrivée des paquets de la version 1.6.1 de <a class="ulink" href=
"http://packages.qa.debian.org/x/xorg.html" target="_top">xorg</a>, on passe à
un mode de reconnaissance dynamique des périphériques d'entrée. Normalement,
les fichiers de configuration historiques comportant les définitions de ces
mêmes périphériques devraient être correctement gérés. Force est de constater
que ce n'est pas toujours le cas.</p>
<div class="variablelist">
<dl>
<dt><span class="term"><em class="citetitle">Le clavier</em></span></dt>
<dd>
<p>Pour la gestion du clavier, j'ai suivi les instructions de la page
<a class="ulink" href="http://wiki.debian.org/XStrikeForce/InputHotplugGuide"
target="_top">XStrikeForce/InputHotplugGuide</a> qui explique que le
branchement «à chaud» est devenu le mode opératoire par défaut dans la
configuration des périphériques d'entrée.</p>
<p>Dans le cas du clavier, c'est le paquet <code class=
"literal">console-setup</code> qui doit se charger de récupérer les
paramètres. Ces paramètres sont ensuite transmis au démon <code class=
"literal">hal</code> qui sert à alimenter le serveur X.Org.</p>
<p>Comme indiqué dans la documentation, il faut s'assurer que <code class=
"literal">console-setup</code> détient les bonnes informations.</p>
<pre class="screen" width="80">
$ grep -C 1 -i xkb /etc/default/console-setup
# The following variables describe your keyboard and can have the same
# values as the XkbModel, XkbLayout, XkbVariant and XkbOptions options
# in /etc/X11/xorg.conf.
XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT="latin9"
XKBOPTIONS="lv3:ralt_switch"
</pre>
<p>Les mêmes informations doivent être disponibles dans le démon <code class=
"literal">hal</code>.</p>
<pre class="screen" width="80">
$ lshal | grep xkb
  input.xkb.layout = 'fr'  (string)
  input.xkb.model = 'pc105'  (string)
  input.xkb.options = 'lv3:ralt_switch'  (string)
  input.xkb.rules = 'base'  (string)
  &lt;snipped/&gt;
</pre></dd>
<dt><span class="term"><em class="citetitle">La souris ou le <em class=
"wordasword">touchpad tapping</em></em></span></dt>
<dd>
<p>Là, c'est le paquet <code class=
"literal">xserver-xorg-input-synaptics</code> pour lequel l'utilisation du
«click sur tapis» ou <em class="wordasword">tapping</em> a disparu. Comme dans
le cas du clavier, il s'agit d'un problème lié aux propriétés du périphérique
d'entrée qui doivent être transmises via le démon <code class=
"literal">hal</code>.</p>
<p>Après avoir consulté plusieurs rapports de bug sur la question, j'ai choisi
d'éditer le fichier <code class=
"filename">/usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi</code>
fourni avec le paquet <code class=
"literal">xserver-xorg-input-synaptics</code> en ajoutant les 3 lignes
suivantes.</p>
<pre class="screen" width="80">
$ tail -7  /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi
        --&gt;
        &lt;merge key="input.x11_options.TapButton1" type="string"&gt;1&lt;/merge&gt;
        &lt;merge key="input.x11_options.TapButton2" type="string"&gt;2&lt;/merge&gt;
        &lt;merge key="input.x11_options.TapButton3" type="string"&gt;3&lt;/merge&gt;
    &lt;/match&gt;
  &lt;/device&gt;
&lt;/deviceinfo&gt;
</pre></dd>
</dl>
</div>
<p>Une fois ces deux opérations effectuées, il reste à supprimer les sections
<code class="literal">InputDevice</code> correspondantes du fichier
<code class="filename">/etc/X11/xorg.conf</code> ainsi que les références dans
la section <code class="literal">ServerLayout</code>. Voir <a class="xref"
href="#xorg-hal-twinview.xorg.conf" title=
"Le fichier de configuration xorg.conf">la section intitulée «&nbsp;Le fichier
de configuration xorg.conf&nbsp;»</a>.</p>
</div>
<div class="section" title="L'extension TwinView">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="xorg-hal-twinview.twinview" name=
"xorg-hal-twinview.twinview"></a>L'extension TwinView</h2>
</div>
</div>
</div>
<p>Cette extension est une option propriétaire du constructeur <a class=
"ulink" href=
"http://www.nvnews.net/vbulletin/forumdisplay.php?s=&amp;forumid=14" target=
"_top">NVIDIA</a> disponible uniquement avec les pilotes propriétaires des
cartes graphiques de la marque. Au moment de la rédaction de ces lignes, c'est
la version 180.51 qui est utilisée.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="390">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-nvidia-settings-conf.png" width=
"372.047244094489" alt="Copie d'écran - Configuration X.Org + NVIDIA" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-nvidia-settings-conf.png"
target="_top">Configuration X.Org + NVIDIA</a></p>
</div>
</div>
<p>L'outil <code class="literal">nvidia-settings</code> autorise la
reconfiguration dynamique de la disposition des écrans avec l'extension
<em class="citetitle">TwinView</em>.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="390">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-nvidia-settings.png" width=
"372.047244094489" alt="Copie d'écran - nvidia-settings + TwinView" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-nvidia-settings.png"
target="_top">nvidia-settings + TwinView</a></p>
</div>
</div>
<p>Dans le cas qui nous intéresse, on place le deuxième écran ou le vidéo
projecteur à droite de l'écran du portable. Du point de vue configuration, on
active l'extension <em class="citetitle">TwinView</em> dans la section de
l'écran du portable et on positionne le second écran à droite en ajoutant le
nombre de pixels nécessaires.</p>
<p>Ici, la définition graphique du portable, référencé <code class=
"literal">DFP</code> est de <code class="literal">1920x1200</code>. On ajoute
donc <code class="literal">1920</code> pixels à la position du second écran
référencé <code class="literal">CRT</code>. Ce mode d'utilisation de
l'extension est appelé <em class="citetitle">DynamicTwinView</em>.</p>
<pre class="screen" width="80">
Option "metamodes" " DFP: 1920x1200 +0+0, CRT: nvidia-auto-select +1920+0"
</pre>
<p>Les options de l'extension sont présentées au chapitre 13 de la
documentation NVIDIA dans le fichier <code class=
"filename">/usr/share/doc/NVIDIA_GLX-1.0/README.txt</code>. Cette même
documentation est aussi disponible en ligne.</p>
<p>Voir <a class="xref" href="#xorg-hal-twinview.xorg.conf" title=
"Le fichier de configuration xorg.conf">la section intitulée «&nbsp;Le fichier
de configuration xorg.conf&nbsp;»</a> pour avoir une vue complète du fichier
de configuration. Une fois que cette configuration est activée, on obtient le
résultat suivant.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="602">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-shot.png" width="584.645669291339" alt=
"Copie d'écran - double tête" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-shot.png" target=
"_top">double tête</a></p>
</div>
</div>
<p>Dans le cycle amour/haine entre GNU/Linux et NVIDIA, on peut regretter
qu'il n'existe pas encore de pilotes de carte graphique libres à 100% qui
permettent d'obtenir le même mode de fonctionnement. Le fait qu'Intel ait
publié l'ensemble des spécifications de ses composants graphiques finira
peut-être par contraindre les autres constructeurs à suivre la même
démarche.</p>
</div>
<div class="section" title="Les présentations">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="xorg-hal-twinview.presentation" name=
"xorg-hal-twinview.presentation"></a>Les présentations</h2>
</div>
</div>
</div>
<p>Pour utiliser correctement la configuration «double tête» avec une
présentation, il faut distinguer les applications utilisées.</p>
<div class="variablelist">
<dl>
<dt><span class="term"><em class="citetitle">MagicPoint</em></span></dt>
<dd>
<p>Avec MagicPoint, il est nécessaire d'utiliser l'option <code class=
"option">-g</code> de façon à dimensionner l'affichage dans une fenêtre qui
occupe seule l'écran du vidéo projecteur. Voici un exemple utilisant une
résolution d'écran de 1280 par 1024 pixels.</p>
<pre class="screen" width="80">
$ mgp -g 1280x1024 -x m17n admin.reseau.fs.mgp
</pre>
<p>Auparavant, avec l'extension <code class="literal">Xinerama</code>, les
définitions d'écran étaient totalement indépendantes. <span class=
"application">MagicPoint</span> occupait un écran sans qu'il soit nécessaire
de préciser la résolution à employer.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="602">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-mgp.png" width="584.645669291339" alt=
"Copie d'écran - Présentation MagicPoint" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-mgp.png" target=
"_top">Présentation MagicPoint</a></p>
</div>
</div>
<p>Côté conception de présentation, j'ai choisi de ne plus centrer les images
inclues dans les vues. J'ai aussi abandonné le redimensionnement dynamique des
images en pourcentage. La principale conséquence est visible dans les versions
imprimables produites à partir de l'outil <span class=
"application">mgp2ps</span>. Les images n'occupent pas très bien l'espace de
la page.</p>
</dd>
<dt><span class="term"><em class="citetitle">OpenOffice.org
Impress</em></span></dt>
<dd>
<p>Avec OpenOffice Impress, il faut accéder à la fenêtre des paramètres du
diaporama pour spécifier l'écran à utiliser.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="354">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-ooimpress-parameter.png" width=
"336.614173228346" alt=
"Copie d'écran - Paramétrage de présentation OpenOffice Impress" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-ooimpress-parameter.png"
target="_top">Paramétrage de présentation OpenOffice Impress</a></p>
</div>
</div>
<p>Dans la copie d'écran ci-dessous, l'écran du portable a été utilisé pour
ouvrir l'application <span class="application">ooimpress</span> et le second
écran est utilisé pour le diaporama projeté.</p>
<div class="mediaobject">
<table border="0" summary="manufactured viewport for HTML img" cellspacing="0"
cellpadding="0" width="602">
<tr>
<td><img src="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-ooimpress.png" width="584.645669291339"
alt="Copie d'écran - Présentation OpenOffice Impress" /></td>
</tr>
</table>
<div class="caption">
<p><a class="ulink" href="http://www.linux-france.org/~platu/weblog/images/xorg-hal-twinview-ooimpress.png" target=
"_top">Présentation OpenOffice Impress</a></p>
</div>
</div>
</dd>
</dl>
</div>
</div>
<div class="section" title="Pour conclure">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="xorg-hal-twinview.conclusion" name=
"xorg-hal-twinview.conclusion"></a>Pour conclure</h2>
</div>
</div>
</div>
<p>Voilài&nbsp;! Ce billet est là pour relativiser l'enthousiasme de la
migration de l'environnement graphique KDE 4.2. Sans sombrer dans la déprime
et passer à <a class="ulink" href="http://www.gnome.org" target=
"_top">Gnome</a>, on constate simplement que toutes les difficultés ne sont
pas soldées. Les évolutions sont tellement importantes que les migrations
d'une version à l'autre entraînent pas mal de désagréments. Nous avons été
bien mal habitués ces dernières années en utilisant les paquets de la branche
<em class="wordasword">unstable</em> jour après jour sans rencontrer la
moindre difficulté.</p>
<p>Je serais beaucoup plus sévère sur les distributions qui proposent des
versions «intermédiaires» sans assurance qualité aux utilisateurs novices. Ce
n'est définitivement pas le meilleur moyen d'attirer de nouveaux utilisateurs
dans le monde du logiciel libre.</p>
<p>Enfin, il existe une extension du projet <em class="citetitle">X.Org</em>
que je n'ai pas pris le temps d'évaluer&nbsp;: <a class="ulink" href=
"http://www.x.org/wiki/Projects/XRandR" target="_top"><em class=
"citetitle">XRandR</em></a> qui doit permettre d'obtenir les mêmes résultats
avec des cartes graphiques d'autres marques ; Intel notamment. Si j'ai
l'occasion de tester un <em class="wordasword">netbook</em> un jour, il faudra
l'envisager sérieusement. Pour l'instant, je reste fidèle au transportable
M6300 sur lequel on peut «faire tourner» une petite collection d'instances
virtuelles de systèmes (et|ou) de routeurs.</p>
<p>Ce document est disponible en version imprimable au format PDF&nbsp;:
<a class="ulink" href=
"http://www.linux-france.org/~platu/weblog/telechargement/xorg-hal-twinview.pdf"
target="_top">xorg-hal-twinview.pdf</a>.</p>
<p>$Id: xorg-hal-twinview.xml 1390 2009-05-11 20:24:10Z latu $</p>
</div>
<div class="section" title="Le fichier de configuration xorg.conf">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="xorg-hal-twinview.xorg.conf" name=
"xorg-hal-twinview.xorg.conf"></a>Le fichier de configuration xorg.conf</h2>
</div>
</div>
</div>
<p>Le fichier ci-dessous est assez «léger» relativement à ce que l'on a connu
dans le passé&nbsp;! Toutes les sections <code class=
"literal">InputDevice</code> ont été supprimées. L'extension <code class=
"literal">Xinerama</code> a été désactivée globalement et l'extension
<code class="literal">TwinView</code> a été activée dans la définition des
paramètres de l'écran&nbsp;; c'est à dire la section <code class=
"literal">Screen</code>.</p>
<pre class="screen" width="80">
Section "ServerLayout"
        Identifier     "Default Layout"
        Screen      0  "NVIDIA Quadro FX 1600M" 0 0
EndSection

Section "ServerFlags"
        Option         "Xinerama" "0"
EndSection

Section "Files"
        RgbPath         "/usr/lib/X11/rgb"
EndSection

Section "Module"
        Load           "dbe"
        Load           "extmod"
        Load           "glx"
EndSection

Section "Monitor"
        Identifier      "Laptop"
        ModelName       "Seiko"
        Option          "DPMS"
EndSection

Section "Device"
        Screen          0
        Identifier      "NVIDIA Quadro FX 1600M"
        Driver          "nvidia"
        VendorName      "NVIDIA Corporation"
        BusID           "PCI:1:0:0"
        Option          "Coolbits"              "1"
EndSection

Section "Screen"
        Identifier      "NVIDIA Quadro FX 1600M"
        Device          "NVIDIA Quadro FX 1600M"
        Monitor         "Laptop"
        DefaultDepth    24
        Option          "TwinView" "1"
        Option          "TwinViewXineramaInfoOrder" "DFP-0"
        Option          "TwinviewXineramaInfo"  "True"
        Option          "metamodes" " DFP: 1920x1200 +0+0, CRT: nvidia-auto-select +1920+0"
        SubSection "Display"
                Depth   24
        EndSubSection
EndSection
</pre></div>
</div>
</body>]]>
</description>
</item>
</channel>
</rss>
