gblend-1
Accueil du site > Docs > Système > Initramfs

Initramfs

Publié le samedi 28 février 2009, mis a jour le dimanche 2 août 2009, par Stephane Malinet

Comment créer son propore initramfs.

Introduction

L’initramfs permet d’inclure à la fin du démarrage du noyau un mini système de fichier en mémoire vous permettant de lancer par exemple des outils de detection matériel, decrypter la racine d’un système ,ou , dans mon cas, l’activation des volumes LVM pour la racine de mon système.

Installation

Il y a deux possibilités : compiler l’initramfs dans le noyau ou alors en faire une archive. Nous verrons cela au moment de la configuration du noyau.

Busybox

L’ outils de base nécéssaire à faire un initramfs est sys-apps/busybox, en plus de votre noyau bien sûr. Mais il doit impérativement être compilé statiquement, c’est-à-dire avec les bibliothèques nécéssaires inclues dans le binaire executable afin de le rendre autonome.


USE=static emerge -av1 busybox

Mini système

Passons à la création de ce mini système qui sera executé avant le vrai


cd /usr/src/
mkdir -p initramfs initramfs/{bin,dev,etc,proc,root,sbin,sys,mnt}

Maintenant mettons le binaire statique de busybox :


cd initramfs
cp -a /bin/bb bin/busybox

Init

L’init est une partie trés importante de votre iniramfs car c’est ce script qui va être exécuté par le noyau.

Créez un fichier init :


touch init && chmod +x init

Editez et mettez le code qui suit :


#!/bin/busybox sh

f_mini_udev()
{
   busybox --install -s
   echo /sbin/mdev > /proc/sys/kernel/hotplug
   mdev -s
}

# mount proc, sys and a mini udev
mount -t proc none /proc
mount -t sysfs none /sys
f_mini_udev

# do your magic here
echo Booting: Initramfs

# LVM
#lvm vgscan
#lvm vgchange -a y

# mount the root filesystem, if error then open a shell
mount -o ro,noatime,logbufs=8 /dev/sda2 /root || exec sh

# clean up
umount /proc
umount /sys

# boot the real thing
exec switch_root /root /sbin/init

le noyau

Configurez votre noyau comme ce qui suit si vous voulez y inclure l’initramfs :


General setup  --->
 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
 (/usr/src/initramfs)

Sinon en externe :


General setup  --->
 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
 ()

Créez un script vous permettant de générer facilement l’archive cpio


touch /usr/src/mkinitramfs && chmod +x /usr/src/mkinitramfs

Editez et mettez le code qui suit :


#!/bin/bash

cd /usr/src/initramfs
find . | cpio -H newc -o > ../initramfs.cpio
cd ..
cat initramfs.cpio | gzip > initramfs.gz

Executez le script :


/usr/src/initramfs

Copiez votre archive dans /boot


cp /usr/src/initramfs.gz /boot

Ensuite il vous faudra configurer votre chargeur de démarrage.

Grub

Editez le fichier /boot/grub/grub.conf :


default 0
timeout 05
splashimage=(hd0,0)/grub/splash.xpm.gz


title=GENTOO 2.6.27 Gentoo R8
root (hd0,0)
kernel /kernel-2.6.27-gentoo-r8 root=/dev/sda2 video=vesafb:mtrr:3,ywrap vga=0x31a
initrd /initramfs.gz

Il ne vous reste plus qu’à rebooter... bonne chance ;-)

Liens


Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette