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

Boris HUISGEN
Boris HUISGEN
|

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
Boris HUISGEN
Boris HUISGEN
Blog owner
  • #gentoo
  • #grub
  • #gpt
  • #raid
  • #lvm