web-dev-qa-db-fra.com

Comment désinstaller le noyau en cours d'exécution uniquement par commande?

Je veux installer le noyau en cours d'exécution en ligne de commande.

Supposons, par exemple, que j'ai installé un noyau personnalisé, linux-image-4.0-1-xyz et que j'ai démarré avec ce noyau (quand je fais uname -r, je reçois au-dessus de la version du noyau.

Maintenant, je veux supprimer ce noyau sans passer au noyau générique.

J'ai essayé apt purge -y linux-image-4.0-1-xyz et cela fonctionne, mais je reçois un dialogue Package Configuration qui demande

Do you want to abort removal now?

Il y a 2 options

<Yes> <No>

Comment sélectionner <No> via la ligne de commande?

2
Pulkit Lall

Utilisez le TAB touche pour déplacer le sélecteur. Utilisation ENTER pour sélectionner.

1
user535733

Note aux visiteurs: bien que ce soit possible, il est fortement déconseillé de supprimer le noyau en cours d'exécution. Si ce noyau est le seul installé, et que vous redémarrez ou que vous perdiez le pouvoir après l'avoir désinstallé ou supprimé, votre système être non amorçable et vous devrez probablement réinstaller. Le mode de récupération ne fonctionnera pas. Si cela se produit, vous pouvez démarrer à partir d'un système en direct pour récupérer vos données et éventuellement copier les fichiers du noyau aux emplacements appropriés. Il n’ya normalement aucune raison de désinstaller le noyau en cours d’exécution. Donc, vous ne devriez probablement pas suivre cette réponse :)


Vous avez indiqué dans vos commentaires que vous souhaitiez éviter la boîte de dialogue qui apparaît lorsque vous utilisez des outils de gestion de packages pour supprimer le noyau en cours d'exécution. Le seul moyen auquel je peux penser pour y parvenir est de supprimer tous les fichiers appartenant au noyau en cours d’exécution.

Nous allons utiliser locate pour trouver les fichiers du noyau. D'abord mettre à jour sa base de données.

Sudo updatedb

Si, pour une raison quelconque, vous ne souhaitez pas supprimer les enregistrements de base de données dpkg du noyau, exécutez cette commande à la place de la procédure ci-dessus:

Sudo updatedb --prunepaths=/var/lib/dpkg

Trouvez le noyau en cours d'exécution et ses modules, etc.:

locate -be $(uname -r)

Vérifiez la liste. Pour supprimer TOUS les fichiers appartenant au noyau, même les nombreux petits fichiers de /usr/src, omettez l'indicateur -b de locate. Lorsque vous avez la liste souhaitée, dirigez les résultats vers xargs pour supprimer les fichiers:

locate -be $(uname -r) -0 | xargs -0 Sudo rm -r

Pour rendre xargs interactive, vous pouvez ajouter le drapeau -p et vous demander de confirmer que vous souhaitez réellement exécuter rm sur chaque fichier de la liste. Si vous omettez -b de locate et ajoutez -p à xargs, vous confirmez longtemps.

Il n'est pas vraiment nécessaire d'utiliser les indicateurs -0 pour obtenir une sortie délimitée par un zéro, car tous ces fichiers auront des noms sains, à moins que vous-même ou quelqu'un d'autre ne les ait modifiés. Toutefois, il est recommandé d’utiliser la suppression de null avec xargs, car elle fait des erreurs si un nom de fichier a un espace.

Pour empêcher GRUB de tenter de démarrer ou de vous donner la possibilité de démarrer un noyau inexistant, mettez à jour la configuration:

Sudo update-grub

Je viens juste de tester cela, et maintenant, je tape ceci depuis le système sur lequel j'ai supprimé le noyau en cours de cette façon (j'ai démarré à partir d'un noyau Ubuntu plus ancien pour le faire, car j'utilise normalement un noyau patché qui dpkg ne sait pas et je ne veux pas le supprimer et le compiler à nouveau).

Le noyau est en RAM. Il est chargé dans RAM au démarrage, il n'a donc pas besoin de ses fichiers pour le moment. Cependant, je vais maintenant réinstaller le noyau en utilisant ces commandes:

Sudo apt update
Sudo apt install --reinstall linux-image-$(uname -r) \
                             linux-modules-extra-$(uname -r) \
                             linux-headers-$(uname -r) \
                             linux-modules-$(uname -r)

Comme vous semblez être intéressé par un processus non interactif, je mentionnerai que vous pouvez utiliser apt-get plutôt que apt si vous souhaitez capturer une sortie dans un fichier pour une utilisation ultérieure.

1
Zanna