Les nouveaux noyaux offrent d'avantage de facilité pour communiquer avec de plus en plus de matériels, ils peuvent avoir une meilleure gestion des processus, tourner plus rapidement que les anciennes versions, et corriger les erreurs des versions précédentes. Vous pourrez les trouver sur les compilations de CDROM, et sur les cites Internet (ftp). Nous allons voir maintenant, comment mettre à jour les sources d'un noyau.
Les mises à jour sont distribuées sous deux formes, on va trouver : soit des archives complètes, soit sous forme de patch.
La commande patch est utilisée pour mettre à jour un programme ou un répertoire, elle se sert pour cela d'un fichier qui a été généré avec la commande diff. L'avantage d'utiliser cette méthode, est qu'au lieu de distribuer à chaque mise à jour du noyau, une archive complète, dont la taille atteint aujourd'hui 6Mo, elle met à disposition une archive contenant seulement les modifications apportées au noyau et dont la taille moyenne elle, est de l'ordre de 200Ko. On comprendra aisément l'intérêt à utiliser les patchs, surtout si l'on doit se procurer ses mises à jour par modem.
Pour cet exemple, nous supposons que sur votre système les sources du noyau 2.0.15 sont installées, et que vous désirez passer au noyau suivant. Pour cela procurez-vous le patch-2.0.16.
Déplacez-vous dans le répertoire /usr/src, pour y copier le patch-2.0.16, et pour un patch compressé (extension .gz), tapez la commande suivante:
zcat patch-2.0.16.gz | patch -p0 [Entrée]
Si le patch que vous utilisez n'est pas compressé, tapez la commande:
patch -p0 < patch-2.0.16 [Entrée]
Vous verrez alors une liste de messages vous indiquant les modifications. Ces messages défilent généralement trop vite, et l'on a pas le temps de les lire. Cela devient gênant si des erreurs se sont produites. Vous pouvez alors ajouter à la commande patch l'option -s, et ainsi, seuls les messages d'erreurs seront affichés. Exemple:
zcat patch-2.0.16.gz | patch -p0 -s [Entrée]
Si tout s'est déroulé correctement, vous disposez maintenant des sources complètes du noyau 2.0.16.
Si vous voulez passer à l'indice 2.0.20, vous devrez appliquer encore quatre patchs en utilisant chaque fois la même méthode.
Si des erreurs se sont produites, vous pourrez toujours rechercher et regarder les fichiers ayant pour extension (.rej). Utilisez pour cela la commande find, elle vous donnera la liste avec le chemin complet de chaque fichier.
find . -name `*.rej' -print [Entrée]
Si le patch que vous avez appliqué est défectueux, pour revenir en arrière et retrouver vos sources originales, vous devez relancer la même commande patch, mais cette fois en lui ajoutant l'option -R. Pour reprendre l'exemple ci-dessus, vos sources d'origine ont l'indice 2.0.15, le patch appliqué est le 2.0.16, pour revenir en arrière après avoir appliqué une première fois le patch 2.0.16, tapez la commande:
zcat patch-2.0.16.gz | patch -p0 -R [Entrée]
Si tout s'est bien passé, vous avez de nouveau les sources 2.0.15.
La commande patch affiche le message d'erreur:
"Reversed or previously applied patch detected: Assume -R"
Vous êtes probablement en train d'appliquer de nouveau le même patch. Vous ne devez pas répondre y, cela risquerait de détruire vos sources.
Quand vous appliquez un patch sur les sources d'un noyau, la commande sauvegarde les fichiers devant être modifiés dans leur forme originale, en leur ajoutant l'extension (.orig). Après avoir appliqué quelques patchs sur les sources d'un noyau, vous devrez penser à enlever ces fichiers, pour cela vous utiliserez une des deux commandes ci-dessous.
find . -name `*.orig' -exec rm -f {} `;' [Entrée]
ou
find . -name `*.orig' | xargs rm [Entrée]