# [SCRIPT]Maintenir à jour son noyau

## _Seth_

Salut,

  En bon fainéant, je n'aime pas trop faire 2 fois les mêmes recherches sur les différentes commandes à réaliser lorsque je souhaite mettre à jour mon noyau. J'ai donc écrit ce script, qui est loin d'être parfait mais qui me simplifie pas mal la vie.

   I - Préambule

1- il faut avoir installé sys-kernel/module-rebuild, l'outil qui simplifie la vie pour la gestion des modules externes.

2- idem pour app-admin/eselect, mais difficile d'être sous gentoo  sans connaitre cet utilitaire.

3- je n'apporte aucune garantie sur le bon fonctionnement de ce programme et il est sous GPL-2.

4- ça fait longtemps que je dit qu'il faut que j'écrive un script comme celui là, je l'ai fait et posté ici mais s'il me convient bien, il n'est pas dit que vous le trouviez adapté pour vos besoin. Je reste à votre disposition pour intégrer des modifs.

5- avoir monté préalablement sa partoche /boot.

   II - Installation

  Copier le script dans un fichier (je l'appelle make-new-kernel, ça vaut ce que ça vaut). Lui donner les droits en execution et le rendre accessible dans le PATH :

```
chmod a+x make-new-kernel && ln -s /la/ou/est/make-new-kernel /usr/local/sbin/make-new-kernel
```

   III - Utilisation

  Ce script ne fait vraiment pas grand chose, mais m'évite d'avoir à retrouver le fichier texte avec les commandes-qui-vont-bien ou d'aller fouiller les how-to... 

  Il faut l'exécuter en root, choisir le kernel qu'on veut installer, le configurer (faut pas rêver !) et si on est satisfait de la configuration réalisée, on peut lancer l'installation proprement dite. Vous remarquerez que j'utilise le make install qui ajoute automatiquement le bzImage, le .config et le System.map (avec les noms qui vont bien) dans /boot. Il suffit d'une entrée qui pointe sur vmlinuz (et vmlinuz.old) dans votre grub.conf ou lilo.conf et le tour est joué : vous avez une entrée qui pointe vers le dernier noyau compilé (vmlinuz) et vers le précédent (vmlinuz.old). Ensuite le script se charge de re-emerger les modules externes (alsa, nvidia, ...) et termine par reconfigurer correctement le module nvidia. Comme je n'ai pas d'autres chipsets, je n'ai pas inclus l'étape de reconfigurations pour les ATI, etc...

   IV - Le script

```
#!/bin/bash

#/usr/local/sbin/make-new-kernel

PROG=`basename ${0}`

CURRENT_KERNEL=`uname -r`

if [ ! `whoami` = "root" ]; then

   echo "Error: you must be root." >&2

   exit 1

fi

if [ $# -eq 1 ] ; then

   echo "Usage: $PROG" >&2

   exit 1

fi

echo "Current kernel : $CURRENT_KERNEL"

echo "Populating current module list"

module-rebuild populate

eselect kernel list

echo -n "Which kernel do you want to install ? "

read ANSWER

#echo $ANSWER

eselect kernel set $ANSWER

if [ $? -ne 0 ] ; then

         echo "Unknown value for kernel selection" >&2

         exit 1

fi

cd /usr/src/linux

READY=0

while [ $READY -eq 0 ]; do

         make menuconfig

         echo -n "Are you ready to install the kernel with this configuration (No, configure it again/Yes/Exit) ? "

         read ANSWER

         case "$ANSWER" in

                  [yY]) echo "Let's start the kernel compilation"

                        READY=1 ;;

                  [eE]) echo "Good bye !"

                        exit 0 ;;

                  *)    echo "Configure the kernel again" ;;

         esac

done

make && make modules_install install

echo; echo "Rebuild external modules"; echo;

module-rebuild rebuild

echo; echo -n "Do you use Nvidia drivers (N/Y)? "

read ANSWER

case $ANSWER in

         [yY]) echo "Update nvidia module"; echo;

               modprobe nvidia && modules-update && eselect opengl set nvidia

               echo; echo "Ok, all done, quit."; echo;;

         *) echo "Only Nvidia supported yet"

            echo "You must finish the reconfiguration of your modules by yourself ;) Quitting"; echo;;

esac

exit 0
```

PS: je ne sais plus s'il est toujours recommandé de faire la majeure partie de la manip en user normal (et pas en root), si vous pouvez m'éclairer sur le sujet   :Question: 

----------

