Résolu le 20-12-24 Modifier le comportement d'autoremove concernant les noyaux

Postez ici toutes vos demandes d’assistance générale concernant le fonctionnement de Linux Mint, qui n'entrent pas dans les autres rubriques.
Avatar du membre
damad
Messages : 168
Enregistré le : jeu. 17 août 2023 14:06
Localisation : Neuchâtel, Suisse

Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

Bonjour à toutes et à tous !! :D

Lorsqu'il y a un nouveau noyau disponible avec apt update, je l'installe, je redémarre et j'effectue autoremove pour ne garder que les deux derniers noyaux. Le problème est que j'utilise des noyaux faible latence correspondants aux noyaux de base, ce qui fait que j'ai deux noyaux pour une même version. Vous me voyez venir...

Sur Mint 21.x, autoremove me garde en fait 4 noyaux, les deux de base et les faible latence correspondants. Ce qui est très bien. Mais sur Mint 22, autoremove me garde exactement que les deux derniers noyaux. Je ne sais pas si je me fais bien comprendre...

En gros, autoremove sur Mint 21.x garde les deux dernières versions des noyaux, indépendamment du nombre de noyaux que ces versions contiennent. Alors que sur Mint 22, autoremove garde strictement les deux derniers noyaux, même s'ils sont de la même version.

Voici donc ma question : est-il possible de modifier le comportement d'autoremove concernant les noyaux ? Au minimum pouvoir définir le nombre de noyaux à garder ?

Merci d'avance pour vos réponses !!
Pc 1 : Portable CLEVO W150HRM | Linux Mint 21.1 Vera | Cinnamon 5.6.8 | 5.15.0-153-generic x86_64 | Quad core Intel Core i7-2720QM | 8 Go | 1: Intel 2nd Generation Core Processor Family Integrated Graphics 2: NVIDIA GF106M [GeForce GT 555M]

Pc 2 : Portable Acer Predator PH18-72 v: V1.06 | Linux Mint 22 Wilma | Xfce v: 4.18.1 | 6.8.0-86-generic arch: x86_64 bits | Intel Core i9-14900HX | 32 Go | 1: Intel Raptor Lake-S UHD Graphics 2: NVIDIA AD104M [GeForce RTX 4080 Max-Q / Mobile]
Avatar du membre
damad
Messages : 168
Enregistré le : jeu. 17 août 2023 14:06
Localisation : Neuchâtel, Suisse

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

Merci cyrille pour ta réponse. :D

J'avais effectivement vu qu'on pouvait modifier le nombre de noyaux à garder il y a quelques années mais la parade ne fonctionne plus.
cyrille a écrit : sam. 23 nov. 2024 11:05
mais je pense que tu peux demander à ne pas supprimer les kernels que tu veux garder en les marquant comme "hold"
J'y avais pensé, mais en dernière option, car j'imaginais quelque chose de plus simple.

Qu'à cela ne tienne, je vais m'amuser à faire un script qui automatise le "hold" et "unhold" des noyaux comme je le souhaite !! :ugeek:

Je posterai le résultat, si j'y arrive, autrement je vous solliciterai à nouveau !! ;)
Pc 1 : Portable CLEVO W150HRM | Linux Mint 21.1 Vera | Cinnamon 5.6.8 | 5.15.0-153-generic x86_64 | Quad core Intel Core i7-2720QM | 8 Go | 1: Intel 2nd Generation Core Processor Family Integrated Graphics 2: NVIDIA GF106M [GeForce GT 555M]

Pc 2 : Portable Acer Predator PH18-72 v: V1.06 | Linux Mint 22 Wilma | Xfce v: 4.18.1 | 6.8.0-86-generic arch: x86_64 bits | Intel Core i9-14900HX | 32 Go | 1: Intel Raptor Lake-S UHD Graphics 2: NVIDIA AD104M [GeForce RTX 4080 Max-Q / Mobile]
Avatar du membre
damad
Messages : 168
Enregistré le : jeu. 17 août 2023 14:06
Localisation : Neuchâtel, Suisse

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

Ces liens sont parmi ceux que j'avais trouvés. Dommage que l'ancienne parade ne fonctionne plus... :oops:

Il ne me reste plus qu'à réussir mon script, et c'est pas gagné. Mais j'y arriverai !! :ugeek:
Pc 1 : Portable CLEVO W150HRM | Linux Mint 21.1 Vera | Cinnamon 5.6.8 | 5.15.0-153-generic x86_64 | Quad core Intel Core i7-2720QM | 8 Go | 1: Intel 2nd Generation Core Processor Family Integrated Graphics 2: NVIDIA GF106M [GeForce GT 555M]

Pc 2 : Portable Acer Predator PH18-72 v: V1.06 | Linux Mint 22 Wilma | Xfce v: 4.18.1 | 6.8.0-86-generic arch: x86_64 bits | Intel Core i9-14900HX | 32 Go | 1: Intel Raptor Lake-S UHD Graphics 2: NVIDIA AD104M [GeForce RTX 4080 Max-Q / Mobile]
Avatar du membre
damad
Messages : 168
Enregistré le : jeu. 17 août 2023 14:06
Localisation : Neuchâtel, Suisse

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

En me basant sur les documentations de grep, cut et sed, j'ai finalement réussi à faire un script qui me garde les deux derniers noyaux generic et les deux derniers lowlatency.

Je ne peux pas le tester en vrai car il faut attendre des mises à jour de noyaux. Alors j'ai fait un fichier "fake" qui contient une liste de plein de noyaux fictifs et au lieu de "dpkg -l" comme source, j'ai utilisé "cat fake". Et ça fonctionne.

Voici donc mon script mais soyez indulgents, je suis débutant en scripting...

Code : Tout sélectionner

#!/bin/bash

dpkg -l | grep 'linux-image-[0-9]' | grep generic | cut -d ' ' -f 3 > tmp1.sh
dpkg -l | grep 'linux-image-[0-9]' | grep lowlatency | cut -d ' ' -f 3 > tmp2.sh

sed -i -e '1,2s/^/sudo apt-mark hold /' tmp1.sh tmp2.sh
sed -i -e '3,$s/^/sudo apt-mark unhold /' tmp1.sh tmp2.sh
sed -i '1i \#!/bin/bash' tmp1.sh tmp2.sh

chmod -R 755 tmp1.sh tmp2.sh

tmp1.sh
tmp2.sh

rm tmp1.sh
rm tmp2.sh

sudo apt autoremove --purge
Pc 1 : Portable CLEVO W150HRM | Linux Mint 21.1 Vera | Cinnamon 5.6.8 | 5.15.0-153-generic x86_64 | Quad core Intel Core i7-2720QM | 8 Go | 1: Intel 2nd Generation Core Processor Family Integrated Graphics 2: NVIDIA GF106M [GeForce GT 555M]

Pc 2 : Portable Acer Predator PH18-72 v: V1.06 | Linux Mint 22 Wilma | Xfce v: 4.18.1 | 6.8.0-86-generic arch: x86_64 bits | Intel Core i9-14900HX | 32 Go | 1: Intel Raptor Lake-S UHD Graphics 2: NVIDIA AD104M [GeForce RTX 4080 Max-Q / Mobile]
Avatar du membre
damad
Messages : 168
Enregistré le : jeu. 17 août 2023 14:06
Localisation : Neuchâtel, Suisse

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

Voici la version finale de mon script où j'ai ajouté (entre autres quelques petites modifications) la commande "sort -r" pour trier les noyaux par ordre décroissant afin d'être sûr que les derniers noyaux sont listés en premier :

Code : Tout sélectionner

#!/bin/bash

dpkg -l | grep 'linux-image-[0-9]' | grep generic | cut -d ' ' -f 3 | sort -r > tmp1.sh
dpkg -l | grep 'linux-image-[0-9]' | grep lowlatency | cut -d ' ' -f 3 | sort -r > tmp2.sh

sed -i -e '1,2s/^/sudo apt-mark hold /' tmp1.sh tmp2.sh
sed -i -e '3,$s/^/sudo apt-mark unhold /' tmp1.sh tmp2.sh
sed -i '1i \#!/bin/bash' tmp1.sh tmp2.sh

chmod 755 tmp1.sh tmp2.sh

tmp1.sh
tmp2.sh

rm tmp1.sh tmp2.sh

sudo apt-get autoremove --purge
Qu'en pensez-vous ?
Pc 1 : Portable CLEVO W150HRM | Linux Mint 21.1 Vera | Cinnamon 5.6.8 | 5.15.0-153-generic x86_64 | Quad core Intel Core i7-2720QM | 8 Go | 1: Intel 2nd Generation Core Processor Family Integrated Graphics 2: NVIDIA GF106M [GeForce GT 555M]

Pc 2 : Portable Acer Predator PH18-72 v: V1.06 | Linux Mint 22 Wilma | Xfce v: 4.18.1 | 6.8.0-86-generic arch: x86_64 bits | Intel Core i9-14900HX | 32 Go | 1: Intel Raptor Lake-S UHD Graphics 2: NVIDIA AD104M [GeForce RTX 4080 Max-Q / Mobile]
Avatar du membre
damad
Messages : 168
Enregistré le : jeu. 17 août 2023 14:06
Localisation : Neuchâtel, Suisse

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

Merci cyrille pour ces précisions enrichissantes.

Concernant la commande « sort » : après quelques recherches, j'ai trouvé la solution avec l'option « -V ». Doublé de l'option « -r », les noyaux sont triés correctement même au passage à la centaine.

Concernant les fichiers temporaires, je les garde car j'en ai besoin pour la suite de mon script.
Pour le unhold, utilise tail (c'est la dernière sortie qui t'interesse). Un exemple
En fait, c'est toutes les sorties éventuelles après les deux premières qui m'intéressent pour le unhold.

Voilà donc ce que donne mon script après corrections :

Code : Tout sélectionner

#!/bin/bash

if [ "$EUID" -ne 0 ]
	then 
		echo "Lancer ce script en mode administrateur."
	exit
fi

PREFIX=/tmp/

dpkg -l | grep 'linux-image-[0-9]' | grep generic | cut -d ' ' -f 3 | sort -V -r > ${PREFIX}tmp1.sh
dpkg -l | grep 'linux-image-[0-9]' | grep lowlatency | cut -d ' ' -f 3 | sort -V -r > ${PREFIX}tmp2.sh

sed -i -e '1,2s/^/sudo apt-mark hold /' ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh
sed -i -e '3,$s/^/sudo apt-mark unhold /' ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh
sed -i '1i \#!/bin/bash' ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh

chmod 755 ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh

echo -e "\ncontenu de tmp1.sh :\n********************\n"
cat ${PREFIX}tmp1.sh
echo -e "\ncontenu de tmp2.sh :\n********************\n"
cat ${PREFIX}tmp2.sh

menu()
{

echo -e "\n***************************************************"
echo "***************************************************"
echo "***  Exécuter et effacer tmp1.sh et tmp2.sh : 1 ***"
echo "***  Exécuter et garder tmp1.sh et tmp2.sh  : 2 ***"
echo "***  Quitter et effacer tmp1.sh et tmp2.sh  : 3 ***"
echo "***  Quitter et garder tmp1.sh et tmp2.sh   : 4 ***"
echo "***************************************************"
echo -e "***************************************************\n"

read menu

	case $menu in
	1)
		${PREFIX}tmp1.sh
		${PREFIX}tmp2.sh
		rm ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh
		;;
	2)
		${PREFIX}tmp1.sh
		${PREFIX}tmp2.sh
		echo -e "\nLes fichiers tmp1.sh et tmp2.sh sont dans le dossier ${PREFIX}.\n"
		;;
	3)
		rm ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh
		;;
	4)
		echo -e "\nLes fichiers tmp1.sh et tmp2.sh sont dans le dossier ${PREFIX}.\n"
		;;
	*)
		echo -e "\nChoix inexistant. Veuillez recommencer.\n"
		menu
		;;
	esac

}
menu

menu2()
{
	
echo -e "\n********************************"
echo "********************************"
echo "***  Exécuter autoremove : 1 ***"
echo "***  Quitter             : 2 ***"
echo "********************************"
echo -e "********************************\n"

read menu2

	case $menu2 in
	1)
		apt-get autoremove
		exit
		;;
	2)
		exit
		;;
	*)
		echo -e "\nChoix inexistant. Veuillez recommencer.\n"
		menu2
		;;
	esac

}
menu2
Il me reste une question basique mais que je n'arrive pas à résoudre : comment logger mon script ?
Modifié en dernier par damad le jeu. 28 nov. 2024 13:13, modifié 1 fois.
Pc 1 : Portable CLEVO W150HRM | Linux Mint 21.1 Vera | Cinnamon 5.6.8 | 5.15.0-153-generic x86_64 | Quad core Intel Core i7-2720QM | 8 Go | 1: Intel 2nd Generation Core Processor Family Integrated Graphics 2: NVIDIA GF106M [GeForce GT 555M]

Pc 2 : Portable Acer Predator PH18-72 v: V1.06 | Linux Mint 22 Wilma | Xfce v: 4.18.1 | 6.8.0-86-generic arch: x86_64 bits | Intel Core i9-14900HX | 32 Go | 1: Intel Raptor Lake-S UHD Graphics 2: NVIDIA AD104M [GeForce RTX 4080 Max-Q / Mobile]
Avatar du membre
Armaggion
Messages : 685
Enregistré le : jeu. 22 août 2024 16:48

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par Armaggion »

Il te suffit de rediriger le contenu de ton choix vers un fichier, en append (donc en ajout à la fin, sans écraser le contenu existant) avec l'opérateur >>

Code : Tout sélectionner

echo "ce que je veux logger" >> mylogfile.txt
En bonnes pratiques :
  • Tu peux ajouter un timestamp au début de "ce que tu veux logger" en insérant la variable

    Code : Tout sélectionner

    $(date -Iseconds)
  • Tu commences une session par un "Starting..." et tu finis par un "...Stopped" qui te permettront de facilement isoler des lancements distincts.
  • Tu peux veiller à limiter la taille de ton fichier au cas où ton script parte en boucle infinie en précédant ta commande echo par

    Code : Tout sélectionner

    tail -c 1MB mylogfile.txt; 
    (pour une taille limite de 1Mo)
PC : Desktop | Linux Mint 22.1 Xia | Cinnamon 6.4.8 | 6.8.0-63-generic | Intel Core i5-13400F | 32GB | NVIDIA AD106 [GeForce RTX 4060 Ti] / 575.64.03
Avatar du membre
damad
Messages : 168
Enregistré le : jeu. 17 août 2023 14:06
Localisation : Neuchâtel, Suisse

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

Merci Armaggion, mais ça me paraît un peu fastidieux à faire pour chaque commande... Il n'y a pas un moyen de logger tout le script d'un seul coup ?

Mais en y réfléchissant, je me demande si le logging est nécessaire, dans ce cas précis bien sûr. Car on peut considérer les fichiers tmp1.sh et tmp2.sh comme des logs. Et je les vérifie avant l'application des modifications. Et avec « apt-mark showhold », je peux voir si ça a marché. Ce que j’inclurai dans la prochaine version du script avant et après le choix de l'exécution d'autoremove. Comme ça, le script deviendra son propre log.

Je vais encore inclure le choix du nombre de noyaux de chaque type à garder (generic ou lowlatency) et je vous posterai le résultat.
Pc 1 : Portable CLEVO W150HRM | Linux Mint 21.1 Vera | Cinnamon 5.6.8 | 5.15.0-153-generic x86_64 | Quad core Intel Core i7-2720QM | 8 Go | 1: Intel 2nd Generation Core Processor Family Integrated Graphics 2: NVIDIA GF106M [GeForce GT 555M]

Pc 2 : Portable Acer Predator PH18-72 v: V1.06 | Linux Mint 22 Wilma | Xfce v: 4.18.1 | 6.8.0-86-generic arch: x86_64 bits | Intel Core i9-14900HX | 32 Go | 1: Intel Raptor Lake-S UHD Graphics 2: NVIDIA AD104M [GeForce RTX 4080 Max-Q / Mobile]
Avatar du membre
Armaggion
Messages : 685
Enregistré le : jeu. 22 août 2024 16:48

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par Armaggion »

damad a écrit : jeu. 28 nov. 2024 13:41Il n'y a pas un moyen de logger tout le script d'un seul coup
Désolé je ne comprends pas ta demande. Ecris un petit exemple du résultat attendu afin qu'on comprenne ce dont tu parles.
PC : Desktop | Linux Mint 22.1 Xia | Cinnamon 6.4.8 | 6.8.0-63-generic | Intel Core i5-13400F | 32GB | NVIDIA AD106 [GeForce RTX 4060 Ti] / 575.64.03
Avatar du membre
damad
Messages : 168
Enregistré le : jeu. 17 août 2023 14:06
Localisation : Neuchâtel, Suisse

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

@Armaggion :
Ecris un petit exemple du résultat attendu afin qu'on comprenne ce dont tu parles
Je pensais au résultat de toutes les commandes du script. Mais le résultat je l'ai déjà avec mes fichiers tmp1.sh et tmp2.sh et aussi avec apt-mark showhold avant et après l'exécution d'autoremove. Ce que j'écrivais dans mon précédant post.

@cyrille :
Exemple simple, que deviens ton script si lancé et que le serveur apt n'est accessible ?
Je n'avais pas pensé à ça. Mais je dirais que si le serveur apt est inaccessible, je n'aurais pas pu faire les mises à jour, donc je n'aurais pas pu voir si un nouveau noyau est sorti, donc je ne lancerais pas mon script.
Si tu relances ton script, même si gardé, ces fichiers seront effacés (entrée est > , donc effacera le fichier et en gégérera un nouveau)
Je sais, ils ne sont pas destinés à être gardés éternellement. Et si je redémarre, ils sont effacés aussi vu qu'ils sont dans /tmp/. C'est juste au cas où je voulais les garder entre deux utilisations du script.

@Armaggion et @cyrille :

Une question me taraude l'esprit. Que loggeriez-vous si c'était votre script ?

Et voici la nouvelle version de mon script (ajouts : choix du nombre de noyaux à garder et apt-mark showhold avant et après l'exécution d'autoremove) :

Code : Tout sélectionner

#!/bin/bash

if [ "$EUID" -ne 0 ]
	then 
		echo "Lancer ce script en mode administrateur."
	exit
fi

PREFIX=/tmp/

echo -e "\nEntrer le nombre de noyaux generic à garder :"
read a
b=$(($a + 1))
echo -e "\nEntrer le nombre de noyaux lowlatency à garder :"
read c
d=$(($c + 1))

dpkg -l | grep 'linux-image-[0-9]' | grep generic | cut -d ' ' -f 3 | sort -V -r > ${PREFIX}tmp1.sh
dpkg -l | grep 'linux-image-[0-9]' | grep lowlatency | cut -d ' ' -f 3 | sort -V -r > ${PREFIX}tmp2.sh

sed -i -e '1,'"$a"'s/^/apt-mark hold /' ${PREFIX}tmp1.sh
sed -i -e "$b"',$s/^/apt-mark unhold /' ${PREFIX}tmp1.sh
sed -i -e '1,'"$c"'s/^/apt-mark hold /' ${PREFIX}tmp2.sh
sed -i -e "$d"',$s/^/apt-mark unhold /' ${PREFIX}tmp2.sh
sed -i '1i \#!/bin/bash' ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh

chmod 755 ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh

echo -e "\ncontenu de tmp1.sh :\n********************\n"
cat ${PREFIX}tmp1.sh
echo -e "\ncontenu de tmp2.sh :\n********************\n"
cat ${PREFIX}tmp2.sh

menu()
{

echo -e "\n***************************************************"
echo "***************************************************"
echo "***  Exécuter et effacer tmp1.sh et tmp2.sh : 1 ***"
echo "***  Exécuter et garder tmp1.sh et tmp2.sh  : 2 ***"
echo "***  Quitter et effacer tmp1.sh et tmp2.sh  : 3 ***"
echo "***  Quitter et garder tmp1.sh et tmp2.sh   : 4 ***"
echo "***************************************************"
echo -e "***************************************************\n"

read menu

	case $menu in
	1)
		${PREFIX}tmp1.sh
		${PREFIX}tmp2.sh
		rm ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh
		;;
	2)
		${PREFIX}tmp1.sh
		${PREFIX}tmp2.sh
		echo -e "\nLes fichiers tmp1.sh et tmp2.sh sont dans le dossier ${PREFIX}.\n"
		;;
	3)
		rm ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh
		;;
	4)
		echo -e "\nLes fichiers tmp1.sh et tmp2.sh sont dans le dossier ${PREFIX}.\n"
		;;
	*)
		echo -e "\nChoix inexistant. Veuillez recommencer.\n"
		menu
		;;
	esac

}
menu

echo -e "\nretour de apt-mark showhold :\n*****************************\n"
apt-mark showhold

menu2()
{
	
echo -e "\n********************************"
echo "********************************"
echo "***  Exécuter autoremove : 1 ***"
echo "***  Quitter             : 2 ***"
echo "********************************"
echo -e "********************************\n"

read menu2

	case $menu2 in
	1)
		apt-get autoremove
		echo -e "\nretour de apt-mark showhold :\n*****************************\n"
		apt-mark showhold
		exit
		;;
	2)
		exit
		;;
	*)
		echo -e "\nChoix inexistant. Veuillez recommencer.\n"
		menu2
		;;
	esac

}
menu2
Merci pour votre aide précieuse !!
Pc 1 : Portable CLEVO W150HRM | Linux Mint 21.1 Vera | Cinnamon 5.6.8 | 5.15.0-153-generic x86_64 | Quad core Intel Core i7-2720QM | 8 Go | 1: Intel 2nd Generation Core Processor Family Integrated Graphics 2: NVIDIA GF106M [GeForce GT 555M]

Pc 2 : Portable Acer Predator PH18-72 v: V1.06 | Linux Mint 22 Wilma | Xfce v: 4.18.1 | 6.8.0-86-generic arch: x86_64 bits | Intel Core i9-14900HX | 32 Go | 1: Intel Raptor Lake-S UHD Graphics 2: NVIDIA AD104M [GeForce RTX 4080 Max-Q / Mobile]
Répondre