SIG 11 ARTICLES DOCUMENTS MEMBRES LIENS

15 cm2 de Linux

On mesure encore mal, parce qu'elle est trop souvent cantonnée à des usages ingrats, enregistrement de photos de vacances ou sauvegardes de fichiers musicaux généralement acquis dans des conditions douteuses, l'énorme intérêt que représente la mémoire flash en tant que simple support de stockage amovible, assimilable en cela à la disquette, au CDROM, voire au disque dur. Outre une compacité et une légèreté inégalées, elle offre pourtant une grande fiabilité, une rapidité d'accès souvent limitée par son interface USB, et une souplesse équivalente à celle d'un disque dur. Et, comme on va s'en rendre compte, il est très facile de détourner des outils classiques pour installer sur une telle mémoire tout ce qu'il faut pour démarrer l'installation d'un Linux, voire utiliser une distribution compacte et prête à l'emploi, avec comme seule limite une capacité qui, à des tarifs abordables, reste encore un peu faible, de l'ordre, au mieux, de 512 Mo. Mais, comme on le sait, ces paramètres de coût et de taille sont, dans le domaine informatique, précisément ceux qui évoluent le plus vite, dans le bon sens.

L'USB au démarrage

Sauf dans le cas particulier mais de moins en moins rare où on le trouve intégré à sa machine, le lecteur de cartes flash s'y raccorde par un connecteur USB. Sous Linux, la prise en charge de cette interface implique l'utilisation d'un tas de modules, donne lieu à une production documentaire considérable et, avec une SuSE raisonnablement récente, s'effectue sans soucis : quelques secondes après le branchement, un bip signale que le périphérique est prêt à l'emploi, ce que l'on peut vérifier d'un cat /proc/bus/usb/devices :

T:  Bus=03 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0718 ProdID=b000 Rev= 2.05
S:  Manufacturer=Imation
S:  Product=FlashGO!
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
qui signale bien la présence de notre lecteur FlashGo!, et, puisque le périphérique USB fonctionne en SCSI, d'un cat /proc/scsi/scsi :
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: OEI-USB  Model: CompactFlash     Rev: 2.05
  Type:   Direct-Access                    ANSI SCSI revision: 02
Tout va bien : on pourrait intégrer le lecteur à notre système de fichiers en tant que /dev/sda1, s'il ne nous restait quelques opérations à réaliser au préalable.

Le but du jeu, en effet, est de lancer sa machine grâce au lecteur de cartes flash, ce qui implique, d'une part, que le BIOS de celle-ci le permette et, d'autre part, que la mémoire contienne les données indispensables à l'amorçage. A priori, depuis quelques années, les ordinateurs satisfont à première condition : on le vérifiera en activant les fonctions appropriées du BIOS, en n'oubliant pas, s'il est présent, un paramètre du style USB function for DOS, et en testant les diverses options de démarrage, USB HDD semblant la plus appropriée, USB LS120 étant la seule possible sur un AMIbios 1.21 datant de 2002, et USB CDROM paraissant exclue. Au mieux, le BIOS propose la très intéressante option boot menu, grâce à laquelle il suffit de faire son choix parmi les périphériques amorçables détectés sur le système.
L'autre partie de la manoeuvre implique le recours au programme universellement utilisé pour installer des distributions Linux à partir de CDROMs, le SYSLINUX de Peter Anvin.

SYSLINUX, et ce qu'il peut faire d'autre

Dans la famille des chargeurs de démarrage, SYSLINUX offre la particularité de permettre l'amorçage de Linux à partir d'une partition FAT ou, en d'autres termes, de marier la carpe et le pingouin. Il offre, en conséquence, une grande polyvalence, reste extrêmement simple d'emploi, et se trouve a priori présent, même s'il n'est pas installé par défaut, sur toutes les distributions. Mais il lui faut une partition FAT sur quelque chose qui ressemble à une disquette, donc, de préférence, même s'il ne semble pas très exigeant sur ce point, avec une taille des secteurs de 512 Ko. Heureusement, Linux, avec l'une des déclinaisons de mkfs, offre tout ce dont on a besoin.

Le lecteur de carte flash étant accessible sur /dev/sda1, on va donc commencer par formater la mémoire avec la commande mkdosfs -S 512 /dev/sda1. Ensuite, on va intégrer le périphérique à notre système de fichiers : mount -t msdos /dev/sda1 /mnt/flash. Enfin, la commande syslinux, qui ne requiert pas d'autre paramètre qu'un périphérique de destination, en l'occurrence /dev/sda1, installe le fichier ldlinux.sys, qui permet l'amorçage à partir de la mémoire flash. C'est déjà fini et ça marche : en redémarrant, et pour peu que le BIOS soit correctement configuré, la machine s'initialise grâce au lecteur de carte. Evidemment, on ne va guère plus loin : SYSLINUX s'attend à trouver un noyau dénommé, touche d'originalité, linux, et, en son absence, rend la main et invite à saisir les commandes nécessaires.
On n'en fera rien : SYSLINUX peut, en fait, lancer le noyau qu'on veut avec ramdisk et options, pour peu qu'on les précise dans un fichier nommé syslinux.cfg, qui doit se trouver au même niveau que ldlinux.sys. La syntaxe de ce fichier rappelle celle de LiLo sans pour autant être identique et se trouve détaillée, suprême provocation, dans le fichier syslinux.doc qui accompagne le programme. Mais on peut faire beaucoup plus malin : utiliser une image .iso, normalement destinée au gravage sur un CDROM amorçable, que l'on peut copier sur la mémoire flash. La variante ISOLINUX, à priori, donc, d'usage universel pour les distributions sur CDROMs, ne diffère de SYSLINUX que par le nom de son fichier de configuration. La manoeuvre est donc très simple : il faut d'abord pouvoir accéder directement aux fichiers contenus dans l'image .iso, ce qui nécessite un détour par le périphérique loop :
mount -t iso9660 /point/image.iso /mnt/dvd -o loop,
On copie ensuite les fichiers présents sur /mnt/dvd, on renomme isolinux.cfg en syslinux.cfg, et, avec un peu de chance, ça marche du premier coup.

Ainsi, pour installer la toute nouvelle SuSE 9.2, officiellement disponible dans sa version professionnelle depuis le 10 janvier, on aura simplement, après avoir téléchargé l'image boot_chose.iso que l'on trouvera dans le répertoire boot du serveur et qui est pleine de trucs inutiles, besoin des commandes suivantes :

  1. D'abord, avec les SuSE récentes qui intègrent automatiquement via Hotplug les périphériques usb, umount /media/usb-storage-chose
  2. Puis mkdos -S 512 /dev/sda#
  3. Ensuite, syslinux /dev/sda#
  4. On raccorde l'image iso grâce à mount -t iso9660 /chemin/acces/boot_chose.iso /mnt/iso -o loop, et le lecteur usb avec : mount -t msdos /dev/sda1 /mnt/flash
  5. Et on tape cd /mnt/iso/boot/loader
  6. Il ne reste plus qu'à copier le contenu du répertoire loader : cp * /mnt/flash, et à changer le nom du fichier de configuration syslinux : mv isolinux.cfg syslinux.cfg.

C'est prêt : on redémarre, et on peut lancer l'installation en mode manuel à partir du lecteur usb.
On voit l'énorme intérêt d'une opération que seule, aujourd'hui, la taille réduite de la mémoire flash limite. Elle permet, en effet, de démarrer n'importe quelle machine récente, laquelle est obligatoirement pourvue d'un connecteur USB, et dans n'importe quel but. On peut ainsi installer Linux sur un poste dépourvu de lecteur de CDROM comme de disquette mais avec un accès réseau, on peut aussi bricoler une distribution de secours sans avoir besoin, comme avec un graveur, de tout réenregistrer si l'on change un fichier ou modifie un paramètre ; on pourra même, quand la capacité sera suffisante, aller plus loin. Le support de démarrage pourra alors servir également de support de stockage : on enregistrera, telle qu'elle, l'image .iso de la distribution sur la mémoire flash, et tout Linux tiendra dans 15 cm2.

Denis Berger, 11 janvier 2005

SIG 11ARTICLESDOCUMENTSMEMBRESLIENS

info@sig-11.org