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?
Utilisez le TAB touche pour déplacer le sélecteur. Utilisation ENTER pour sélectionner.
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.