Installer Gentoo sur un clef USB bootable

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Install Gentoo on a bootable USB stick and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

Amorcer Gentoo depuis une clef USB est vraiment simple. Le défi principal est de créer un disque en mémoire initial (ramdisk) et d'inclure les pilotes pour toutes les machines qui démarreront dessus. Cet article décrit comment installer Gentoo sur une clef USB qui peut être amorcée sur n'importe quel ordinateur. Cette installation fonctionnera comme une installation sur un ordinateur normal et les changements seront persistants.

Préparation

Note
Ce guide part du principe que la plateforme de départ est sous Gentoo Linux. La majorité des étapes pourront cependant être effectuées depuis n'importe quelle distribution, adaptez les façons spécifiques à Gentoo de faire (comme installer des paquets) aux façons de la distribution en question.

Commencez par installer une paire de paquets nécessaires. Les plus important d'entre eux sont un noyau et le paquet sys-kernel/genkernel :

root #emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel

Afin d'ajouter des options de variable USE, créez un nouveau fichier dans /etc/portage/package.use/ :

FILE /etc/portage/package.use/sys-apps
sys-apps/busybox static

Installez ensuite le paquet sys-apps/busybox :

root #emerge --ask sys-apps/busybox

Compiler le noyau

Faites les changements requis au noyau et compilez le. Référez vous à Configurer le noyau Linux et le guide de configuration du noyau pour plus de détails sur cette étape. Il est important de se rappeler qu'ici, un noyau généraliste est mieux car le plus général est le noyau, le plus de machines pourront démarrer avec.

Pendant la configuration, il est bien-sûr possible de compiler des modules car ils seront inclus dans le système de fichier virtuel initial et chargé au démarrage.

root #mkdir /tmp/boot
root #genkernel --firmware --busybox --disklabel --bootdir=/tmp/boot --no-symlink --all-ramdisk-modules --install all

La commande ci-dessus prendra du temps car elle compilera le noyau par défaut, créera un disque en mémoire initial, et copiera tous les fichiers dans /tmp/boot.

root #ls /tmp/boot/
initramfs-genkernel-x86_64-3.5.2-gentoo
kernel-genkernel-x86_64-3.5.2-gentoo
System.map-genkernel-x86_64-3.5.2-gentoo

Préparer la clef USB

Créez deux partitions sur le disque (en partant du principe que l'installation aura une partition /boot et / (root)). Nous partirons du principe que la clef USB est en /dev/sdb (lancez dmesg immédiatement après avoir branché la clef USB pour connaître le bloc réellement utilisé).

root #fdisk /dev/sdb
Command (m for help): d
Selected partition 1
 
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4001759, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4001759, default 4001759): +100M
 
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2):  
Using default value 2
First sector (206848-4001759, default 206848): 
Using default value 206848
Last sector, +sectors or +size{K,M,G} (206848-4001759, default 4001759): 
Using default value 4001759
 
Command (m for help): a
Partition number (1-4): 1
 
Command (m for help): p
 
Disk /dev/sdb: 2048 MB, 2048901120 bytes
255 heads, 63 sectors/track, 249 cylinders, total 4001760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x001663df
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      206847      102400   83  Linux
/dev/sdb2          206848     4001759     1897456   83  Linux
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
Syncing disks.

Vérifiez que la première partition est amorçable (une commande active le drapeau 'Boot').

Maintenant, formatez les nouvelles partitions. Dans cet exemple, nous utiliserons le système de fichier ext2 mais un autre système de fichier pour / peut être utilisé s'il est supporté par le noyau. Remarquez que durant l'opération de formatage, une étiquette est assignée aux partitions. C'est important car il permet de détecter le système de fichier racine sur des systèmes où l'allocation des noms de disques est complètement différent. C'est en lien avec l'option --disklabel de la commande genkernel plus tôt.

root #mkfs.ext2 -L GENTOO_USB_BOOT /dev/sdb1
root #mkfs.ext2 -L GENTOO_USB_ROOT /dev/sdb2

Installation de l'archive Gentoo d'étape 3

Avec le noyau, disque en mémoire et systèmes de fichiers prêt, l'installation minimale doit maintenant être installée. Cela inclus une archive d'étape 3 ainsi qu'un instantané de l'arbre Portage.

Pour cet exemple sont utilisés stage3-amd64-20120621.tar.bz2 et portage-latest.tar.xz. La partie suivante est identique à celle du manuel d'installation de Gentoo.

root #mount /dev/sdb2 /mnt/gentoo
root #cd /mnt/gentoo
root #tar -xpf ~/Download/stage3-amd64-20120621.tar.bz2
root #cd usr
root #tar -xpf ~/Download/portage-latest.tar.xz
root #mount /dev/sdb1 /mnt/gentoo/boot
root #cp /tmp/boot/* /mnt/gentoo/boot

Les sections ci-dessous couvrent des aspects d'une installation Gentoo Linux qui sont spécifiques à l'installation sur une clef USB. Il est recommandé d'utiliser les instructions du manuel Gentoo tout en gardant un œil sur cet article.

Chargeur de démarrage (Bootloader)

Afin d'amorcer le nouveau système, installez un chargeur de démarrage (bootloader) sur la clef USB.

Les sections ci-dessous donnent des exemples de configuration pour utiliser soit grub soit lilo avec syslinux.

grub

Warning
Cette méthode s'applique uniquement à l'amorçage UEFI!

Emergez grub (depuis le chroot):

(chroot) #emerge sys-boot/grub

Installez grub à l'endroit correspondant à votre plateforme. Supposons que vous ayez une machine X86_64 avec la partition EFI montée en /boot/efi, la commande suivante installera grub sur la clef USB :

(chroot) #grub-install --efi-directory /boot/efi --target x86_64-efi --removable
Warning
Notez que l'option --removable est très importante. Elle indique que la cible d'installation est un périphérique amovible. Ne l'oubliez pas au risque d'affecter votre propre système!

Si il y a un problème, relancez grub-mkconfig pour régénérer la configuration grub.

(chroot) #grub-mkconfig -o /boot/grub/grub.cfg

Modifiez le chemin cible si vous avez un répertoire de configuration grub différent.

lilo

Emergez lilo (depuis le chroot):

(chroot) #emerge sys-boot/lilo

Modifiez etc/lilo.conf pour qu'il contienne les bonnes informations.

Warning
Ces paramètres sont très importants et seront détaillés ligne par ligne.
FILE /etc/lilo.confConfigurer lilo.conf
boot=/dev/sdb              # L'emplacement de la clef USB (actuellement)
lba32                      # use lba32 addressing (ignore)
compact                    # démarrer rapidement en chargeant pleins de blocs
                           # retirer lors de problèmes avec le démarrage
prompt                     # Demander une entrée utilisateur
timeout=20                 # Temps d'attente avant la sélection automatique
default="Gentoo-352"       # Sélection par défaut après le temps d'attente
  
image=/boot/kernel-genkernel-x86_64-3.5.2-gentoo
	label="Gentoo-352"
	read-only
	root=/dev/ram0
	append="real_root=LABEL=GENTOO_USB_ROOT scandelay=5"
	initrd=/boot/initramfs-genkernel-x86_64-3.5.2-gentoo

Les lignes après image sont toutes simples mais la ligne append contient quelques options intéressantes.

  • real_root=LABEL=GENTOO_USB_ROOT utilisera l'étiquette du disque au lieu de /dev/sdb2 ce qui est important car les numéros d'appareil peuvent changer en fonction du nombre de disque dans l'ordinateur ou de disque USB.
  • L'option scandelay est aussi importante pour le démarrage USB, car les appareils USB ont besoin de temps pour être détectées par le noyau. Lorsqu'il y a de nombreux modules, le démarrage est long alors ça n'a probablement pas d'influence, mais si seulement quelques modules sont chargés, alors c'est important car le système pourrait avoir démarré avant que le noyau ne détecte le périphérique USB. Aussi, sur de nouvelles machines avec des contrôleurs USB3 il est nécessaire d'ajouter le pilote xhci_hcd (compilé au sein du noyau ou en tant que module).

À présent, installez LILO (avec la configuration) sur la clef USB :

(chroot) #lilo
Warning: /dev/sdb is not on the first disk
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.
Added Gentoo-352 ? *
2 warnings were issued.

Le premier avertissement est à attendre car nous n'installons pas le chargeur de démarrage sur un disque dur dans l'ordinateur. Le deuxième avertissement ne posera problème que sur de vieilles machines. Si c'est un problème, essayez de réduire la taille du noyau en retirant des modules.

syslinux

Warning
syslinux ne fonctionne actuellement qu'avec les systèmes de fichiers ext{2,3,4}, btrfs, ntfs et fat.
(chroot) #emerge syslinux

Installez le secteur de démarrage sur la clef USB.

(chroot) #dd bs=440 count=1 conv=notrunc if=/usr/share/syslinux/mbr.bin of=/dev/sdb

Maintenant pour configurer le chargeur de démarrage.

(chroot) #mkdir /boot/syslinux
(chroot) #nano -w /boot/syslinux/syslinux.cfg
FILE /boot/syslinux/syslinux.cfg
PROMPT 1
TIMEOUT 50
DEFAULT gentoo
 
LABEL gentoo
        LINUX ../kernel-genkernel-x86_64-3.5.2-gentoo
        APPEND root=LABEL=GENTOO_USB_ROOT scandelay=3 ro
        INITRD ../initramfs-genkernel-x86_64-3.5.2-gentoo
Note
le ro sur la ligne APPEND ci-dessus fera en sorte que la partition racine soit montée en lecture seule (ce qui est généralement préférable sur les clefs USB). Remplacez ro par rw pour que le système puisse être modifié une fois démarré (au lieu de faire monter le système de fichier en lecture-écriture plus tard).

Ensuite, installez syslinux sur la clef USB. L'option --device /dev/sdb1 n'est toutefois absolument pas nécéssaire.

(chroot) #extlinux --device /dev/sdb1 --install /boot/syslinux

fstab

FILE /etc/fstabConfigurer le fstab pour fonctionner avec des étiquettes
LABEL=GENTOO_USB_BOOT   /boot           ext2            noauto,noatime  1 2
LABEL=GENTOO_USB_ROOT   /               ext2            noatime         0 1
/dev/SWAP               none            swap            sw              0 0
/dev/cdrom              /mnt/cdrom      auto            noauto,ro       0 0
/dev/fd0                /mnt/floppy     auto            noauto          0 0

Trucs et astuces

Même s'il est possible d'utiliser le système tout juste créé comme un système Gentoo standard, cela peut valoir le coup de compiler des paquets binaires sur un hôte puis les installer sur la clef USB. Ou si le système a assez de mémoire, montez /var/tmp sur un tmpfs, la compilation sera beaucoup rapide comme ça de toute manière !