Ce qui suit décrit la façon dont j'ai installé Debian sur mon petit portable. Cet article ne s'étend pas sur la procédure complète d'installation, mais uniquement sur la façon d'initier la procédure d'installation par le réseau à partir d'une clé usb.
Même en présence d'un lecteur optique, elle évite d'avoir à graver un cdrom et de télécharger une image iso complète, je l'utilise donc chaque fois que c'est possible.
La manière de procéder suppose de disposer au départ d'un PC fonctionnant sous Linux1 et de Grub version 1 (dénommé aussi Legacy version)2. Je l'ai réalisé à partir d'un système déjà présent sur le portable, pour y installer sur une autre partition une version plus récente du système. Mais on peut tout aussi bien préparer cette clé à partir d'un autre PC, et s'en servir pour installer le système sur un PC tout nu.
La procédure ne demande même pas de télécharger une image de cdrom, juste un noyau et une image disque initiale, ces deux fichiers ne représentant ensemble qu'une dizaine de Mo, on peut donc se contenter d'une clé de capacité extrêmement réduite.
On commence par formatter la clé si nécessaire. On choisit le vfat pour qu'elle reste lisible depuis un OS indigent.
spirou:/home/gv# cat /proc/partitions major minor #blocks name 8 0 117220824 sda 8 1 1004062 sda1 8 2 10008463 sda2 8 3 1 sda3 8 4 1943865 sda4 8 5 9767488 sda5 8 6 78124063 sda6 8 7 9767488 sda7 8 8 6602683 sda8 8 16 3909632 sdb 8 17 3909317 sdb1 spirou:/home/gv# mkfs.vfat /dev/sdb1 mkfs.vfat 3.0.1 (23 Nov 2008)
On monte cette clé, qui pour l'instant ne contient rien.
spirou:/home/gv# mount /dev/sdb1/ /media/usb spirou:/home/gv# ls /media/usb
On installe grub sur le secteur d'amorçage de la clé, avec une option --root-directory correspondant à la racine du système de fichier de la clé, là où elle provisoirement montée.
spirou:/home/gv# grub-install --root-directory=/media/usb /dev/sdb Installation finished. No error reported. This is the contents of the device map /media/usb/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/sda (hd1) /dev/sdb
La commande a créé sur la clé un répertoire /boot comprenant le nécessaire pour que Grub soit exécuté au boot et lance un système d'exploitation au choix.
spirou:/home/gv# ls /media/usb boot spirou:/home/gv# ls /media/usb/boot/ grub spirou:/home/gv# ls /media/usb/boot/grub default e2fs_stage1_5 jfs_stage1_5 reiserfs_stage1_5 stage2 device.map fat_stage1_5 minix_stage1_5 stage1 xfs_stage1_5
Si par hasard on avait oublié de spécifier l'option --root-directory, cette commande aurait créé (ou écrasé) ces répertoires et fichiers à la racine du système en cours d'utilisation au lieu de la clé. Ça m'est arrivé, mais sans conséquence notoire .
À ce stade, le chargeur grub de la clé ne proposera qu'une ligne de commande. Il faut donc y créer un menu pour que son utilisation soit plus aisée. Comme le portable où je réalisais l'installation comportait déjà un système Linux, j'ai commencé par recréer l'entrée de menu correspondant à ce système; ça devait permettre que cette clé serve aussi de chargeur de secours pour le système existant au cas où une fausse manoeuvre en cours d'installation rendait inopérant le secteur de démarrage du disque dur. Ça peut se faire avec un éditeur ou de la façon suivante:
spirou:/home/gv# cat <<EoF > /media/usb/boot/grub/menu.lst > title Debian GNU/Linux > root (hd0,4) > kernel /boot/vmlinuz-2.6.26-2-486 root=/dev/sda5 vga=0x311 ro 3 > initrd /boot/initrd.img-2.6.26-2-486 > boot > EoF spirou:/home/gv# cat /media/usb/boot/grub/menu.lst title Debian GNU/Linux root (hd0,4) kernel /boot/vmlinuz-2.6.26-2-486 root=/dev/sda5 vga=0x311 ro 3 initrd /boot/initrd.img-2.6.26-2-486 boot
La clé ne permet pas encore de lancer la procédure d'installation, mais on peut déjà la tester pour vérifier qu'elle permet de lancer le système existant.
...et dans mon cas, ça n'a pas marché. Pourquoi ? Parce que lorsque le PC démarre sur la clé USB, Grub considère apparemment que cette clé est le premier disque dur (hd0 dans la terminologie de Grub) et le disque dur le second (hd1). Il suffira donc de modifier l'entrée root du menu en conséquence.
Une fois que le système a redémarré, on récupère un noyau (linux)et une image initiale (initrd.gz) correspondant à une installation par le réseau.
spirou:/home/gv# cd /media/usb/boot spirou:/media/usb/boot# wget http://http.us.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/linux --2010-07-10 21:13:55-- http://http.us.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/linux Résolution de http.us.debian.org... 149.20.20.135, 204.152.191.39, 35.9.37.225, ... Connexion vers http.us.debian.org|149.20.20.135|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 1969168 (1,9M) [text/plain] Saving to: `linux' 100%[================================================>] 1.969.168 479K/s in 4,6s 2010-07-10 21:14:00 (416 KB/s) - « linux » sauvegardé [1969168/1969168] spirou:/media/usb/boot# wget http://http.us.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz --2010-07-10 21:15:34-- http://http.us.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz Résolution de http.us.debian.org... 204.152.191.39, 35.9.37.225, 64.50.233.100, ... Connexion vers http.us.debian.org|204.152.191.39|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 6168188 (5,9M) [application/x-gzip] Saving to: `initrd.gz' 100%[================================================>] 6.168.188 458K/s in 13s 2010-07-10 21:15:48 (452 KB/s) - « initrd.gz » sauvegardé [6168188/6168188] spirou:/media/usb/boot# ls -l total 7952 drwxr-xr-x 2 root root 4096 jui 10 21:06 grub -rwxr-xr-x 1 root root 6168188 jui 6 15:26 initrd.gz -rwxr-xr-x 1 root root 1969168 jui 6 15:28 linux
Il reste à préciser dans le menu comment booter sur ce noyau. Comme expliqué plus haut, grub considérera que la partition de la clé sera la première du premier disque dur, et donc (hd0,0):
title Install Debian Squeeze root (hd0,0) kernel /boot/linux initrd /boot/initrd.gz boot title Debian GNU/Linux root (hd1,4) kernel /boot/vmlinuz-2.6.26-2-486 root=/dev/sda5 vga=0x311 ro 3 initrd /boot/initrd.img-2.6.26-2-486 boot
C'est tout... le système qui se chargera en mémoire rapatriera tout le nécessaire via le net et proposera à l'utilisateur les classiques menus de sélection de la langue, du clavier, de partitionnement, etc. Une fois qu'on a compris le principe, c'est très facile et plus rapide que de graver un cdrom.
Deux remarques cependant:
title Install Squeeze root (hd0,4) kernel /boot/squeeze/linux vga=0x311 initrd /boot/squeeze/initrd.gz boot