Graver (sur CD) une distribution de Linux (Skoot) (version Postscript, version PDF).


Comment graver une distribution de Linux à partir de fichiers téléchargés sur l'Internet...

La précédente version de cet article ne traitait que de la RedHat. C'est pour cela, et aussi parce que la majeure partie de mes expériences ont été faites avec cette distribution, qu'elle sera aussi souvent citée en exemple tout au long de ce topo.

Nota Bene : Je pars du principe, au cours de ce document, que l'on a pas encore de système sous Linux installé, et qu'on va donc tout faire sous Windows (95, 98, NT, etc...). Ceux qui ont déjà un UNIX connaissent probablement suffisamment bien Windows pour adapter ces explications à leur plateforme préférée.

Si je ne parle pas (ou très peu) du Macintosh, c'est tout simplement parce que les noms de fichier sous Mac sont limités à 32 caractères, et que beaucoup de fichiers d'une distribution de Linux ont plus de 32 caractères. Il est donc impossible de télécharger ou de stocker sur un Mac une distribution en bon état.

Je me dois également de faire remarquer que tout ce que je vais expliquer est certes fort intéressant, mais est peut-être aussi parfaitement inutile, surtout si on est pressé ou paresseux. En effet, des images ISO (donc prêtes à graver) de certaines distributions de Linux sont disponibles directement sur l'Internet. La RedHat, pour ne citer qu'elle, est disponible à l'adresse suivante :
ftp://ftp.sunet.se/pub/Linux/distributions/redhat.iso/
Non seulement ça va nous eviter bien des tracas pour ce qui est du téléchargement, mais en plus ces images contiennent des mises à jour récentes. Ce qui sous-entend bien évidemment que ces images n'ont pas été faites à partir de CD originaux de la RedHat, mais bien à partir du site FTP comme nous allons apprendre à le faire ensemble.
D'autre part, on vend dans le commerce des dizaines de CD-Rom sur lesquels ont été rassemblés une ou plusieurs distributions. Le prix de ces compilations de 4 à 6 CDs est généralement inférieur à 150F. Si vous êtes connecté par modem et que vous payez le téléphone, cette solution est pour vous !

Bien-sûr, l'inconvenient lorsqu'on télécharge ou qu'on achète un truc tout fait, c'est qu'on ne peut pas le modifier, qu'on a pas forcément les dernières mises à jour, etc. Et d'autre part, on apprend rien : tout ce que je vais vous raconter dans cet article, vous pourrez très probablement l'appliquer à d'autres situations et d'autres systèmes (FreeBSD par exemple).

A. Télécharger les fichiers

Il nous faut tout d'abord trouver un site rapide. Toutes les distributions de Linux ont des mirroirs de leur site officiel, répartis un peu partout dans le monde. Pour trouver ces sites mirroirs, il suffit la plupart du temps d'aller jeter un oeil sur le site web de la distribution qui nous intéresse. Le serveur de l'université de Jussieu, par exemple, est passablement rapide lorsqu'on se connecte depuis la France, et il héberge plusieurs distributions. On les trouve à l'adresse suivante :
ftp://ftp.lip6.fr/pub/linux/distributions/

Ensuite, il faut faire le choix des fichiers qu'on va télécharger et de ceux dont on va se passer. Beaucoup de distributions ont été portées sur différentes architectures, et il suffit de télécharger celle qui correspond à notre matériel. La plupart du temps, la distribution faite pour un ordinateur compatible PC est placée dans un répertoire nommé /i386 (en référence au type de processeur qui équipe ces machines). Il est très fréquent aussi qu'une distribution soit livrée avec ses sources (placées la plupart du temps dans un répertoire comme /src). Ces sources ne sont véritablement utiles que si vous êtes développeur, et que vous désirez comprendre précisément comment fonctionne Linux pour ensuite le modifier à votre sauce.

Une fois qu'on a repéré le répertoire qui nous intéresse, voyons un peu ce qu'on a dedans, ce qui est indispensable et ce qui l'est moins. La plupart du temps, on peut facilement identifier le répertoire contenant la documentation (/doc), celui qui contient les images de disquettes (/floppies ou /images), les packages (/packages), etc. Quand on tombe sur un répertoire dont on ne sait pas s'il est indispensable ou pas, la meilleur chose à faire est de regarder la taille de ce répertoire. Si elle est négligeable, autant le prendre. Si elle est importante, il vaut mieux essayer de savoir ce qu'il y a dedans avant de se lancer dans un téléchargement de trucs parfaitements inutiles pour l'usage qu'on compte faire de son Linux.

Je vais maintenant prendre l'exemple (assez typique) de ce qu'on trouve dans le répertoire /i386 d'une RedHat, et nous allons voir ensemble ce qu'il faut prendre et ce qu'il vaut mieux laisser de côté.

Pour conclure, je conseille donc de prendre les répertoire /doc, /dosutils, /images, et /RedHat (dans cet ordre, comme ca vous aurez de la lecture pendant que le reste arrive). Vous pouvez aussi ajouter d'autres fichiers sur le CD, comme par exemple les mises à jour de la RedHat, les PowerTools (ils ne sont pas sur LIP6, mais on peut les trouver par exemple sur ftp://gd.tuwien.ac.at/opsys/linux/redhat.com/dist/powertools/) , les sources du plus recent noyau stable, une photo de votre chien, etc. Tant que le CD n'est pas plein, et qu'on retrouve par ailleurs l'arborescence originale de la distribution (c'est-à-dire que le repertoire /RedHat est au premier niveau du CD), c'est bon.
B. Précautions a prendre, choses à savoir
1. La casse

Dans un systeme UNIX, la casse des noms de fichier est tres importante. Pour les ignares, la casse c'est les majuscules/minuscules. De ce fait, le fichier 'toto' n'est pas le même que le fichier 'Toto', qui est différent du fichier 'TOTO'. Contrairement à ce qui se passerait sous Windows, ces trois fichiers peuvent par exemple être présents dans le même répertoire.

Méfiez-vous donc du client FTP que vous allez utiliser pour télécharger les fichiers. Je me suis laissé dire que certains modifiaient la casse des fichiers téléchargés sans prévenir. Généralement ces mêmes clients FTP ne tiennent pas non plus compte de la casse lorsqu'ils affichent simplement les fichiers, donc il vaut mieux comparer avec deux ou trois logiciels, ou tout simplement regarder dans la doc ou dans les préférences si on parle de la casse (case en anglais).

De plus, sous Windows, les noms entièrement en majuscules ou entièrement en minuscules apparaîssent avec une majuscule au debut, et le reste en minuscules (Pour Faire Joli). Et sous MS-DOS, c'est encore pire, puisqu'ils apparaissent tronqués ("PROGRA~1" au lieu de "Program Files") et tout en majuscule. Rassurez vous, ce n'est qu'une apparence, et il est possible d'afficher la véritable casse des fichiers. La solution, si on a Internet Explorer 4 ou Windows 98, est d'ouvrir l'explorateur, et d'aller dans le menu "affichage", puis dans "option des dossiers", et enfin sur l'onglet "affichage". Là, on coche l'option "autoriser les noms en majuscules", on valide, et tous les fichiers apparaîssent alors avec leur veritable casse. On peut donc contrôler qu'ils arrivent en bon état, en comparant ce qui se trouve sur le site FTP et ce qui se trouve sur le disque dur.

2. Les liens symboliques

Sous Linux, comme dans les autres systemes UNIX, on emploie couramment des liens symboliques. Ce sont en gros des fichiers qui pointent vers d'autres fichiers, à la manière (grossièrement) des raccourcis sous Windows ou des alias sous MacOS. De tels liens sont présents dans le repertoire /misc (avec les problêmes qu'on connait, voir plus haut) et dans les répertoires /RedHat/base et /RedHat/instimage (et ses sous-répertoires). Windows ne sait pas créer de tels liens, ne les comprend pas, etc.

Mais pas de panique, car pour nous c'est complètement transparent. Si on utilise un client FTP correct, lorsqu'on lui demande de télecharger un lien, il télécharge en réalité sa cible, le fichier vers lequel il pointe. Et ça ne pose aucun probleme ; ça revient au même pour le programme d'installation de la RedHat. On pourra reconnaître de tels liens par le fait qu'ils apparaissent avec une taille de fichier très reduite sur le FTP, mais que le fichier une fois téléchargé sur le disque dur est beaucoup plus gros (puisque c'est la cible qu'on a téléchargé, et pas le lien lui-même).

Cela conduira sûrement votre client FTP, si il a une barre de progression, à arriver a un moment donné a plus de 100%. Encore une fois, ce n'est pas grave si cela ne le bloque pas. C'est même plutot rassurant, puisque ca veut dire qu'il a bien télécharge le fichier cible et non un lien illisible et inutilisable sous Windows.

3. L'attribut d'exécutable

À partir de là, ça se complique un poil. Sous Linux, les fichiers ont beaucoup plus d'attributs que sous MS-DOS. Notamment l'attribut d'exécutable, qui autorise le fichier a être exécuté. Ces attributs n'existent pas sous MS-DOS, et il n'y a aucun moyen de les y créer. Lorsque vous avez téléchargé vos fichiers, ils ont perdu de façon irrémédiable tous leurs attributs UNIX. Et ce qui est vraiment embêtant, c'est que certains des fichiers de /RedHat/base et de /RedHat/instimage ont l'attribut d'exécutable, et que le programme d'installation a besoin de les lancer. S'ils n'ont plus cet attribut, le programme ne pourra donc pas fonctionner. On verra un peu plus loin comment résoudre cet épineux problème.

C. Le gravage du CD

Ça y est, on a tous les fichiers, on a conservé l'arborescence d'origine, ils ont la bonne casse, etc... Maintenant il s'agit de mettre tout ça sur un CD, ou plutôt de créer une image ISO du futur CD.

1. Les differents formats de CD-ROM

Comme vous l'avez probablement remarqué, les fichiers ont souvent des noms longs. Sous Windows, le format de CD-ROM qui autorise les noms longs s'appelle Joliet. Malheureusement, ce format a les mêmes limitations que le système de fichiers de Windows, c'est-à-dire qu'il n'autorise pas l'attribut "exécutable". De plus, même si un Linux complet sait monter correctement les CD-Rom Joliet, il n'en va pas de même du Linux minimaliste qu'on trouve sur la disquette d'installation. Il va donc falloir créer un CD au format RockRidge, couramment utilisé sous UNIX (c'est le format des CD originaux de la RedHat). Notons que les formats Joliet et RockRidge ne sont en fait que des extensions du format ISO 9660. La phase de gravure proprement dite pourra donc être faite avec n'importe quel programme sous Windows, MS-DOS, MacOS, OS/2, Linux, etc... Tous reconnaissent le format ISO 9660, puisque c'est la norme la plus répandue pour ce qui est des CD-Rom.

2. MKISOFS

Kézako ? C'est le nom du programme qu'on va utiliser pour créer l'image ISO du futur CD. Et oui, on va devoir passer par une image ISO, c'est-à-dire un fichier unique en énorme rassemblant tous les fichiers à placer sur le CD, car mkisofs ne sait pas communiquer directement avec le graveur. Il faut donc prévoir suffisamment d'espace disque ! Cette image sera aussi volumineuse que l'ensemble des fichiers télécharges, voire un peu plus. Si ce n'est pas le cas, il vaut mieux s'inquiéter et relire la doc de MKISOFS...

MKISOFS est à l'origine un programme UNIX mais il a été porté, pour notre plus grand bonheur, sous Win32 (donc Windows 9x et NT). On le trouve à l'adresse suivante :
ftp://ftp.ge.ucl.ac.uk/pub/mkhfs/win32/
Puisqu'on a parfois du mal à le trouver, j'ai décidé de le mettre en plus en local sur ce serveur :
mkisofs-1.12b5-win32.zip (247Ko)

C'est un programme en ligne de commande, mais ce n'est PAS un programme MS-DOS. On dit pas Win32 pour rien. On va donc l'utiliser sous Windows 9x ou NT dans une fenêtre MS-DOS. Il est fourni avec toute la documentation nécessaire, mais je vais quand même faire le point sur ce qu'il est important de savoir.

3. MOUNT

MKISOFS nous venant du monde UNIX, il ne reconnaît pas les chemins d'accès MS-DOS. Il est donc fourni avec un autre utilitaire, MOUNT.EXE, qui va nous permettre de "monter" nos disques durs ou certains répertoires dans une sorte de système de fichiers UNIX virtuel. Mount.exe est assez simple a utiliser : la premiere fois qu'on le lance, il va monter 'A:' 'B:' et 'C:' respectivement en '/dev/fd0', '/dev/fd1', et '/'. Si on tapes 'mount' tout seul, une liste des répertoires déjà montés s'affiche. Pour monter un autre répertoire, on tape 'mount' suivi du répertoire MS-DOS puis du répertoire virtuel UNIX.
Par exemple, si on a mis toute l'arborescence des fichiers télechargés dans le répertoire 'C:\Linux\Redhat 5\' (c'est-à-dire que c'est dans ce repertoire que se trouve les sous-répertoires /RedHat, /doc, /images, etc.), on pourra le monter comme étant '/rh' dans notre système de fichiers virtuel en tapant:
mount c:\linux\redhat~1 /rh

Vous connaissez Windows, donc vous êtes familiers avec ces histoires de '~1'. On devra aussi utiliser un autre répertoire pour indiquer au programme l'endroit où il devra mettre l'image ISO du CD qu'il va créer. On pourra par exemple mettre cette image dans la racine du disque 'C:', qui est deja monte en '/'. C'est l'exemple que je vais utiliser par la suite, donc autant faire comme ça : la distribution en '/rh', et la future image en '/'.

4. Creation de l'image ISO

Maintenant que vous avez lu la doc de MKISOFS (vous l'a vez lu, hein?) et que vous avez monté vos répertoires, on va pouvoir passer aux choses sérieuses. Voici un exemple de ligne de commande qui créera une image ISO avec tout ce dont on a besoin pour installer la RedHat :
mkisofs.exe -r -o /image.iso /rh

Ici aussi, la casse est très importante, car l'option '-r' est differente de '-R'. C'est d'ailleurs l'option la plus importante : elle va demander au programme de créer une image au format RockRidge avec l'attribut "exécutable" pour TOUS les fichiers. Ce n'est guere orthodoxe, certes, mais puisqu'on travaille sous Windows on n'a pas d'autre choix. L'option '-o' suivi du nom de l'image spécifie l'endroit où l'image doit être créée (en l'occurence c:\image.iso, puisqu'on a monte 'C:' en '/'). Le dernier '/rh' indique au programme où se trouvent les fichiers àinclure dans l'image.

Comme on est allé un peu vite, je vous propose de relire tout àa plus lentement.

Vous y êtes? On continue, et on complique les choses. Voici un autre exemple de ligne de commande, un peu plus fonctionnel :
mkisofs.exe -r -J -o /image.iso /rh

L'ajout du '-J' va créer une image au format Joliet. On aura donc un CD hybride, avec les extensions RockRidge et Joliet à la fois. On aura ainsi les noms de fichier longs quand on lira le CD sous Windows, et les attributs nécessaires quand il sera monté sous Linux parle programme d'installation. Si on ne veut pas de cette option pour une raison ou pour une autre, on pourra utiliser '-T' à la place du '-J', qui créera alors un fichier TRANS.TBL dans chaque dossier. C'est l'option qu'ont choisi les petits gars de chez RedHat, et leur CD est plein de ces fichiers TRANS.TBL. À l'interieur de ces fichiers on retrouvera une liste de tous les fichiers du répertoire, avec les correspondances des noms MS-DOS et des noms et attributs RockRidge. On peut aussi utiliser les deux options ensemble (-T et -J), même si je ne vois plus trop l'intérêt.

Vous pouvez donner n'importe quel nom a votre CD (voir la doc de MKISOFS pour savoir comment lui donner un nom), et vous pouvez ou non fermer la session. Quoiqu'il en soit, je me suis tres peu penché sur la question de l'ajout de session, mais ça a l'air casse-gueule... Autant ne pas prendre de risques, c'est-à-dire remplir le disque au maximum et le fermer (au prix que coûte un CD vierge, on va pas chipoter).

5. Burn, baby, burn...

Maintenant qu'on a notre image ISO, on va pouvoir la graver avec a peu pres n'importe quel programme. Attention, il ne s'agit pas de mettre le fichier "image.iso" sur un CD, mais bien son contenu :-). La plupart des programmes savent le faire. J'ai utilise pour ma part EasyCD Creator d'Adaptec, mais je sais que Nero, CDRWin, et Toast savent le faire également.

On a maintenant terminé, on a tout ce qu'il faut pour installer notre RedHat. Pour ceux qui sont pressés et qui ne veulent pas en savoir plus, "Bonne gravure, et bonne installation !". Pour les autres, suivez le guide.

D. Création d'un CD bootable
1. Généralités

Comme je trouve tout de même très ennuyeux de booter depuis une disquette (c'est long), et comme on n'a pas toujours de DOS installé sur une machine pour utiliser le fichier /dosutils/autoboot.bat, j'ai pensé à utiliser l'image de la disquette de boot pour créer un CD bootable. La plupart des cartes mères supportent maintenant cette fonction. Pour savoir si votre carte mère sait booter depuis un CD, allez simplement jeter un œil dans votre BIOS et regardez si l'option existe. Si oui, activez-la et lisez donc la suite.

Un CD bootable est un CD au format ISO 9660 auquel on a rajouté quelques informations. Une norme existe, c'est Eltorito. Un CD a la norme Eltorito contient dans sa structure l'image d'une disquette bootable. Cette image doit faire 1440 octets exactement. Lorsque l'ordinateur démarre, et qu'il lit le CD, si il voit que c'est un Eltorito, il va partir à la recherche de cette image, et émuler un lecteur de disquette virtuel. Il va ensuite booter depuis ce lecteur de disquette. C'est simple, mais il fallait y penser.

2. En pratique

La ligne de commande à taper pour créer une image ISO d'un CD bootable d'une RedHat est la suivante :
mkisofs.exe -r -b images/boot.img -c images/boot.cat -o /image.iso /rh

On remarquera au passage la disparition du '-J', car le format Joliet est incompatible avec la norme Eltorito. Par contre, le '-r' est toujours aussi indispensable et ne pose pas de problèmes. On évitera aussi les options non-conformes a la norme ISO 9660 stricte ('-l', '-D', etc.), histoire de ne pas traumatiser son BIOS.

L'option '-b' va dire à mkisofs où se trouve l'image de la disquette bootable. Coup de bol, le fichier /images/boot.img de la RedHat est justement une disquette de boot, et fait exactement la taille dont la norme Eltorito a besoin (normal, c'est une disquette). Du coup, si tout a marché, lorsqu'on bootera depuis le CD on aura exactement le meme résultat que si on bootait depuis la disquette d'installation faite depuis cette image, la rapidité en plus.
Remarquons au passage que le chemin spécifié pour les options '-b' et '-c' est relatif a la racine du futur CD et non au systeme de fichier actuel, comme c'est par contre le cas pour l'option '-o'.

L'option '-c' precise le nom et l'emplacement du "boot catalog". C'est un fichier de 2048 octets qui ne sert pas à grand chose, sinon que la norme Eltorito l'exige. Ce fichier n'existe pas encore, et il est très fastidieux à faire à la main. Heureusement, lorsque le fichier n'existe pas, mkisofs le crée pour nous. Merci qui? De rien.
Dans l'exemple, j'ai dit à mkisofs de placer ce fichier dans le même répertoire que boot.img, comme ca il ne gêne personne, mais on peut le placer où on veut.

Il ne reste plus qu'à créer l'image, et à la graver comme si de rien n'etait. Avec un peu de chance, ca devrait marcher ! Et quand bien même ca ne marcherait pas, le CD reste tout à fait intègre et utilisable tant qu'on essaye pas de booter dessus.

E. Ultime remarque
L'informatique étant ce qu'elle est (plus proche du vaudou que d'une science exacte), on ne peut jamais être tout à fait sûr que tout s'est bien passé avant de graver le CD. Et si l'image ISO que nous venions de créer ne contenait pas ce que nous pensons qu'elle contient? Ca m'est arrivé quand j'ai utilisé des options peu documentées de MKISOFS ou bien quand j'ai voulu faire mon image a partir de fichiers se trouvant sur un CD-Rom et non sur un disque dur (bizarrement). Cependant, il existe des moyens de vérifier son image avant de la graver.
Sous Linux, pas de problème : un simple mount image.iso /mnt/test -o loop fait notre bonheur. Sous MS-DOS, cette manip n'est évidemment pas possible. Il existe un seul programme à ma connaissance qui permette de visualiser le contenu d'une image ISO sous Windows 9x. C'est un shareware du nom de WinImage. Il existe en français, et on peut le trouver en telechargement sur le site: http://www.winimage.com.
Sur ces derniers mots, je vous souhaite un agréable téléchargement, une installation sans pépins, et beaucoup de bonheur avec votre futur Linux!


Version 2.0 (Septembre 1999)
Auteur : skoot@linux-france.org (http://skoot.online.fr)
Document d'origine : http://www.linux-france.org/article/graver_linux.html