En cours Modifier le comportement d'autoremove concernant les noyaux

Postez ici toutes vos demandes d’assistance.
Avatar du membre
damad
Messages : 135
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 :

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-126-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-49-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 : 517
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 Wilma | Cinnamon | 6.8.0-48-generic | Intel Core i5-6600K | 16GB | Intel HD Graphics 530 / i915 + NVIDIA GA104 [GeForce RTX 3070] / 550.120

Avatar du membre
damad
Messages : 135
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-126-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-49-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 : 517
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:41
Il 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 Wilma | Cinnamon | 6.8.0-48-generic | Intel Core i5-6600K | 16GB | Intel HD Graphics 530 / i915 + NVIDIA GA104 [GeForce RTX 3070] / 550.120

Avatar du membre
cyrille
Administrateur du site
Messages : 13454
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par cyrille »

Tu peux logguer ton script de façon général mais le log ne sera sans doute pas très parlant

Sinon +1 avec @Armaggion

L'idée :

Code : Tout sélectionner

Si ta commande fonctionne
alors
 log -> ça fonctionne
sinon
 log -> erreur
Exemple de log

Code : Tout sélectionner

#!/bin/bash
if touch /var/log 2>/dev/null
then
   echo "$(date)  : Commande réalisée" >> log.txt
else
   echo "$(date)  : Echec commande" >> log.txt
fi
Un log est toujours utile, de même gestion d'erreur
Exemple simple, que deviens ton script si lancé et que le serveur apt n'est accessible ?
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
cyrille
Administrateur du site
Messages : 13454
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Modifier le comportement d'autoremove concernant les noyaux

Message par cyrille »

Attention dans ton script

Entrée menu

Code : Tout sélectionner

		${PREFIX}tmp1.sh
		${PREFIX}tmp2.sh
		echo -e "\nLes fichiers tmp1.sh et tmp2.sh sont dans le dossier ${PREFIX}.\n"
		;;
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)

Donc soit tu changes de nom (préfixe avec $(date) par exemple, soit tu complète le fichier plutôt que de le remplacer (opérateur >> plutôt que > dans les redirectionsà
)

++
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
damad
Messages : 135
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-126-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-49-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 : 517
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 Wilma | Cinnamon | 6.8.0-48-generic | Intel Core i5-6600K | 16GB | Intel HD Graphics 530 / i915 + NVIDIA GA104 [GeForce RTX 3070] / 550.120

Avatar du membre
damad
Messages : 135
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-126-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-49-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 : 517
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 Wilma | Cinnamon | 6.8.0-48-generic | Intel Core i5-6600K | 16GB | Intel HD Graphics 530 / i915 + NVIDIA GA104 [GeForce RTX 3070] / 550.120

Avatar du membre
damad
Messages : 135
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-126-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-49-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