Installer Gentoo sur un clef USB bootable
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.
This article covers installation of a complete, functional, Gentoo system onto a USB drive. See the LiveUSB article for instructions on creating a simple bootable drive, that can for example be used for Gentoo installation.
Préparation
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
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 (la commande a
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
Cette méthode s'applique uniquement à l'amorçage UEFI!
This method only applies to UEFI booting!
Emergez grub (depuis le chroot):
(chroot) #
emerge sys-boot/grub
(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 sur /boot/efi
, la commande suivante installera grub sur la clef USB :
(chroot) #
grub-install --efi-directory=/boot/efi --target x86_64-efi --removable
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.
(chroot) #
grub-mkconfig -o /boot/grub/grub.cfg
Change the target directory accordingly if you use a different GRUB config directory.
lilo
Emergez lilo (depuis le chroot):
(chroot) #
emerge sys-boot/lilo
Modifiez etc/lilo.conf pour qu'il contienne les bonnes informations.
Ces paramètres sont très importants et seront détaillés ligne par ligne.
boot=/dev/sdb # L'emplacement de la clef USB (actuellement)
lba32 # utiliser l'adressage lba32 (ignorer)
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="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.
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 disques dans l'ordinateur ou de disques 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 pilotexhci_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
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
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
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
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 !
See also
- Installation — an overview of the principles and practices of installing Gentoo on a running system.
- LiveUSB — explains how to create a Gentoo LiveUSB or, in other words, how to emulate a x86 or amd64 Gentoo LiveCD using a USB drive.