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

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par damad »

Dernier message de la page précédente :

@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]
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 »

Aujourd'hui je comprends que toutes tes sorties se font vers le terminal. Quand tu auras fermé ton terminé, tu n'auras plus aucune mémoire des actions qui ont été mises en oeuvre et des éventuelles erreurs qui auront pu se produire. Un fichier de log a pour but de pouvoir revenir sur ces informations à tout instant ultérieurement par consultation du fichier. C'est à toi de définir l'information que tu souhaites conserver parmi tout ce que tu as fait produire au termlnal, y compris la gestion d'erreur qui ne se produit généralement pas... sauf en cas d'erreur.

Linux fournit un mécanisme très simple de log via le principe des descripteurs associés aux fichiers de commande (stdout, stderr). Ca peut éventuellement te suffire et c'est ce qui se rapproche le plus de ton idée de log je pense. Jette un oeil à https://eitca.org/cybersecurity/eitc-is ... scripting/ et à la commande "tee". Ca pourrait te donner des idées intéressantes.

Sinon par défaut je dirais :
- Horodatage de début d'exécution
- Ce qui sort aujourd'hui sur le terminal et dont tu estimes que ça a de l'intérêt à être conservé pour une lecture offline ultérieure
- Horodatage de fin d'exécution

Note : C'était bien l'objet de ma question quand je te demandais de donner un exemple de ce que TOI tu voulais voir dans le log. Donc me retourner la question n'a pas de sens ;)
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 »

Hello Armaggion !!

Merci pour toutes ces informations et pour le lien. La méthode avec « 1>> » et » 2>> » me convient effectivement bien mieux.
me retourner la question n'a pas de sens
En fait si. Personnellement, je ne savais pas quoi logger. Et grâce à ta réponse, j'ai déjà inclus un horodatage et je peaufine le reste, grâce notamment à la commande « tee » effectivement très utile que je ne connaissais pas !!

Je posterai mon script modifié quand j'aurai fait les changements. A bientôt !! :D
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 »

Ah bah parfait, tant mieux, content que ça te soit utile :)
Amuse-toi bien !
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 »

Hello !!

J'ai presque fini mon script mais j'aimerais avoir une confirmation de ma bonne compréhension de « tee » avant d'aller plus loin.

Si j'ai bien compris, « 1>> » est l'équivalent de « | tee -a » indépendamment de l'affichage de la commande à logger dans le terminal ou pas. Dans la même logique, est-ce que « |& tee -a » est l'équivalent de « 1>> » ET « 2>> » ?

C'est ce que j'ai cru comprendre mais je n'en suis pas sûr car je n'ai trouvé que cette référence https://www.hostinger.fr/tutoriels/comm ... c-exemples.

Merci d'avance pour vos réponses !!

@Armaggion : oui, je m'amuse comme un gosse et j'apprends plein de choses !! :D
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 »

Hello !

Ah, zut...

Le problème des questions sur forum... Bon bah désolé, on n'est pas dans une conversation instantanée et du coup tu auras déjà testé vingt fois toutes les combinaisons avant même qu'un aidant se connecte. On va voir ça du bon côté : tu as les bases pour écrire du script désormais ;)

Et bien il ne me reste plus qu'à tu souhaiter un bon voyage sur Linux !
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 »

Un forum est un marathon, pas un sprint. Je ne sais plus qui avait dit ça sur ce forum dernièrement mais c'est très vrai. Evidemment que j'ai tout retourné dans tous les sens, même avant de poster, mais je voulais juste être sûr, ce à quoi tu n'as pas explicitement répondu d'ailleurs, mais qui ne dit mot consent !! ;)

Voici donc mon script « presque » final :

Code : Tout sélectionner

#!/bin/bash

echo -e "\n*** $(date -Iseconds)  : début du script" 1>> autor-output.log

if [ "$EUID" -ne 0 ]
	then 
		echo -e "Lancer ce script en mode administrateur.\nScript aborté." | tee -a autor-output.log
	exit
fi

PREFIX=/tmp/

echo -e "\nEntrer le nombre de noyaux generic à garder :" | tee -a autor-output.log
read a
b=$(($a + 1))
echo $a 1>> autor-output.log
echo -e "\nEntrer le nombre de noyaux lowlatency à garder :" | tee -a autor-output.log
read c
d=$(($c + 1))
echo $c 1>> autor-output.log

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" | tee -a autor-output.log
cat ${PREFIX}tmp1.sh | tee -a autor-output.log
echo -e "\nContenu de tmp2.sh :\n********************\n" | tee -a autor-output.log
cat ${PREFIX}tmp2.sh | tee -a autor-output.log

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 avant autoremove :\n**********************************************\n" | tee -a autor-output.log
apt-mark showhold | tee -a autor-output.log

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

read menu2

	case $menu2 in
	1)
		echo -e "\nRetour d'autoremove :\n" 1>> autor-output.log
		apt-get autoremove |& tee -a autor-output.log
		echo -e "\nRetour de apt-mark showhold après autoremove :\n**********************************************\n" | tee -a autor-output.log
		apt-mark showhold | tee -a autor-output.log
		;;
	2)
		;;
	*)
		echo -e "\nChoix inexistant. Veuillez recommencer.\n"
		menu2
		;;
	esac

}
menu2

chown $SUDO_USER:$SUDO_USER autor-output.log

echo -e "\n*** $(date -Iseconds)  : fin du script" 1>> autor-output.log
La prochaine étape est d'attendre des mises à jour de noyaux pour confirmer définitivement le bon fonctionnement du script.

En attendant, un grand merci à @cyrille et @Armaggion pour votre aide précieuse !! :D
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 »

Hello !! :D

Un nouveau noyau est sorti, le 6.8.0-50. Donc j'ai testé mon script mais il y a un problème. Quand je décide de garder deux noyaux generic et lowlatency, les noyaux 6.8.0-49 et 6.8.0-50 sont bien marqués en hold mais autoremove me propose ceci :

Code : Tout sélectionner

Lecture des listes de paquets… 
Construction de l'arbre des dépendances… 
Lecture des informations d'état… 
Les paquets suivants seront ENLEVÉS : 
  linux-lowlatency-tools-6.8.0-49 linux-tools-6.8.0-49 
  linux-tools-6.8.0-49-generic linux-tools-6.8.0-49-lowlatency 
0 mis à jour, 0 nouvellement installés, 4 à enlever et 0 non mis à jour. 
Après cette opération, 35.7 Mo d'espace disque seront libérés. 
Souhaitez-vous continuer ? [O/n] Annulation.
Le fait de marquer les noyaux en hold ne suffit donc pas. Il faut aussi marquer les différents linux-tools correspondants. Je les ai ajoutés à mon script et voilà le retour d'autoremove :

Code : Tout sélectionner

Lecture des listes de paquets…
Construction de l'arbre des dépendances…
Lecture des informations d'état…
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
Ça semble fonctionner. Voilà donc mon script modifié :

Code : Tout sélectionner

#!/bin/bash

echo -e "\n*** $(date -Iseconds)  : début du script" 1>> autor-output.log

if [ "$EUID" -ne 0 ]
	then 
		echo -e "Lancer ce script en mode administrateur.\nScript aborté." | tee -a autor-output.log
	exit
fi

PREFIX=/tmp/

echo -e "\nEntrer le nombre de noyaux generic à garder :" | tee -a autor-output.log
read a
b=$(($a + 1))
echo $a 1>> autor-output.log
echo -e "\nEntrer le nombre de noyaux lowlatency à garder :" | tee -a autor-output.log
read c
d=$(($c + 1))
echo $c 1>> autor-output.log

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 's/image/tools/' ${PREFIX}tmp1.sh > ${PREFIX}tmp3.sh
sed 's/image/tools/' ${PREFIX}tmp2.sh >> ${PREFIX}tmp3.sh

sed -i '1i \#!/bin/bash' ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh ${PREFIX}tmp3.sh

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

echo -e "\nContenu de tmp1.sh :\n********************\n" | tee -a autor-output.log
cat ${PREFIX}tmp1.sh | tee -a autor-output.log
echo -e "\nContenu de tmp2.sh :\n********************\n" | tee -a autor-output.log
cat ${PREFIX}tmp2.sh | tee -a autor-output.log
echo -e "\nContenu de tmp3.sh :\n********************\n" | tee -a autor-output.log
cat ${PREFIX}tmp3.sh | tee -a autor-output.log

menu()
{

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

read menu

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

}
menu

echo -e "\nRetour de apt-mark showhold avant autoremove :\n**********************************************\n" | tee -a autor-output.log
apt-mark showhold | tee -a autor-output.log

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

read menu2

	case $menu2 in
	1)
		echo -e "\nRetour d'autoremove :\n********************\n" 1>> autor-output.log
		apt-get autoremove |& tee -a autor-output.log
		echo -e "\nRetour de apt-mark showhold après autoremove :\n**********************************************\n" | tee -a autor-output.log
		apt-mark showhold | tee -a autor-output.log
		;;
	2)
		;;
	*)
		echo -e "\nChoix inexistant. Veuillez recommencer.\n"
		menu2
		;;
	esac

}
menu2

chown $SUDO_USER:$SUDO_USER autor-output.log

echo -e "\n*** $(date -Iseconds)  : fin du script" 1>> autor-output.log
J'attends donc la prochaine mise à jour de noyau pour confirmer que tout fonctionne comme prévu et clore ce sujet.

A bientôt !!
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 »

Hello !! :D

Suite à la sortie du noyau 6.8.0-51, j'ai pu tester la dernière version de mon script. Et tout fonctionne parfaitement !! :D Je passe donc le sujet en « résolu ».

Voici donc la dernière version de mon script :

Code : Tout sélectionner

#!/bin/bash

echo -e "\n*** $(date -Iseconds)  : début du script" 1>> autor-output.log

if [ "$EUID" -ne 0 ]
	then 
		echo -e "Lancer ce script en mode administrateur.\nScript aborté." | tee -a autor-output.log
	exit
fi

PREFIX=/tmp/

echo -e "\nEntrer le nombre de noyaux generic à garder :" | tee -a autor-output.log
read a
b=$(($a + 1))
echo $a 1>> autor-output.log
echo -e "\nEntrer le nombre de noyaux lowlatency à garder :" | tee -a autor-output.log
read c
d=$(($c + 1))
echo $c 1>> autor-output.log

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 's/image/tools/' ${PREFIX}tmp1.sh > ${PREFIX}tmp3.sh
sed 's/image/tools/' ${PREFIX}tmp2.sh >> ${PREFIX}tmp3.sh

sed -i '1i \#!/bin/bash' ${PREFIX}tmp1.sh ${PREFIX}tmp2.sh ${PREFIX}tmp3.sh

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

echo -e "\nContenu de tmp1.sh :\n********************\n" | tee -a autor-output.log
cat ${PREFIX}tmp1.sh | tee -a autor-output.log
echo -e "\nContenu de tmp2.sh :\n********************\n" | tee -a autor-output.log
cat ${PREFIX}tmp2.sh | tee -a autor-output.log
echo -e "\nContenu de tmp3.sh :\n********************\n" | tee -a autor-output.log
cat ${PREFIX}tmp3.sh | tee -a autor-output.log

menu()
{

echo -e "\n*****************************************************" | tee -a autor-output.log
echo "*****************************************************" | tee -a autor-output.log
echo "***  Exécuter et effacer les fichiers tmp*.sh : 1 ***" | tee -a autor-output.log
echo "***  Exécuter et garder les fichiers tmp*.sh  : 2 ***" | tee -a autor-output.log
echo "***  Quitter et effacer les fichiers tmp*.sh  : 3 ***" | tee -a autor-output.log
echo "***  Quitter et garder les fichiers tmp*.sh   : 4 ***" | tee -a autor-output.log
echo "*****************************************************" | tee -a autor-output.log
echo -e "*****************************************************\n" | tee -a autor-output.log

read menu

echo $menu 1>> autor-output.log

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

}
menu

echo -e "\nRetour de apt-mark showhold avant autoremove :\n**********************************************\n" | tee -a autor-output.log
apt-mark showhold | tee -a autor-output.log

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

read menu2

	case $menu2 in
	1)
		echo -e "\nRetour d'autoremove :\n********************\n" 1>> autor-output.log
		apt-get autoremove |& tee -a autor-output.log
		echo -e "\nRetour de apt-mark showhold après autoremove :\n**********************************************\n" | tee -a autor-output.log
		apt-mark showhold | tee -a autor-output.log
		;;
	2)
		;;
	*)
		echo -e "\nChoix inexistant. Veuillez recommencer.\n"
		menu2
		;;
	esac

}
menu2

chown $SUDO_USER:$SUDO_USER autor-output.log

echo -e "\n*** $(date -Iseconds)  : fin du script" 1>> autor-output.log
Encore un grand merci @cyrille et @Armaggion 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