Amorcer Knoppix depuis une clé de mémoire USB via une disquette

Gazette Linux n°116 — Juillet 2005

Ben Okopnik

Article paru dans le n°116 de la Gazette Linux de juillet 2005.

Traduction française par Jean Zundel .

Relecture de la traduction française par Joëlle Cornavin .

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières
1. Le défi
2. L'approche
3. FLASH !
4. Pas de perte d'énergie

1. Le défi

Ma fiancée souhaitait essayer Linux. Cependant, il y avait un problème et, pour être précis, une longue série de problèmes dûs aux circonstances. D'une part, son portable, un antique Sony VAIO F590K®, ne disposait pas d'un lecteur de cédérom opérationnel (donc, aucune chance d'amorcer rapidement et facilement une Knoppix ou la plupart des autres distributions Live CD). D'autre part, étant l'éditeur d'une lettre d'information mensuelle destinée à des activistes de l'espace, elle doit avoir un accès permanent à un programme graphique puissant ainsi qu'à un logiciel de PAO — rendre son ordinateur hors service pour une durée quelconque était donc hors de question. Ce qu'elle voulait en fait était la possibilité d'essayer Linux sur sa machine, où elle a le clavier bien en main et où toutes les commandes lui sont familières et confortables (j'ai abondé dans ce sens, d'après le principe selon lequel, lors d'une expérience correctement conçue, seul le facteur en cours de test devrait changer, alors que toute autre chose reste égale). Pour compliquer encore les choses, nous vivons sur un voilier au mouillage et notre accès au Net est par conséquent tout sauf parfait et assez lent. Nous n'étions donc pas au bout de nos peines.

À ce stade, j'ai envisagé un certain nombre de d'options, pour les rejeter pratiquement toutes. Il restait quelques faibles possibilités, comme amorcer un environnement Linux minimal sur une disquette avec un client VNC (Virtual Network Computing) tout en faisant tourner un serveur VNC ailleurs sur notre réseau local (bancal et restreint par les artefacts du VNC lui-même) ou peut-être installer le serveur X Cygwin sous Windows (terra incognita pour moi car je n'avais jamais fait quoi que ce soit avec Cygwin, sans parler d'une certaine appréhension quant à son fonctionnement et au genre de problèmes qu'il introduirait dans le processus en plus de ceux créés du fait que KDE ignore le paradigme de la gestion réseau sous X). Ensuite, qu'en était-il de la manière d'amorcer Knoppix depuis un lecteur flash ? Il me semblait me rappeler avoir lu quelque chose quelque part à ce sujet, peut-être même était-ce une success story. J'étais tout à fait prêt à chercher une réponse sur le Net. Les détails du processus nécessaire étaient un peu troubles dans mon esprit mais, compte tenu du temps et des ressources dont je disposais, cela pouvait marcher.


2. L'approche

Mes recherches sur le Web via Google® m'ont permis d'affiner encore le reste de ma liste d'idées, en éliminant plusieurs possibilités — par exemple, un certain nombre des distributions live ne contenaient ni Gimp ni OOffice, qui faisaient partie de mes prérequis — en concentrant le choix sur Knoppix et quelques distributions similaires. Knoppix, comme exemple de distribution la plus couramment utilisée du genre, semblait fournir la réponse définitive, mais comment la faire tourner sur le VAIO® ? Mon lecteur flash, une clé Geek Squad® de 1 Go, contiendrait l'image en laissant même de l'espace, mais la machine n'offrait pas d'option pour amorcer depuis un lecteur flash. Un coup d'œil rapide sur le site de Sony® a montré qu'il n'existait pas de mise à jour du BIOS pour combler cette lacune.

C'est à ce moment que je me suis souvenu qu'un membre de l'Answer Gang avait naguère mentionné Puppy Linux et que le site contenait une discussion sur la manière de l'amorcer depuis un lecteur flash en utilisant une disquette. Certes, Puppy n'offre ni Gimp ni OOffice (bien qu'on y trouve Scribus), mais le fait que certains utilisateurs amorcent des images Linux basées sur l'USB depuis une disquette était encourageant. C'était ce que je cherchais.


3. FLASH !

J'ai lu la FAQ très attentivement, pour finir par avoir un... bon mal de tête. Pour une raison quelconque, à ce moment exact, mon cerveau refusait tout net d'assimiler les informations nécessaires — je suis sûr que cela n'avait rien à voir avec la manière dont elles étaient présentées, mais je n'y arrivais tout simplement pas. D'autres recherches m'ont conduit à la FAQ Boot KNOPPIX from an USB Memory Stick, qui m'a aidé un peu mais ne me menait toujours pas là où je voulais aller. Toujours plus de recherches, y compris des demandes à l'Answer Gang (merci à eux !), puis j'ai croisé le script for booting Knoppix 3.4 de Fabian Franz. Il ne fonctionnait pas, évidemment — je ne m'y attendais pas, puisque Knoppix a beaucoup changé depuis cette époque — mais à ce stade, je comprenais suffisamment le processus et la structure de l'image Knoppix pour en suivre la logique d'un bout à l'autre.

En combinant les informations de la FAQ ci-dessus et le script, tout a fini par s'enclencher. Le cédérom de la Knoppix se compose d'un certain nombre de fichiers, dont un seul avait réellement de l'importance pour ce dont j'avais besoin : le « miniroot ». Pour être exact, le miniroot est une image amorçable compressée au sein de l'image Knoppix — c'est en fait la partie qui rend le cédérom Knoppix amorçable. Les modifications des fichiers se résument aux étapes suivantes :

  1. Monter l'image Knoppix.

  2. Décompresser le miniroot dans un fichier temporaire.

  3. Monter le miniroot.

  4. Modifier les fichiers qui le composent.

  5. Le recompresser.

  6. Créer un fichier monté sur loop.

  7. Y copier le miniroot.

  8. Le rendre amorçable.

  9. L'écrire sur une disquette.

Comme le miniroot dépassait 1,44 Mo, la taille maximale pour pouvoir tenir sur une disquette, le « régime » le plus simple à lui faire subir a consisté à supprimer impitoyablement tous les modules qui n'étaient pas nécessaires pour amorcer : les modules SCSI et ceux relatifs au cédérom. Le plus important à retenir était que le rôle du miniroot consistait simplement à amorcer un environnement Linux très basique et à passer immédiatement le contrôle à Knoppix, qui avait toujours toutes ses fonctionnalités d'origine (l'image Knoppix elle-même était restée telle quelle, seule une copie du miniroot ayant été modifiée). La suppression de tous les modules autres que ceux relatifs à « usb-... » et « hci-... » ont laissé le miniroot au-dessous de la taille critique.

À ce stade, j'ai rencontré un autre problème... mais assez minime pour être risible. Mon portable n'a pas de lecteur de disquette et le VAIO® n'a rien qui ressemble à /bin/dd. Je ne pouvais penser à rien d'autre qu'au « debug.exe » de DOS qui pourrait écrire une image brute sur une disquette. Devrais-je vraiment me souvenir de ce jeu de commandes ancien pour effectuer cette tâche simple ? Le projet Debian contient rawrite.exe dans son sous-répertoire /tools/. Quelques secondes pour créer la disquette, et le logo familier de Knoppix illuminait l'écran du VAIO®. [1]


4. Pas de perte d'énergie

Après avoir franchi toutes ces étapes — ce projet a été étalé sur plusieurs semaines — j'ai pensé que d'autres « Linuxiens » souhaiteraient amorcer via une disquette ou une clé USB. La méthode *NIX traditionnelle pour propager la connaissance, qui a fonctionné dans mon cas, est un script. Celui présenté ci-après est une version très modifiée de celui de Fabian Franz. Il vous permet de spécifier un répertoire contenant l'image (ou les images) Knoppix en tant qu'argument sur la ligne de commande ou dans la section de configuration utilisateur du script lui-même et il crée un fichier appelé boot.img que l'on peut écrire sur une disquette pour le transformer en un environnement amorçable qui passe le contrôle à un périphérique USB.

Note

Je l'ai testé aussi rigoureusement que je le pouvais sur ma propre machine, mais je ne garantis absolument rien d'autre. En cas de panne, vous serez livré à vous-même. Oui, vous serez les bienvenus si vous me contactez avec des suggestions ou des rapports de bogue. Non, je ne sais pas comment corriger [choisissez le problème du jour ici] sous Knoppix.

Vous trouverez une version téléchargeable du fichier de ce script ici. Bon Linux !


#!/bin/bash
# Created by Ben Okopnik on Thu Mar 17 23:56:31 EST 2005
#
# Many thanks to Fabian Franz, whose original script gave me the idea of
# how it's all supposed to work.
# 
# Ce script crée une disquette d'amorçage qui passe le contrôle à un lecteur de 
# mémoire USB contenant une image de cédérom Knoppix. Pas de cédérom, pas de problème !
#

############## Section de configuration utilisateur #####################

# Placez cette section dans le répertoire où réside l'image Knoppix ou spécifiez
# le répertoire en tant qu'argument en ligne de commande.
KNOPPIX_DIR=${1:-/home/ben/tmp2}

############## Fin de section de la configuration utilisateur ##############

abort()
{
  printf "$@\n"
  exit 1
}

clean_exit()
{
  [ -d "$TMPDIR" ] && rm -rf $TMPDIR
}

# Tests de validation
[ $UID -ne 0 ] && abort "Les privilèges root sont requis pour ce script."
[ -d "$KNOPPIX_DIR" ] || abort "$KNOPPIX_DIR n'est pas un répertoire."
[ -z "`ls $KNOPPIX_DIR|grep -i 'knoppix.*iso'`" ] && 
	abort "Image Knoppix non trouvée dans $KNOPPIX_DIR."

# Créez le répertoire temp et débarrassez-vous en à la sortie
TMPDIR=`mktemp -dp /tmp/ make_floppy.XXXXXX`
trap "clean_exit" EXIT

# Passez dans TMPDIR et le préparer pour les opérations à venir
ORIG_DIR=$(pwd)
cd $TMPDIR
mkdir knoppix floppy miniroot old_miniroot

# Choisissez et montez l'image Knoppix
printf "Choisissez l'une des images suivantes :\n"
select choice in $KNOPPIX_DIR/K*.iso; do break; done
mount $choice knoppix -o loop

# Décompressez le miniroot depuis le répertoire de boot de l'image montée
gunzip -c knoppix/boot/isolinux/minirt24.gz > minirt24

# "Sauvegardez" et montez le miniroot
mv minirt24 minirt24.old
mount -o loop minirt24.old old_miniroot

# Créez le fichier qui contiendra le nouveau miniroot, formatez-le en DOS
# et montez-le
dd if=/dev/zero of=minirt24 bs=4M count=1
mke2fs -L "KNOPPIX Miniroot" -b 1024 -N 8192 -O none -F -q -m 0 minirt24
mount -o loop minirt24 miniroot

# Copiez les modules relatifs à l'USB depuis l'ancien miniroot vers le nouveau
mkdir -p miniroot/modules/scsi
for n in `ls old_miniroot/modules/scsi|egrep 'usb|hci'`
do
	cp old_miniroot/modules/scsi/"$n" miniroot/modules/scsi
done

# Copiez tout sauf le répertoire "scsi" depuis l'ancien miniroot vers le nouveau
rm -rf old_miniroot/modules/scsi
cp -af old_miniroot/* miniroot/

# Démontez les deux
umount old_miniroot
umount miniroot

# Compressez le miniroot à nouveau
gzip -9 minirt24

# Créez un fichier de 1,44 Mo qui contiendra l'image d'amorçage, formatez-le en DOS
# et montez-le
dd if=/dev/zero of=$TMPDIR/boot.img bs=1k count=1440
mkdosfs $TMPDIR/boot.img
mount -t msdos boot.img floppy -o loop

# ... Une stupidité de "mount" qui exige une attente avant de le
# remonter en lecture-écriture. Le mainteneur de "mount" devrait peut-être
# recevoir un rapport de bogue ?
sleep 2
mount floppy -o remount,rw

# Copiez les fichiers requis depuis le répertoire d'amorçage de Knoppix vers l'image
# que nous nous sommes en train de construire
FILES="boot.msg f2 f3 german.kbd isolinux.cfg linux24 logo.16"
(cd knoppix/boot/isolinux/; cp -f $FILES $TMPDIR/floppy/)

# Copiez-y le nouveau miniroot - nous y sommes presque !
cp minirt24.gz floppy/

# Renommez et affinez le fichier de config pour vous conformer à l'usage
# de SYSLINUX
mv floppy/isolinux.cfg floppy/syslinux.cfg
[ -n "$LANGUAGE" ] && perl -pi -e "s/lang=de/lang=$LANGUAGE/g" floppy/syslinux.cfg
[ -n "$LANGUAGE" ] && perl -pi -e "s/lang=us/lang=$LANGUAGE/g" floppy/syslinux.cfg

# Un peu de nettoyage...
umount knoppix
umount floppy

# Rendez l'image amorçable ! Comme il ne s'agit pas d'un vrai périphérique,
# "syslinux" va se plaindre. Mais nous pouvons tenir le choc.
syslinux boot.img 2>/dev/null

# Replacez l'image d'amorçage à l'endroit d'où nous sommes partis
cp -i boot.img $ORIG_DIR

printf "Nous pouvons créer la disquette d'amorçage avec 'dd if=boot.img of=/dev/fd0'.\n"

Ben est le rédacteur en chef de la Linux Gazette et il est membre de l'« Answer Gang ».

Ben est né à Moscou (Russie) en 1962. Il a commencé à s'intéresser à l'électricité dès l'âge de 6 ans, ce qu'il a rapidement démontré en enfonçant une fourchette dans une prise et en déclenchant un incendie, et depuis il n'a jamais cessé de s'intéresser à la technologie. Il travaille avec les ordinateurs depuis les Temps Anciens, lorsqu'il fallait souder soi-même des composants sur des cartes à circuits imprimés et que les programmes devaient tenir dans 4 ko de mémoire. Il serait heureux de payer un bon prix tout psychologue capable de le guérir des cauchemars récurrents qu'il a gardés de cette époque.

Ses expériences suivantes comprennent la création de programmes dans près d'une douzaine de langages, la maintenance de réseaux et de bases de données pendant l'approche d'un ouragan, sans oublier l'écriture d'articles pour des publications allant des magazines de voile aux journaux technologiques. Après une croisière de 7 ans dans l'Atlantique et les Caraïbes ainsi que des passages sur la côte Est des États-Unis, il a désormais jeté l'ancre à St-Augustine (Floride). Instructeur technique chez Sun Microsystems©, il travaille également à titre privé comme consultant open source et développeur web. Ses passe-temps actuels sont notamment l'aviation, le yoga, les arts martiaux, la moto, l'écriture et l'histoire romaine. Son Palm Pilot© est truffé d'alarmes dont la plupart contiennent des points d'exclamation.

Il travaille avec Linux depuis 1997 et lui doit d'avoir perdu tout intérêt sur les retombées d'une guerre nucléaire dans le nord-est du Pacifique.

Notes

[1]

Il reste le problème du pointeur de souris très étrange sous Knoppix sur le VAIO® : il ressemble à un carré de 100x100 points d'interférences TV. On m'a indiqué qu'il est possible de bidouiller le fichier de configuration X pour corriger ce problème, mais je n'ai pas encore eu le temps de m'y consacrer. Peut-être la rédaction de cet article me fournira-t-elle une motivation suffisante...