Gentoo : installation GRUB2 / GPT / RAID1.2 / root-on-LVM

Quelques notes suite à l’installation d’une Gentoo avec un partitionnement GPT, mirroir RAID1 et un rootfs ext4 sur LVM. mdadm utilisant par défaut les métadonnées au format 1.2, l’autodétection kernel ne peut fonctionner (seul le format 0.9 est reconnu). Il est donc nécessaire de créer un initramfs sur mesure pour assembler les périphériques RAID et monter le LVM.
Correction du stage3
Le stage3 ne crée pas les périphériques /dev nécessaires au lancement d’udev avec le baselayout-2. Il faut donc effectuer ces commandes avant le montage bind de /dev :
livecd # cd /mnt/gentoo/dev
livecd # mknod --mode=600 console c 5 1
livecd # mknod --mode=666 null c 1 3
livecd # mknod --mode=666 zero c 1 5
Il faut également ajouter le lancement d’udev par openrc :
livecd # cd /mnt/gentoo/etc/runlevels/sysinit
livecd # ln -s /etc/init.d/udev udev
Configuration kernel
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers --->
Generic Driver Options --->
[*] Maintain a devtmpfs filesystem to mount at /dev
Device Drivers --->
Multiple devices driver support (RAID and LVM) --->
[*] RAID support
[*] Autodetect RAID arrays during kernel boot
[*] RAID-1 (mirroring) mode
[*] Device mapper support
[*] Snapshot target
File systems --->
[*] The Extended 4 (ext4) filesystem
[*] Use ext4 for ext2/ext3 file systems
[*] Ext4 extended attributes
[*] Ext4 POSIX Access Control Lists
[*] Ext4 Security Labels
File systems --->
Partition Types --->
[*] Advanced partition selection
[*] EFI GUID Partition support
Configuration portage
# more /etc/portage/package.keywords
=sys-boot/grub-9999 **
# more /etc/portage/package.use
sys-apps/busybox static
sys-boot/grub static device-mapper
sys-fs/lvm2 static
sys-fs/mdadm static
Le flag static est à utiliser pour l’ensemble des binaires présents dans l’initramfs.
Création de l’initramfs
# mkdir /usr/src/initramfs
# cd /usr/src/initramfs
# mkdir -p bin lib dev dev/mapper dev/vc etc mnt/root proc root sbin sys
# cp -a /dev/{null,zero,console,tty,urandom} dev/
# ln -s ../console /usr/src/initramfs/dev/vc/0
# cp /bin/busybox bin/
# cp /sbin/mdadm sbin/
# cp /sbin/lvm.static sbin/lvm
Le fichier de configuration de mdadm est à créer :
# echo "DEVICE /dev/sd??* > /usr/src/initramfs/etc/mdadm.conf
# mdadm --examine --scan >> /usr/src/initramfs/etc/mdadm.conf
A présent le script d’init :
# more /usr/src/initramfs/init
#!/bin/busybox sh
rescue_shell() {
busybox --install -s
exec /bin/sh
}
CMDLINE=`cat /proc/cmdline`
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs none /dev
mdadm --assemble --scan /dev/md0
mdadm --assemble --scan /dev/md1
lvm vgscan --mknodes
lvm lvchange -aly vg/root
mount -o ro -t ext4 /dev/mapper/vg-root /mnt/root || rescue_shell
umount /sys
umount /proc
umount /dev
exec /bin/busybox switch_root /mnt/root /sbin/init ${CMDLINE}
# chmod +x /usr/src/initramfs/init
Tous les périphériques RAID doivent être assemblés par ce script même s’ils ne sont pas montés. Au niveau LVM, il faut évidemment faire correspondre le nom de votre VG + LV root. Point important, je démonte le /dev sous peine d’avoir des erreurs de permissions d’udev.
L’image est ensuite construite et installée dans /boot :
# mount /boot
# find . -print0 | cpio --null -ov --format=newc | gzip -9 > /boot/initrd-2.6.38-hardened-r6
Configuration GRUB
Le fichier grub.cfg est à régénérer :
# grub-mkconfig -o /boot/grub/grub.cfg
Il faut bien vérifier que l’option initrd est détectée par GRUB :
# more /boot/grub/grub.cfg|grep initrd
initrd /initrd-2.6.38-hardened-r6
initrd /initrd-2.6.38-hardened-r6
Si c’est le cas, il ne reste plus qu’à installer GRUB et à rebooter :
# grub-install /dev/sda
# grub-install /dev/sdb