[Pacman] Ménage partiel des paquets (résolu)

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
Avatar de l’utilisateur
lesebas
Chu Ko Nu
Messages : 358
Inscription : ven. 01 févr. 2013, 19:16

[Pacman] Ménage partiel des paquets (résolu)

Message par lesebas »

Bonjour,

Depuis 1 an que j'ai installé mon système je n'ai jamais vidé le cache des paquets de pacman (ça m'a bien aidé quand il a fallu que je downgrade 1 ou 2 paquets...)

Je voulais savoir s'il y avait moyen de supprimer les paquets sauf les versions courantes installées et les versions -1 voir -2 ?
Dernière modification par lesebas le mar. 18 févr. 2014, 19:06, modifié 1 fois.
Seb

Archlinux sur AMD64 (xfce / lightdm)
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [Pacman] Ménage partiel des paquets

Message par FoolEcho »

«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17615
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Pacman] Ménage partiel des paquets

Message par benjarobin »

Cela ne répond pas à la question
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
lesebas
Chu Ko Nu
Messages : 358
Inscription : ven. 01 févr. 2013, 19:16

Re: [Pacman] Ménage partiel des paquets

Message par lesebas »

Nettoyage des paquets non installés du cache:

Code : Tout sélectionner

pacman -Sc
Ok j'avais vu... si je comprends bien ça supprime les paquets non installés et toutes les versions "obsolètes" des paquets installés en ne gardant que la version courante.

Moi ce que je veux c'est que si j'ai 6 versions d'un paquet, exemple chromium 32.6, 32.4 32.3...


Une commande ne garde que les N dernières versions et supprime les autres.
Seb

Archlinux sur AMD64 (xfce / lightdm)
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [Pacman] Ménage partiel des paquets

Message par FoolEcho »

benjarobin a écrit :Cela ne répond pas à la question
Arf. Je n'ai pas lu la question jusqu'au bout. :oops:
lesebas a écrit :Une commande ne garde que les N dernières versions et supprime les autres.
Il n'y a pas de commande directe pour ça à ma connaissance, il va falloir passer par un script.
Je n'ai pas regardé s'il en existait, mais je peux sûrement te pondre un truc pour me rattraper de mon inattention (dans la journée si je peux). :wink:
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
lesebas
Chu Ko Nu
Messages : 358
Inscription : ven. 01 févr. 2013, 19:16

Re: [Pacman] Ménage partiel des paquets

Message par lesebas »

Salut... oui j'ai rien trouvé, je suis sur le script, le début donne ça :

Code : Tout sélectionner

#!/bin/bash

pkgDirectory="/home/sebastien/pkg/"#"/var/cache/pacman/pkg/"
for package in $(pacman -Qq);do
        >/tmp/.package_list
	for file in $(find $pkgDirectory -name $package"*");do
		echo $file":"$(pacman -Qp $file | sed "s/^[^ ]* //g") >> /tmp/.package_list
	done
        cat /tmp/.package_list | sort -t: -k2,2 > /tmp/.package_list
done
Pour chaque paquet installé je récupére un fichier avec une colonne contenant le nom du fichier et une colonne avec la version. Ensuite je trie le fichier par numéro de version.

Il faut que j'optimise le traitement car c'est un peu long "pacman -Qp $file" décompresse le fichier pour récupérer la version.
Seb

Archlinux sur AMD64 (xfce / lightdm)
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [Pacman] Ménage partiel des paquets

Message par FoolEcho »

lesebas a écrit :Il faut que j'optimise le traitement car c'est un peu long "pacman -Qp $file" décompresse le fichier pour récupérer la version.
C'est un mauvais plan à mon avis.
Il faut traiter au maximum au fur et à mesure pour diminuer la lourdeur d'exécution.

En pseudo-code (plus certains conseils/précautions), je verrais plutôt:

Code : Tout sélectionner

Si le nombre de versions à conserver = 0 alors utilisation courageuse de pacman -Scc
Sinon si le nombre de versions à conserver = 1 alors utilisation courageuse de pacman -Sc

(ça garantit d'avoir bon, de limiter le coût et à l'avantage d'être fiable ^^)

Sinon

Lister les archives présentes (par défaut dans /var/cache/pacman/pkg/)

Pour chaque archive présente
  vérifier que l'archive existe toujours (car on va supprimer au fur et à mesure pour améliorer l'efficacité de la procédure, voir plus loin)
  si elle n'existe plus, on passe à l'archive suivante (on limite ainsi l'utilisation du pacman -Qp)

  récupération du nom du paquet (pacman -Qp effectivement)
  si paquet non installé (attention à ce niveau: bien utiliser les regexp pour éviter les soucis avec les noms de paquets qui se déclinent, genre xorg-server, python2, etc. ; a priori l'expression régulière à utiliser est pkgname$ pour éviter toute confusion), alors suppression des archives de ce nom (là encore, attention à la regexp utilisée... a priori pkgname-[0-9]* fait l'affaire et couvre l'essentiel des besoins, sauf des cas très tordus qui proviendraient à mon avis d'un mauvais nommage)

  sinon 
     si un paquet du même nom est installé, alors
        listage des archives présentes du même nom (cf. pkgname-[0-9]* )
        si nombre d'archives > nombre à conserver alors suppression des versions plus anciennes pour atteindre nombre à conserver
(je pense que ça couvre tous les cas de figure)
(je ne conserverai pas la liste des paquets traités au fur et à mesure, dans la mesure où ça sera quasiment aussi efficace/coûteux de vérifier si le nombre d'archives est correct, je pense -- plus à cause du shell en fait: dans un autre langage, il serait plus rapide de garder cette trace)

À voir si ça convient en l'état et si oui, je pense que la mise en œuvre est simple. :)

EDIT: Sinon regarde sur AUR, tu as pacleaner en python qui semble répondre à tes besoins (à part pour la beauté du geste, s'il n'y a pas besoin de réinventer la roue...). :)
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
lesebas
Chu Ko Nu
Messages : 358
Inscription : ven. 01 févr. 2013, 19:16

Re: [Pacman] Ménage partiel des paquets

Message par lesebas »

Yes pacleaner semble faire l'affaire :
Script to clean up pacmans cache in a more flexible way than pacman -Sc.

usage: pacleaner.py [-h] [--uninstalled] [--morethan] [--delete] [--number n]
[--cache_path PATH] [--installed_path PATH]

Clean up pacman's cache. More flexible than "pacman -Sc[c]"

optional arguments:
-h, --help show this help message and exit
--uninstalled, -u list packages that is not installed on the system
--morethan, -m list packages that has more than the specified number
of files in the cache
--delete if this option is set, the packages listed by
"uninstalled" or "morethan" is deleted.
--number n, -n n number of packages that you want to keep as a backup.
Defaults to 2.
--cache_path PATH, -c PATH
optional path to pacman's cache
--installed_path PATH, -i PATH
optional path to pacman's installed package db[/quote]

Par contre le paquet n'a pas été mis à jour depuis quasiment 2 ans...
Seb

Archlinux sur AMD64 (xfce / lightdm)
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [Pacman] Ménage partiel des paquets

Message par FoolEcho »

Tu l'as testé ? (parce que les chemins et commandes n'ont pas trop bougé normalement sur la gestion du cache, donc ça pourrait bien fonctionner encore)

Voyant la possibilité pacleaner, je n'ai pas insisté mais sinon, l'option script bash reste possible, comme je t'ai dit, ça ne devrait pas être trop dur (petites infos en passant en voyant ton code :wink: : tu peux utiliser pacman -Qpq pour obtenir directement le nom du paquet, pas besoin de cut ; pour générer un fichier temporaire, il y a la commande mktemp, plus propre ; tu n'as pas besoin de double boucle si tu gères correctement le find+exec et avec ce que j'ai indiqué précédemment tu n'as même pas besoin de find, un subtil ls sur la regexp doit suffire -- j'avais fait un truc du genre sur un script perso pour garder justement les x derniers fichiers).
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
lesebas
Chu Ko Nu
Messages : 358
Inscription : ven. 01 févr. 2013, 19:16

Re: [Pacman] Ménage partiel des paquets

Message par lesebas »

FoolEcho a écrit :Tu l'as testé ? (parce que les chemins et commandes n'ont pas trop bougé normalement sur la gestion du cache, donc ça pourrait bien fonctionner encore)
Yes testé et ça marche... du moins ce que j'en ai vu pour garder les versions N des paquets installés. Il faut que je teste dans le détail, s'il prend en compte les paquets non installés...

Du coup j'ai mis à jour le paquet sur AUR, le pkgbuild était obsolète.
Seb

Archlinux sur AMD64 (xfce / lightdm)
Avatar de l’utilisateur
lesebas
Chu Ko Nu
Messages : 358
Inscription : ven. 01 févr. 2013, 19:16

Re: [Pacman] Ménage partiel des paquets (résolu)

Message par lesebas »

Bon apparemment ça marche bien, mais le script est basé sur le nom des fichiers contenus dans les répertoires

/var/cache/pacman/pkg/
/var/lib/pacman/local/

Du coup je me demande si effectivement tous les paquets installés sont bien dans "/var/lib/pacman/local" mais surtout si les noms de fichiers archives des paquets sont bien codés selon des règles stricts...

Si oui pourquoi la commande "pacman -Qp $file" décompresse le paquet pour en retrouver la version (qui à priori est toujours codé dans le nom de fichier de l'archive).
Seb

Archlinux sur AMD64 (xfce / lightdm)
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [Pacman] Ménage partiel des paquets (résolu)

Message par FoolEcho »

lesebas a écrit :Si oui pourquoi la commande "pacman -Qp $file" décompresse le paquet pour en retrouver la version (qui à priori est toujours codé dans le nom de fichier de l'archive).
Parce que c'est plus sûr. Tu as des tas de paquets et de nom de paquets qui poseraient problème en analysant seulement le nom des archives.
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
lesebas
Chu Ko Nu
Messages : 358
Inscription : ven. 01 févr. 2013, 19:16

Re: [Pacman] Ménage partiel des paquets (résolu)

Message par lesebas »

C'est bien le problème... pacleaner se base sur les noms de fichier. Donc l'option -u ne doit pas être trés sur, il faut que j'analyse le script en détail... mais je découvre python!
Seb

Archlinux sur AMD64 (xfce / lightdm)
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [Pacman] Ménage partiel des paquets (résolu)

Message par FoolEcho »

Je maîtrise mieux le bash à ce niveau, donc mon offre reste a priori valable... sachant que tu as la procédure si tu veux essayer.
«The following statement is not true. The previous statement is true.» :nage:
Répondre