Table of Contents

Chapitre 6. Installation et démarrage à partir d'un noyau

Source: Linux Kernel in a Nutshell: 6 Installing and Booting From a Kernel

Les chapitres précédents ont montré comment télécharger et construire un noyau. Maintenant qu'on a un fichier exécutable - ainsi que tous les modules nécéssaires - il faut installer le noyau et essayer de le démarrer. Dans ce chapitre, contrairement aux précédentes, toutes les commandes doivent être exécutées en tant qu'utilisateur root. Cela peut être fait en préfixant chaque commande avec sudo, en utilisant la commande su pour devenir root, ou en se connectant en tant que root.

Pour voir si sudo est installé et si on a la configuration d'accès appropriée, procéder comme suit:

sudo ls ~/linux/linux-2.6.17.11/Makefile

Password:
Makefile

Entrer soit un nouveau mot de passe à l'invite de mot de passe, soit le mot de passe de l'administrateur système (root). Le choix dépend de la configuration de la commande sudo. Si cela réussit, la ligne suivant est renvoyée:

Makefile

on peut alors passer à la section suivante.

Si sudo n'est pas installé ou ne vous donne pas les droits appropriés, essayez d'utiliser la commande su:

su
Password:
...
exit
exit

À l'invite de mot de passe, entrer le mot de passe de l'administrateur système (root). Lorsque le programme su accepte avec succès le mot de passe, on est autorisé à tout exécuter avec les privilèges root complets. Il faut très prudent en tant que root, et ne faire que le minimum nécessaire; puis quitter le programme pour continuer en tant que compte d'utilisateur normal.

Utilisation des scripts d'installation d'une distribution

Presque toutes les distributions sont livrées avec un script appelé installkernel qui peut être utilisé par le système de construction du noyau pour installer automatiquement un noyau construit à l'emplacement approprié et modifier le chargeur de démarrage afin que rien de plus ne soit nécessaire par le développeur. 1)

Les distributions qui offrent installkernel le placent généralement dans un package appelé mkinitrd, il faut donc installer ce package si on ne trouve pas le script sur votre machine.

Lorsqu'on a construit des modules et que l'on souhaite utiliser cette méthode pour installer un noyau, entrer d'abord:

make modules_install

Cela installera tous les modules que construits et les placera à l'emplacement approprié dans le système de fichiers pour que le nouveau noyau les trouve correctement. Les modules sont placés dans le répertoire /lib/modules/KERNEL_VERSION, où KERNEL_VERSION est la version du noyau du nouveau noyau que l'on viens de construire.

Une fois les modules correctement installés, l'image principale du noyau doit être installée:

make install

Cela lancera le processus suivant:

Une fois cette opération terminée, le noyau est installé avec succès et vous pouvez redémarrer en toute sécurité et essayer votre nouvelle image de noyau. Notez que cette installation ne remplace pas les anciennes images du noyau, donc s'il y a un problème avec votre nouvelle image du noyau, l'ancien noyau peut être sélectionné au démarrage.

Installation manuelle

Si la distribution n'a pas de commande installkernel, ou lorqu'on souhaite simplement faire le travail à la main pour comprendre les étapes impliquées, voici les étapes impliquées.

Si le processus de démarrage ne fonctionne pas correctement, c'est généralement parce qu'une image initiale du disque virtuel est nécessaire. Pour créer cela correctement, utilisez les étapes au début de ce chapitre pour installer automatiquement un noyau, car les scripts d'installation de distribution savent comment créer correctement le disque virtuel à l'aide des fichiers nécessaires. scripts et outils. Parce que chaque distribution fait cela différemment, il est hors de la portée de ce livre de couvrir toutes les différentes méthodes de construction de l'image du disque virtuel.

Voici un script pratique qui peut être utilisé pour installer le noyau automatiquement au lieu d'avoir à taper les commandes précédentes tout le temps:

#!/bin/sh
#
# installs a kernel
#
make modules_install

# find out what kernel version this is
for TAG in VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION ; do
    eval `sed -ne "/^$TAG/s/ //gp" Makefile`
done
SRC_RELEASE=$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION

# figure out the architecture
ARCH=`grep "CONFIG_ARCH " include/linux/autoconf.h | cut -f 2 -d "\""`

# copy the kernel image
cp arch/$ARCH/boot/bzImage /boot/bzImage-"$SRC_RELEASE"

# copy the System.map file
cp System.map /boot/System.map-"$SRC_RELEASE"

echo "Installed $SRC_RELEASE for $ARCH"

Modification du chargeur de démarrage pour le nouveau noyau

Il existe deux chargeurs de démarrage du noyau Linux courants: GRUB et LILO. GRUB est celui qui est le plus couramment utilisé dans les distributions modernes, et fait certaines choses un peu plus facilement que LILO, mais LILO est toujours vu également.

Pour déterminer quel chargeur de démarrage le système utilise, rechercherz dans le répertoire /boot/. S'il existe un sous-répertoire grub:

ls -F /boot | grep grub

grub/

alors on utilise le programme GRUB pour démarrer. Si ce répertoire n'est pas présent, rechercher la présence du fichier /etc/lilo.conf:

ls /etc/lilo.conf

/etc/lilo.conf

Si c'est le cas, on utilise le programme LILO pour démarrer.

Les étapes impliquées dans l'ajout d'un nouveau noyau à chacun de ces programmes sont différentes, donc suivre uniquement la section qui correspond au programme que l'on utilise.

GRUB

Pour informer GRUB qu'un nouveau noyau est présent, il suffit de modifier le fichier /boot/grub/menu.lst. Pour plus de détails sur la structure de ce fichier et toutes les différentes options disponibles, consulter les pages d'informations de GRUB:

info grub

La façon la plus simple d'ajouter une nouvelle entrée de noyau au fichier /boot/grub/menu.lst est de copier une entrée existante. Par exemple, si on considère le fichier menu.lst suivant d'un système Gentoo:

timeout 300
default 0

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

title 2.6.16.11
	root (hd0,0)
	kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305

title 2.6.16
	root (hd0,0)
	kernel /bzImage-2.6.16 root=/dev/sda2 vga=0x0305

La ligne commençant par le mot title définit une nouvelle entrée de noyau, donc ce fichier contient deux entrées. Copier simplement les lignes d'une occurence du mot title à la suivante, comme:

title 2.6.16.11
	root (hd0,0)
	kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305

à la fin du fichier et modifier le numéro de version pour qu'il contienne le numéro de version du nouveau noyau que l'on viensz d'installer. Le titre n'a pas d'importance, tant qu'il est unique, mais il est affiché dans le menu de démarrage, il faut donc en faire quelque chose de significatif. Dans l'exemple, on a installé le noyau 2.6.17.11, donc la copie finale du fichier ressemble à:

timeout 300
default 0

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

title 2.6.16.11
	root (hd0,0)
	kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305

title 2.6.16
	root (hd0,0)
	kernel /bzImage-2.6.16 root=/dev/sda2 vga=0x0305

title 2.6.17.11
	root (hd0,0)
	kernel /bzImage-2.6.17.11 root=/dev/sda2 vga=0x0305

Après avoir enregistré le fichier, redémarrer le système, le titre de la nouvelle image du noyau apparaît dans le menu de démarrage. Utiliser la flèche vers le bas pour mettre en surbrillance la nouvelle version du noyau et appuyer sur Entrée pour démarrer la nouvelle image du noyau.

LILO

Pour informer LILO qu'un nouveau noyau est présent, il faut modifier le fichier de configuration /etc/lilo.conf, puis exécuter la commande lilo pour appliquer les modifications apportées au fichier de configuration. Pour plus de détails sur la structure du fichier de configuration LILO, consulter la page de manuel LILO:

man lilo

La façon la plus simple d'ajouter une nouvelle entrée de noyau au fichier /etc/lilo.conf est de copier une entrée existante. Par exemple, si on considére le fichier de configuration LILO suivant à partir d'un système Gentoo:

boot=/dev/hda
prompt
timeout=50
default=2.6.12

image=/boot/bzImage-2.6.15
	label=2.6.15
	read-only
	root=/dev/hda2

image=/boot/bzImage-2.6.12
	label=2.6.12
	read-only
	root=/dev/hda2

La ligne commençant par le mot image= définit une nouvelle entrée de noyau, donc ce fichier contient deux entrées. Copier simplement les lignes d'une occurence du mot image= à la suivante, comme:

image=/boot/bzImage-2.6.15
	label=2.6.15
	read-only
	root=/dev/hda2

à la fin du fichier et modifier le numéro de version pour qu'il contienne le numéro de version du nouveau noyau que l'on viens d'installer. Le label n'a pas d'importance, tant qu'il est unique, mais il est affiché dans le menu de démarrage, il faut donc en faire quelque chose de significatif. Dans l'exemple, on a installé le noyau 2.6.17.11, donc la copie finale du fichier ressemble à:

boot=/dev/hda
prompt
timeout=50
default=2.6.12

image=/boot/bzImage-2.6.15
	label=2.6.15
	read-only
	root=/dev/hda2

image=/boot/bzImage-2.6.12
	label=2.6.12
	read-only
	root=/dev/hda2

image=/boot/bzImage-2.6.17
	label=2.6.17
	read-only
	root=/dev/hda2

Après avoir enregistré le fichier, exécuter le programme /sbin/lilo pour écrire les modifications de configuration dans la section de démarrage du disque:

/sbin/lilo

Maintenant, le système peut être redémarré en toute sécurité. Le nouveau choix de noyau doit apparaitre dans la liste des noyaux disponibles au démarrage. Utiliser la flèche vers le bas pour mettre en surbrillance la nouvelle version du noyau et appuyer sur Entrée pour démarrer la nouvelle image du noyau.

1)
Les exceptions notables à cette règle sont Gentoo et d'autres distributions de type “from scratch”, qui attendent des utilisateurs qu'ils sachent installer eux-mêmes les noyaux. Ces types de distributions incluent de la documentation sur la façon d'installer un nouveau noyau.