Comment ignorer la mise à jour du noyau?

25

J'utilise Ubuntu 12.04.1 LTS i686 sur VirtulBox. Chaque fois que je vérifie les mises à jour, il y a un nouveau noyau Linux. Si j'installe le nouveau noyau, je dois réinstaller Virtulbox Guest Additions et redémarrer le serveur. Je ne veux pas faire ça chaque semaine. Je sais que je peux décocher manuellement les packages du noyau dans le gestionnaire de mise à jour, mais existe-t-il un moyen d'ignorer automatiquement la mise à jour du noyau? J'ai trouvé une réponse ici, mais c'est pour Ubuntu 10. Merci.

garconcn
la source

Réponses:

18

APT (Advanced Packaging Tool) est le système qu'Ubuntu utilise pour gérer tous les logiciels installés sur un système. Il vous permet de «épingler» un package à une certaine version, afin qu'il ne soit pas mis à jour lorsque vous exécutez Update Manager.

Pour épingler vos packages de noyau, vous devez d'abord déterminer la version de votre noyau. Pour ce faire, vous pouvez ouvrir le gestionnaire de packages Synaptic dans Système> Administration.

entrez la description de l'image ici

Tapez "linux-generic" dans le champ de texte Recherche rapide et appuyez sur Entrée.

entrez la description de l'image ici

Notez le numéro indiqué dans la colonne «Version installée». Nous l'utiliserons à l'étape suivante.

Ensuite, nous devons modifier le fichier / etc / apt / preferences. Ouvrez-le en appuyant sur Alt + F2 pour afficher la fenêtre Exécuter l'application et entrez:

gksudo gedit /etc/apt/preferences

entrez la description de l'image ici

Cela ouvrira une fenêtre gedit. La fenêtre sera probablement vide, sauf si vous avez déjà joué avec APT.

Dans la fenêtre, tapez ce qui suit, en remplaçant le numéro de version par le numéro de version que vous avez trouvé dans Synaptic Package Manager.

Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic
Pin: version <insert version here>
Pin-Priority: 1001

entrez la description de l'image ici

Enregistrez le fichier et fermez gedit. Si vous ouvrez le gestionnaire de mise à jour, vous devriez voir que les mises à jour du noyau Linux sont maintenant masquées!

entrez la description de l'image ici

La source

Blocage de packages avec APT / DPKG

Rappelez-vous le nom de package de votre noyau ci-dessus.

Ouvrez un terminal et exécutez:

sudo -s

Et frappez enter.

Entrez votre mot de passe pour sudo:

echo kernel_package_name hold | dpkg --set-selections

Remplacez kernel_package_namepar le nom du noyau que vous souhaitez épingler.

Maintenant, lancez:

sudo apt-get update && sudo apt-get upgrade

Pour supprimer la broche d'Apt / Dpkg:

Ouvrez un terminal

sudo -s
echo kernel_package install | dpkg --set-selections

Remplacez kernel_package par le package que vous souhaitez épingler.

Maintenant, lancez:

sudo apt-get update &&  sudo apt-get upgrade

La source

Ce que vous essayez de faire s'appelle épingler. Les sources que je vous ai données ci-dessus contiennent l'essentiel de ce que vous devez faire pour accomplir vos tâches.

LnxSlck
la source
1
Merci pour votre réponse. Il semble que nous utilisons une version différente. Je n'ai pas Synaptic Package Manager et / etc / apt / preferences sur mon Ubuntu 12.04.
garconcn
2
Oui, Synaptic n'est plus installé par défaut.
ish
1
@garconcn, vous pouvez installer Synaptic et installer le correctif que je vous ai dit, ou relire la question, car j'ai mis plus d'informations dessus
LnxSlck
2
@LnxSlck, j'ai installé Synaptic et suivi vos instructions. Ça marche. Merci.
garconcn
16

En une ligne, c'est:

echo $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}') hold | dpkg --set-selections

Cela définira l'état de l'image du noyau de l' installation à la conservation et empêchera ainsi les mises à jour.

Christoph
la source
8

Le one-liner de Christoph ne prend pas en compte le package supplémentaire (par exemple linux-image-extra-3.13.0-45-generic). Utilisez plutôt celui-ci:

pour i dans $ (dpkg -l "* $ (uname -r) *" | grep image | awk '{print $ 2}'); fais écho $ je détiens | dpkg --set-selections; terminé
Superlexx
la source
4

En relation avec la suggestion de superlexx: cette ligne manquera le paquet "headers":

dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic

Alors que diriez-vous d'utiliser simplement ce qui suit:

dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'
linux-headers-3.13.0-48-generic
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic
cloudeliver
la source
1
Si les packages extras / en-têtes / etc ne sont pas marqués, y a-t-il des problèmes? Ou, proposez-vous de les marquer également pour être complets? Je m'attends à ce qu'Ubuntu n'essaye pas d'installer un paquet d'en-têtes mis à jour, jusqu'à ce que l'image linux soit installée (les en-têtes étant une dépendance de l'image). Je n'ai pas encore vérifié cela.
whitehat101
2
Vous pourriez collaborer sur une seule ligne au lieu d'empiler 3 réponses les unes sur les autres. = P Just sayin
cubuspl42
1
Il n'est pas nécessaire d'invoquer grep si vous utilisez déjà awk:dpkg -l "*$(uname -r)*" | awk '/kernel/{print $2}'
Javier López
1

Cela purge les packages de méta noyau qui permettent les mises à jour du noyau:

sudo apt purge $(apt-cache rdepends -i --installed linux-{headers,image}-$(uname -r)|awk '!/[0-9]/ && /^[ ]/{print $1}')

(Si vous venez de mettre à jour le noyau, vous devez d'abord redémarrer avec le nouveau noyau, ou trouver la dernière version du noyau et l'utiliser ci-dessus au lieu de "$ (uname -r)".)

Il est toutefois recommandé d'installer les mises à jour des noyaux car ce sont principalement des mises à jour de sécurité.

jarno
la source
0

Sur Ubuntu 16.04.1, le code suivant fonctionne

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i hold | sudo dpkg --set-selections; done

le est une amélioration du code de Superlexx, le sudoest ajouté

dpkg -l | grep linux-image

Tu trouveras:

salut linux-image-4.4.0-34-generic ...

salut linux-image-extra-4.4.0-34-generic ...

notez que la balise lit maintenant hi, pasii

retirer la goupille

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i install | sudo dpkg --set-selections; done
Chen Deng-Ta
la source
Belle réponse mais tu as mis sudodans le commentaire pas la commande ...
WinEunuuchs2Unix
0

Version plus courte: (Remplacez "hold" par "install" pour retirer la broche)

 dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2,"hold"}' | sudo dpkg --set-selections

Pour voir l'état de toutes les images et en-têtes du noyau, exécutez:

 dpkg --get-selections | grep "linux-"
Per Mejdal Rasmussen
la source