Debian, installation sur un PC sans lecteur de cd

Debian

http://www.k1ka.be/pics/ane_ecole1.jpeg

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.

http://www.k1ka.be/pics/debian_netboot.png

  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

Footnotes:

1. Quoiqu"il existe une version de Grub pour Dos qui devrait premettre de rendre la clé bootable sous Windows, mais je n'ai pas testé. http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos_tutorial
2. Quoique ça puisse sans doute être adapté sans difficultés à Grub version 2, mais là non plus, je n'ai pas testé.