====== Compilation noyau ===== ===== Généralités ===== [[http://fr.wikipedia.org/wiki/Noyau_Linux|Noyau Linux]]. ===== Compilation Noyau ===== Après la restauration du système avec les images, il faut recompiler le noyau. Deux cas de figures peuvent se passer. * Le système ne peut ne pas se lancer à cause d'une mauvaise reconnaissance matérielle, il faudra donc recompiler le noyau à partir du SRCD. Dans mon cas, la résolution utilisée par le système n’était pas supportée par mon écran ou le chipset graphique avait changé et je n'avais pas d'affichage. J'ai donc du utiliser le SRCD. * Le système boot correctement, on a accès à la console, on peut donc recompiler directement à partir du système. ==== Le système ne demarre pas : Compilation à partir du SRCD ==== Lancer le SystemRescueCD (SRCD) sur le serveur en appuyant sur entrée. Monter les volumes logiques correspondant à ''/usr'' et ''/boot'' avec les manipulations suivantes. Activer le groupe de volume LVM nommé Mon_Linux. vgchange -ay Créer le dossier de montage. mkdir /mnt/destination Monter les deux volumes suivants. mount -t ext3 /dev/Mon_Linux/Ma_Racine /mnt/destination/. mount -t ext3 /dev/Mon_Linux/Mes_Programmes /mnt/destination/usr mount -t ext3 /dev/Mon_Linux/Mon_Temporaire /mnt/destination/tmp mount -t ext3 /dev/Mon_Linux/Mes_Logs /mnt/destination/var Après ces manipulations, on peut se positionner en chroot sur le système installé sur le disque dur C’est à dire qu’on change de racine. On va faire les opérations comme si on était sur le système qui vient d’être restauré. A l’inverse, on ne veut pas que les commandes s’exécutent sur le CD Live. chroot /mnt/destination /bin/bash Le prompt en couleur du SRCD doit laisser place à un prompt de couleur blanche sur fond noir. A partir de maintenant, les conséquences des commandes ne sont plus répercutées sur le SRCD. mv /root/sd* /dev On est obligé de récupérer le descripteur de disque car il n’y a pas de daemon udev de lancé pour le système sur le disque avec un système live. Il faut donc récupérer le fichier correspondant au device du système stocké au préalable dans /root après la restauration). Un fichier sda1 doit être présent dans /root. Il a été ajouté après la procédure de restauration. mount /boot Exécuter ensuite une procédure standard de compilation noyau. ==== Procédure standard de compilation ==== Si le système boot ou si vous venez de l’étape précédente, voici ce qu’il faut réaliser pour compiler le noyau Linux. cd /usr/src/linux Copie du .config dans ''/root''. cp .config /root/config.orig === Nettoyage profond des sources === make mrproper Recopier le .config sauvegardé. cp /root/config.orig ./.config === Paramétrage de la configuration noyau === make menuconfig Vérifier et activer les modules suivants. * Processor type and features * SMP ? * Processor family (P4, Xeon…) * Max CPU * Memoire high Memory (4 Go ou jusqu’à 64 Go) * Device drivers * ATA/ATAPI * SCSI device support * SCSI low-level drivers * QLAxxx * LSI * SATA * Fusion MPT device support * Support LSI * Device Drivers * Network device support * Ethernet (10 or 100Mbit) * VIA Rhine support (Carte réseau D-Link DFE-530TX) * Fibre Channel driver support * Character device (tout AGP) * /dev/agpgart * Graphics support * Display device support * Display panel/monitor support * VGA 16-color graphics support * Console display driver support * Framebuffer console support Conserver le ''.config'' généré. === Générer le noyau === La configuration sera positionnée dans ''/usr/src/linux/arch/i386/boot/bzImage''. make dep clean bzImage (noyau 2.4) make clean bzImage (noyau 2.6) 2 fichiers créés. setup (c’est le System.map) system Le kernel se situe dans : ''arch/i386/boot/bzImage''. === Copier les fichiers générés en conservant les anciens === mv /boot/System.map-2.6.22.8 /boot/System.map-ancien (renommer) cp System.map /boot/System.map-2.6.22.8 mv /boot/vmlinuz-2.6.22.8 /boot/vmlinuz-ancien (renommer) cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.22.8 (écraser l’ancien. Changer i386 par l’architecture ex : x86_64) === Compiler les modules === make modules La commande compile les modules qui ne sont pas cochés comme intégrés au noyau mais noté en module (M). Elle les positionne dans ''/usr/src/linux/lib/''. Elle créée les.ko. === Installer les modules. === make modules_install Il fait une simple copie des modules de ''/usr/src/linux/lib/'' dans ''/lib/modules/nomnoyau''. Vérifier ''/etc/modules.conf'' ou ''/etc/modprobe.conf'' sur les noyaux récents (en particulier modules carte réseau et le bonding + fiber channel a mettre (?) en commentaire). === Résoudre les dépendances des modules du noyau === depmod –ae –F /boot/System.map-2.6.22.8 2.6.22.8 Le dernier paramètre correspond au nom du dossier dans lequel se trouve les modules du kernel Linux (''/lib/modules/2.6.22.8''). === Créer le fichier de ramdisk === mv /boot/initrd-2.6.22.8.img /boot/initrd.img-ancien (renommer) mkinitrd /boot/initrd-2.6.22.8.img 2.6.22.8 Le dernier paramètre correspond au nom du dossier dans lequel se trouve les modules du kernel Linux (''/lib/modules/2.6.22.8''). Ce fichier contient les modules bas niveaux nécessaires au démarrage de la machine. Par exemple si on utilise LVM, il faut qu’il soit intégré au démarrage pour pouvoir monter les volumes. De même que le module SCSI doit être présent si on dispose de disque SCSI. Il ne reste plus que l’installation de GRUB avant de redémarrer pour tester. === Installation GRUB via SRCD === Uniquement si compilation à partir du SRCD. Installer le GRUB. Modifier le fichier ''/boot/grub/menu.lst'' en ajoutant les lignes nécessaires pour booter sur le nouveau noyau. grub-install /dev/sda umount /boot mv /dev/sda* /root #ceci car il n’y a pas de daemon udev de lancé pour le système sur le disque avec un système live Sortir du chroot et rebooter. exit reboot === Installation GRUB sur un système normalement booté === Installer le GRUB. Modifier le fichier ''/boot/grub/menu.lst'' en ajoutant les lignes nécessaires pour booter sur le nouveau noyau. grub-install /dev/sda reboot ===== Récapitulatif des commandes de compilation noyau ===== ==== Installation noyau methode debian ==== uname -a uname -r uname -v df -h cd /usr/src/ ll dpkg -l binutils apt-get install binutils bzip2 dpkg -l binutils dpkg -l bzip2 dpkg -l | grep kernel cat /etc/group cat /etc/group | less cat /proc/cpuinfo apt-cache search ^linux-source apt-cache search ^kernel-source apt-cache search ^linux-source apt-get install lshw lshw > /root/infos.txt vi /root/infos.txt apt-cache search ^linux-source apt-get install linux-source-2.6.26 tar jxvf linux-source-2.6.26.tar.bz2 chmod 700 linux-source-2.6.26 apt-get remove linux-source-2.6.26 df -hT apt-get clean df -hT ln -s /usr/src/linux-source-2.6.26/ linux vi /usr/src/linux/Documentation/Changes apt-get install gcc make binutils util-linux module-init-tools oprofile e2fsprogs procps udev libncurses5-dev kernel-package initramfs-tools cramfsprogs debconf-utils build-essential cd linux ls -a apt-get clean man apt-get cp -i /boot/config-2.6.24-1-686 . ll make menuconfig diff /boot/config-2.6.24-1-686 .config cp .config /root/saveconfig mv /root/saveconfig /root/config-2.6.26 ll /root/ make-kpkg --initrd --revision1 --append-to-version=-i2ldebian kernel-image make-kpkg --initrd --revision 1 --append-to-version=-i2ldebian kernel-image cd .. dpkg --install linux-image-2.6.26-i2ldebian_1_i386.deb cd linux make-kpkg clean cd arch/x86/boot/ uname -a reboot uname -a cp /usr/src/linux/.config /root/saveconfigOK-2.6.26 cd cp /usr/src/linux-image-2.6.26-i2ldebian_1_i386.deb /root/ cd du -sh * mkdir noyau mv linux-image-2.6.26-i2ldebian_1_i386.deb noyau/ mv saveconfigOK-2.6.26 noyau/ mv config_i2ldebian_2.6.26 noyau/ reboot vi infos.txt uname -a lsmod cd noyau/ reboot cd noyau/ cd /usr/src/linux/arch/x86/boot/ du -sh * cd .. du -sh * du -sh boot/ vi boot/install.sh htop vi /boot/grub/menu.lst vi /etc/fstab du -sh boot/ ll boot/ ll /lib/modules/ ll /lib/modules/ cd /usr/src/ cd linux vi Makefile cd /boot/ rm config-2.6.26-i2lmain rm vmlinuz-2.6.26-i2lmain rm System.map-2.6.26-i2lmain cd noyau/ cd .. cd /usr/src/ cd linux cd ==== Installation noyau manuelle ==== apt-get remove --purge linux-image-2.6.26-i2ldebian_1_i386.deb apt-get remove --purge linux-image-2.6.26-i2ldebian_1 uname -a apt-cache search linux-image apt-get remove --purge linux-image-2.6.26-i2ldebian vi /boot/grub/menu.lst cd /usr/src/linux ll .config make mrproper cp /root/noyau/saveconfigOK-2.6.26 ./.config ll .config vi Makefile make menuconfig cd .. du -sh * rm linux-image-2.6.26-i2ldebian_1_i386.deb du -sh * cd linux ll arch/x86/boot/ ll drivers/ make make modules_install ll /lib/modules/ du -sh /usr/src/linux/arch/x86/boot/ du -sh /usr/src/linux/arch/x86/boot/* ll /boot/ cp -i arch/x86/boot/bzImage /boot/vmlinuz-2.6.26-i2ldebian cp -i System.map /boot/System.map-2.6.26-i2ldebian cp -i .config /boot/config-2.6.26-i2ldebian mkinitramfs -o /boot/initrd.img-2.6.26-i2ldebian /lib/modules/2.6.26-i2ldebian cd / mv vmlinuz vmlinuz.old ln -si boot/vmlinuz-2.6.26-i2ldebian vmlinuz mv initrd.img initrd.img.old ln -si boot/initrd.img-2.6.26-i2ldebian initrd.img ln -si boot/System.map-2.6.26-i2ldebian System.map cd /boot/grub/ cp menu.lst menu.lst.orig vi menu.lst update-grub //ajoute le mode single-user automatiquement tant qu'on ecrit au-dessus de ###END DEBIAN vi menu.lst uname -a reboot uname -a cd /boot/ cd history > noyau/lstcdes.txt ===== Création noyau d’un master (méthode succincte et incomplète) ===== On laisse la restauration se finir c’est l’heure de prendre le café. On change la racine sur le terminal 1 ''chroot /mnt/image /bin/bash''. La racine de ce terminal devient la racine du systeme que l’on vient de restaurer. On monte le pseudo systeme de fichier ''/proc''. mount /proc On recompile le noyau. cd /usr/src/linux make menuconfig Vérifier les options processeur (mémoire haute type et nombre de processeurs). Vérifier le support du port parallèle Vérifier le support de la disquette. Vérifier le support des disques IDE + chipset IDE (lspci –v) Vérifier le nombre de disque et CDROM SCSI + le driver low level scsi (attention qlogic ce n’est pas la cf fusion). Vérifier les cartes réseau et le bonding Le type de souris /clavier (ps2/usb) Verifier Carte son chipset graphique Verifier support usb Sauvergarder la config make dep clean bzImage cp System.map /boot/System.map-2.4.32 cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.32 make modules make modules_install Vérifier ''/etc/modules.conf'' (en particulier modules carte réseau et le bonding + fiber channel a mettre ( ?) en commentaire). depmod –ae –F /boot/System.map-2.4.32 2.4.32 rm /boot/initrd-2.4.32.img mkinitrd /boot/initrd-2.4.32.img 2.4.32 Réinstaller le chargeur de démarrage. ALT+F2 ->umount /mnt/image/boot ALT+F1->mount /boot ALT+F1->grub-install /dev/sda Vérifier les droits sur ''/tmp'' (''drwxrwxrwt'' sinon les positionner avec chmod 777 /tmp) chmod o+t /tmp Vérification du fichier ''/etc/fstab'' (en particulier la partition de boot). Sauvegarder et vérifier ce que pointe ''/dev/cdrom'' du fichier (''ls –al /dev/cdrom''). Si on utilise l’emulation scsi-ide il devra etre un lien symbolique vers ''/dev/scd0'' si on ne l’utilise pas (Fedora Core) un lien vers ''/dev/hd(a|b|c|d)'' en fonction du controleur. Vérification du fichier ''/etc/grub.conf'' en particulier le cdrom avec le module ide-scsi (hdx=ide-scsi) dans la ligne du kernel de la legacy pour une RH9. Vérfication du fichier ''/boot/grub/device.map'' (périphérique disque dur a positionner en scsi (ligne (hd0) /dev/sdxy)). Vérification du fichier ''/etc/sysconfig/grub'' (idem que précédemment). Utiliser Kudzu pour le matériel. /etc/init.d/kudzu start /etc/init.d/kudzu stop rm /dev/cdrom1 enlever la ligne du cdrom1 dans ''/etc/fstab''. cd /etc/ grep –R "#serveur_" * Et remplacer toutes occurrences par les informations demandées ATTENTION A LA CASSE sur ''/etc/krb5.conf'' et config authentification radius apache. cd /var/www grep –R "#serveur_" * Et remplacer l’occurence par l’information demandée. mv ifenslave ifenslave.old mv ifenslave ifenslave On demonte tout et on redémarre. umount /boot umount /proc exit (on sort du chroot) umount /mnt/image/var umount /mnt/image/tmp umount /mnt/image/opt umount /mnt/image/home umount/mnt/image/data umount /mnt/usbstor1 umount /mnt/image reboot et enlever le cdrom ^^. ===== Commandes pour intégrer des modules/drivers additionnels lors de la compilation et l'installation du noyau ===== ==== Méthode Debian et méthode manuelle ==== Je pars du principe qu'on est dans ''/usr/src'' et qu'on a déjà récupéré les sources du noyau. tar jxvf linux-source-2.6.26.tar.bz2 #extraire les sources du noyau. ln -s /usr/src/linux-source-2.6.26/ linux #lier linux à nos sources. vi /usr/src/linux/Documentation/Changes #vérifier qu'on a tout ce qui faut pour compiler en vérifiant la section "requirements". cp -i /boot/config-2.6.24-1-686 ./.config #récupérer si possible une configuration déjà faite. Sinon, moi j'installe lshw pour connaître le matériel et je configure le noyau avec l'aide de cet outil. zcat /proc/config.gz > /usr/src/linux/.config #récupérer configuration actuel du noyau. make menuconfig #outils de personnalisation du fichier .config pour sélectionner les parties qu'on veut intégrer au noyau en dur, en tant que module, ou pas du tout. vi Makefile #Mettre une valeur à EXTRAVERSION pour positionner les modules dans une autre arborescence de dossier que celle en cours. Ensuite on lance la compilation. Le fichier ''.config'' est utilisé à ce moment. C'est la partie suivante. === Méthode Debian === Compilation avec ajout de module externe à son noyau (module nvidia, module de son...) Récupérer la source du module via apt ou à la main et extraire le contenu du module dans ''/usr/src/modules/''. make-kpkg --initrd --revision 1 --append-to-version=-i2ldebian kernel-image --added_modules=nommodule #compile le noyau avec le module externe et création du paquet .deb. Enfin : dpkg --install linux-image-2.6.26-i2ldebian_1_i386.deb #installe le noyau et met grub à jour. === Méthode manuelle === Procédure standard de la compilation d'un noyau. make #compilation du noyau. make modules_install #installation des modules dans /lib/modules/nomkernel. cp -i arch/x86/boot/bzImage /boot/vmlinuz-2.6.26-i2ldebian #copie du noyau. cp -i System.map /boot/System.map-2.6.26-i2ldebian #copie du fichier de mapping. cp -i .config /boot/config-2.6.26-i2ldebian #copie de la configuration pour la sauvegarder. mkinitramfs -o /boot/initrd.img-2.6.26-i2ldebian /lib/modules/2.6.26-i2ldebian #création du fichier de RAM disque. vi /boot/grub/menu.lst #modifier le grub en fonction d'un exemple (changer uniquement les versions noyau en général). update-grub #mettre à jour grub On ne peut ajouter un module pendant l'installation. C'est seulement après l'avoir fait qu'on gère l'ajout d'un module supplémentaire. C'est la partie suivante. ===== Intégrer des modules/drivers additionnels mais de manière séparée en supposant le noyau déjà compilé ===== ==== Méthode Debian et manuelle ==== Le noyau est déjà compilé (avec les commandes make, make modules_install...) mais on veut ajouter un module qui n'est pas présent (très souvent pour supporter un matériel particulier). Procédure classique de compilation d'un module (détaillé dans les fichiers README ou INSTALL avec les sources). Récupérer le module du constructeur du module sur son site officiel par exemple. En utilisateur de base : tar xvp archive ./configure --help //voir les options de configurations ./configure --prefix=endroit_ou_installer make //compiler les sources su -c root 'make install' //installation Les commandes précédentes vont ajouter le module automatiquement dans l'arborescence des modules du noyau ''/lib/modules/2.6.26...../kernel/drivers/categorie_modules....'' Une fois cette opération réalisée, on peut charger le module avec la commande modprobe nommodule. lsmod #pour vérifier. Si tout fonctionne bien, on peut faire en sorte que le module soit chargé au démarrage en ajoutant le nom du module au fichier ''/etc/modprobe.conf'' (qui a remplacé le fichier ''/etc/modules'' mais pas dans toutes les distributions). Il est intéressant aussi de pouvoir enlever un ancien module qui ne fonctionne pas bien. rmmod nommodule #suppression en live. blacklist nommodule #à mettre dans /etc/modprobe.d/blacklist pour supprimer de manière pérenne. De plus en plus, les modules externes sont fournis avec le système DKMS (Dynamic Kernel Module Support) pour la gestion dynamique des modules. Ce système développé par l'équipe Dell permet de conserver un module additionnel d'un noyau dans les autres noyaux. Ainsi, à chaque mise à jour ou compilation d'un nouveau noyau le module additionnel fait partie du nouveau noyau obtenu. On utilise cet outil via le gestionnaire de paquet de la distribution ce qui limite les manipulations manuelles et simplifie l'installation. ===== Méthode/outils pour ajouter un patch au noyau ===== ==== Méthode Debian et méthode manuelle ==== Récupérer le patch. Le décompresser avec tar. Ensuite, patcher un noyau requière de se placer à la racine des sources du noyau (/usr/src/linux) puis d'entrer la commande patch. patch -p1 < /chemin/vers/le/patch La lecture de man patch est recommandée. ===== Est-il possible d'automatiser de manière périodiques toutes les étapes précédentes (détection de l'apparition d'une nouvelle version ou d'un nouveau patch du noyau, récupération des sources, configuration (basé sur l'ancienne configuration par exemple), compilation et éventuellement installation ? L'installation ne sera pas automatiquement lancée par soucis de stabilité du système ===== ==== Méthode Debian et manuelle ==== Il est bien sûr possible d'automatiser toutes les tâches sans exception notamment à l'aide d'un script bash. Pour une partie des tâches c'est intéressant (récupération automatique des nouvelles sources, position dans le bon dossier, pourquoi pas alerte mail lorsque ceci est fait...) mais l'installation automatique est selon moi très peu intéressante, surtout sur un système en production. ===== Si des outils libres (scripts, paquets) existent, préciser l'URL permettant d'y accéder et joignez une copie de la page html relative à l'URL à votre compte-rendu ===== Voici un script shell qui simplifie la compilation kernel. Il utilise un mode graphique d'ailleurs nommé Xdialog. Le script suivant aurait besoin d'une modification pour prendre en compte la récupération des sources de manière automatique et on pourrait supprimer la gestion graphique et l'interactivité mise en place. Ensuite, on peut l'exécuter périodiquement à l'aide d'une tâche cron. #!/bin/sh # This little script is aimed at easing the Linux kernel compilation and # installation. No guarantee is given on its suitability to your own system # though. function check_error() { ret=$? if (( $ret != 0 )) ; then echo "Error while building the kernel..." exit $ret fi } TITLE="Linux kernel compilation" MAKE="/tmp/make.$$" TEMP="/tmp/kernel-compilation.log" echo >$TEMP /bin/ln -s /usr/bin/make $MAKE check_error ( /bin/sleep 1 cd /usr/src/linux check_error Xdialog --title "$TITLE" --yesno "make mrproper first ?" 0 0 if (( $? == 0 )) ; then echo "--------------------------------------------------------------------------" echo "Making mrproper..." echo "--------------------------------------------------------------------------" $MAKE mrproper 2>&1 check_error fi if [ -f /usr/src/linux/.config ] ; then Xdialog --title "$TITLE" --yesno "Configure the kernel ?" 0 0 if (( $? == 0 )) ; then echo "--------------------------------------------------------------------------" echo "Making xconfig..." echo "--------------------------------------------------------------------------" $MAKE xconfig 2>&1 check_error fi else echo "--------------------------------------------------------------------------" echo "Making xconfig..." echo "--------------------------------------------------------------------------" $MAKE xconfig 2>&1 check_error fi echo "--------------------------------------------------------------------------" echo "Making depends..." echo "--------------------------------------------------------------------------" $MAKE dep 2>&1 check_error echo "--------------------------------------------------------------------------" echo "Cleaning up..." echo "--------------------------------------------------------------------------" $MAKE clean 2>&1 check_error echo "--------------------------------------------------------------------------" echo "Making kernel..." echo "--------------------------------------------------------------------------" $MAKE bzImage 2>&1 check_error echo "--------------------------------------------------------------------------" echo "Making modules..." echo "--------------------------------------------------------------------------" $MAKE modules 2>&1 check_error echo "--------------------------------------------------------------------------" echo "Installing modules..." echo "--------------------------------------------------------------------------" $MAKE modules_install 2>&1 check_error VERSION=`/bin/grep UTS_RELEASE /usr/src/linux/include/linux/version.h | /bin/awk --source '{ print $3 }'` echo -n "VERSION=" >/tmp/version.$$ echo $VERSION >>/tmp/version.$$ . /tmp/version.$$ /bin/rm -f /tmp/version.$$ echo "--------------------------------------------------------------------------" echo "Installing kernel v$VERSION... " echo "--------------------------------------------------------------------------" /bin/cp -f /usr/src/linux/.config /boot/config-$VERSION 2>&1 /bin/cp -f /usr/src/linux/System.map /boot/System.map-$VERSION 2>&1 /bin/cp -f /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-$VERSION 2>&1 if [ -f /boot/module-info-`uname -r` ] && ! [ -f /boot/module-info-$VERSION ] ; then /bin/cp -f /boot/module-info-`uname -r` /boot/module-info-$VERSION 2>&1 fi Xdialog --title "$TITLE" --yesno "Make the new kernel the current one ?" 0 0 if (( $? == 0 )) ; then echo "--------------------------------------------------------------------------" echo "Making v$VERSION the current kernel... " echo "--------------------------------------------------------------------------" /bin/ln -sf /boot/System.map-$VERSION /boot/System.map 2>&1 /bin/ln -sf /boot/vmlinuz-$VERSION /boot/vmlinuz 2>&1 if [ -f /boot/module-info-$VERSION ] ; then /bin/ln -sf /boot/module-info-$VERSION /boot/module-info 2>&1 fi if [ -f /boot/map ] && [ -f /sbin/lilo ] && [ -f /etc/lilo.conf ] ; then Xdialog --title "$TITLE" --yesno "Install the new kernel with lilo ?" 0 0 if (( $? == 0 )) ; then echo "--------------------------------------------------------------------------" echo "Running lilo... " echo "--------------------------------------------------------------------------" /sbin/lilo 2>&1 fi fi fi echo "" echo "done !" ) | /bin/cat >$TEMP & PID=$! Xdialog --title "$TITLE" --no-button --smooth --tailbox $TEMP 40 80 /usr/bin/killall $MAKE 2>/dev/null kill $PID 2>/dev/null /bin/rm -f $MAKE echo >$TEMP Lien d'accès : http://www.google.com/codesearch?hl=fr&q=kernel+compil+show:L1u61kgVIDo:CC5wg5RO01Q:HQ0-r8RknkI&sa=N&cd=3&ct=rc&cs_p=http://gentoo.osuosl.org/distfiles/Xdialog-2.2.1.tar.bz2&cs_f=Xdialog-2.2.1/samples/kernel Si on n'utilise pas cette architecture de script, il existe toujours la méthode classique d'un script shell qui utilise le gestionnaire de paquetage (apt-get sous Debian) pour récupérer et installer le dernier noyau automatiquement. Il récupérera tout seul l'ancienne configuration déjà présente. apt-get -y dist-upgrade #mise à jour y compris le kernel (par défaut le kernel n'est pas pris en compte). C'est certainement la méthode la plus simple même si peut-être pas forcément la plus optimisée...