Une clef USB polyvalente à base de Slackware Linux

2012/08/09


Table des matières

1. Créer une clef USB « multi-install »
1.1. Préparation de la clef
1.2. Installation de LILO
2. Un peu plus loin : « multi-install » + distribution live
3. Ma clef polyvalente en 2013

La Slackware est fournie avec une image contenant un système minimal et un programme d’installation destiné à être copié sur une clef USB, ladite clef pouvant alors servir de média d’installation de la distribution. Le fichier usb-and-pxe-installers/README_USB.txt contient toutes les informations nécessaires pour utiliser cette image.

Néanmoins, ces instructions ne permettent que d’installer une copie du programme d’installation (soit environ 25 Mo) sur une clef USB. Si la clef est plus volumineuse (ce qui est aujourd’hui la norme), l’espace en sus est inutilisé et inutilisable.

Inutilisable ? Pas tout-à-fait. Il est possible d’aller un peu plus loin que ne le propose le seul fichier README_USB.txt. Je montre ici comment créer une clef USB contenant plusieurs versions du programme d’installation de la Slackware (par exemple, un pour la Slackware 32 bits et un pour la 64 bits), avec la possibilité pour l’utilisateur de sélectionner au démarrage celui qu’il veut lancer.

Vous êtes bien sûr censés avoir une clef USB à votre disposition, ne contenant aucune donnée (du moins aucune donnée que vous préféreriez ne pas perdre — tout son contenu sera effacé). Branchez-là. S’il y a déjà un système de fichiers sur la clef (la plupart des clefs sont vendues pré-formattées en FAT32), ne le montez pas ; démontez-le s’il a déjà été monté automatiquement par HAL.

Utilisez fdisk (ou cfdisk, ou ce que vous voulez) pour partitionner la clef. Créez autant de partitions que vous voulez de versions différentes de l’installeur Slackware. Les partitions doivent bien sûr être assez grandes pour accueillir l’image de l’installeur, et un peu de marge ne peut pas faire de mal — pour ma part j’opte pour des partitions de 50 Mo, soit le double du minimum requis. Inutile de créer un système de fichiers sur ces partitions.

Copiez les installeurs Slackware sur chacune des partitions nouvellement créées :

# dd if=slackware-13.1/usb-and-pxe-installers/usbboot.img of=/dev/sdb1
# dd if=slackware64-13.1/usb-and-pxe-installers/usbboot.img of=/dev/sdb2
[Attention]Attention

Je vous laisse vérifier, avant de préférence, que /dev/sdb correspond bien à votre clef USB, et non par exemple à votre deuxième disque dur SATA…

À présent, montez les partitions et examinez leur contenu. Elles doivent contenir, entre autres fichiers, un noyau Linux. Lorsque l’image de l’installeur est copiée sur une clef non-partitionnée, le MBR de la clef contient le code nécessaire pour trouver et charger ce noyau au démarrage de la machine. Maintenant que nous avons plusieurs noyaux sur plusieurs partitions, pour pouvoir démarrer l’un d’eux nous avons besoin d’un chargeur de démarrage pour :

Plusieurs versions du programme d’installation sur une clef USB, c’est déjà bien pratique, mais à raison d’environ 25 Mo par installeur, on est loin de remplir une clef un tant soit peu récente. Qu’à cela ne tienne, il suffit d’utiliser la place encore disponible pour distribution GNU/Linux « Live » ! La clef se transforme ainsi en petit couteau suisse, permettant tantôt :

Parmi les distributions « live », j’ai opté pour Slax, mais ce qui suit devrait être adaptable à d’autres sans difficultés majeures.

Préparez une nouvelle partition sur la clef, d’au moins 250 Mo, et créez-y un système de fichiers VFAT. Téléchargez l’archive de la Slax for USB (version 6.1.2 à l’heure où j’écris ces lignes) et détarrez-là à la racine de la partition nouvellement créée.

Ne suivez pas les instructions du site officiel, qui vous invitent à exécuter le script boot/bootinst.sh pour rendre la clef « bootable » : cela fonctionne très bien, mais ne permettrait par la suite que de démarrer Slax, laissant de côté nos installeurs Slackware sur les autres partitions.

À la place, nous allons installer nous-mêmes LILO en reprenant le fichier de configuration que nous avons déjà utilisé ci-dessus, en y ajoutant au moins une section pour démarrer Slax. En supposant que la partition de la Slax est montée sur /mnt/tmp/slax :

image=/mnt/tmp/slax/boot/vmlinuz
  initrd=/mnt/tmp/slax/boot/initrd.gz
  label=slax
  append="ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;telinit~4 changes=/slax/"

Vous pouvez ajouter d’autres section pour démarrer la Slax dans différents modes, en changeant les paramètres passés au noyau Linux (« append »). Pour connaître les modes disponibles et les paramètres correspondants, consultez le fichier slax.cfg fourni avec la Slax.

Reste à installer LILO. La commande est la même que précédemment. Assurez-vous que toutes les partitions de la clef (celles contenant les installeurs et celle contenant la Slax) sont montées, et que leur point de montage correspond aux chemins mentionnés dans le fichier de configuration de LILO.

[Note]Note

Lors de son installation, LILO peut émettre le message d’avertissement suivant :

Warning: The initial RAM disk is too big to fit between the kernel and
   the 15M-16M memory hole.  It will be loaded in the highest memory as
   though the configuration file specified "large-memory" and it will
   be assumed that the BIOS supports memory moves above 16M.

qui nous apprend que la clef pourrait ne pas être bootable sur certaines vieilles machines. Vieilles comment ? Je ne sais pas. Je n’ai encore jamais rencontré ce problème avec aucun ordinateur. Je présume que la probabilité de trouver une machine concernée par ce problème est déjà faible et ne fera que diminuer encore plus avec le temps. Comme le message le laisse supposer, l’avertissement peut être supprimé en rajoutant l’option large-memory dans la section globale du fichier de configuration de LILO.

J’ai récemment remplacé ma clef « multi-install » de 2 Go par une nouvelle clef de 16 Go. Je l’ai partitionnée comme suit :

Cette version de la clef permet donc d’installer une Slackware64 en toute autonomie (puisqu’elle contient à la fois le programme d’installation et tous les paquets) ; elle permet également d’initier l’installation d’une Debian, une connexion Internet étant toutefois requise pour télécharger l’essentiel des paquets ; et comme précédemment, elle permet de démarrer sur un système live.

Pour mémoire, voici en bref comment reproduire cette clef, une fois le partitionnement ci-dessus réalisé (en supposant que la clef est représentée par le périphérique /dev/sdb).

Création de l’installateur Slackware :

# dd if=slackware64-14.0/usb-and-pxe-installers/usbboot.img of=/dev/sdb1
# mkdosfs /dev/sdb2
# mount /dev/sdb2 /mnt/tmp
# cp -r slackware64-14.0/{extra,kernels,patches,testing,slackware64} /mnt/tmp/
# umount /dev/sdb2

Création de l’installeur Debian :

# dd if=debian-6.0.2.i-i386-netinst.iso of=/dev/sdb3

Installation de Slax :

# mkdosfs /dev/sdb5
# mount /dev/sdb5 /mnt/tmp
# unzip slax-English-US-7.0.8-x86_64.zip -d /mnt/tmp
# rm /mnt/tmp/slax/slax.txt
# umount /dev/sdb5

Pour installer le chargeur de démarrage, commencer par monter les trois partitions contenant un système bootable dans une arborescence temporaire :

# mkdir /mnt/tmp/{slackboot,debian,slax}
# mount /dev/sdb1 /mnt/tmp/slackboot
# mount /dev/sdb3 /mnt/tmp/debian
# mount /dev/sdb5 /mnt/tmp/slax

Puis, créer le fichier de configuration de LILO comme suit :

boot=/dev/sdb
compact
lba32
large-memory
vga=769
prompt
timeout=20
install=text

# Slackware64-14.0 installer
#############################
image=/mnt/tmp/slackboot/huge.s
  initrd=/mnt/tmp/slackboot/initrd.img
  label=slackware

# Debian (i386) 6.0.2.1 (netinst)
#################################
image=/mnt/tmp/debian/install.386/vmlinuz
  initrd=/mnt/tmp/debian/install.386/initrd.gz
  label=debian

# Slax 7.0.8
############

# Normal mode with full autoconfiguration
image=/mnt/tmp/slax/slax/boot/vmlinuz
  initrd=/mnt/tmp/slax/slax/boot/initrfs.img
  label=slax
  append="load_ramdisk=1 prompt_ramdisk=0 printk.time=0 slax.flags=xmode,perch"

# Normal mode without persistent changes
image=/mnt/tmp/slax/slax/boot/vmlinuz
  initrd=/mnt/tmp/slax/slax/boot/initrfs.img
  label=slax-fresh
  append="load_ramdisk=1 prompt_ramdisk=0 printk.time=0 slax.flags=xmode"
  
# Normal mode + copy everything to RAM
image=/mnt/tmp/slax/slax/boot/vmlinuz
  initrd=/mnt/tmp/slax/slax/boot/initrfs.img
  label=slax-cp2ram
  append="load_ramdisk=1 prompt_ramdisk=0 printk.time=0 slax.flags=xmode,toram"

# Console mode
image=/mnt/tmp/slax/slax/boot/vmlinuz
  initrd=/mnt/tmp/slax/slax/boot/initrfs.img
  label=slax-text
  append="load_ramdisk=1 prompt_ramdisk=0 printk.time=0 slax.flags=perch"

Enregistrer le fichier dans /mnt/tmp/slackboot/lilo.conf puis installer effectivement LILO sur la clef :

# /sbin/lilo -b /dev/sdb -C /mnt/tmp/slackboot/lilo.conf -m /mnt/tmp/slackboot/lilo.map