[Pacman] Ménage partiel des paquets (résolu)
[Pacman] Ménage partiel des paquets (résolu)
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 ?
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)
Archlinux sur AMD64 (xfce / lightdm)
- 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
«The following statement is not true. The previous statement is true.» 

- benjarobin
- Maître du Kyudo
- Messages : 17615
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Pacman] Ménage partiel des paquets
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
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Re: [Pacman] Ménage partiel des paquets
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.Nettoyage des paquets non installés du cache:Code : Tout sélectionner
pacman -Sc
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)
Archlinux sur AMD64 (xfce / lightdm)
- 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
Arf. Je n'ai pas lu la question jusqu'au bout.benjarobin a écrit :Cela ne répond pas à la question

Il n'y a pas de commande directe pour ça à ma connaissance, il va falloir passer par un script.lesebas a écrit :Une commande ne garde que les N dernières versions et supprime les autres.
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).

«The following statement is not true. The previous statement is true.» 

Re: [Pacman] Ménage partiel des paquets
Salut... oui j'ai rien trouvé, je suis sur le script, le début donne ça :
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.
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
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)
Archlinux sur AMD64 (xfce / lightdm)
- 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
C'est un mauvais plan à mon avis.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.
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 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.» 

Re: [Pacman] Ménage partiel des paquets
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)
Archlinux sur AMD64 (xfce / lightdm)
- 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
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
: tu peux utiliser
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

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.» 

Re: [Pacman] Ménage partiel des paquets
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...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)
Du coup j'ai mis à jour le paquet sur AUR, le pkgbuild était obsolète.
Seb
Archlinux sur AMD64 (xfce / lightdm)
Archlinux sur AMD64 (xfce / lightdm)
Re: [Pacman] Ménage partiel des paquets (résolu)
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).
/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)
Archlinux sur AMD64 (xfce / lightdm)
- 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)
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.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).
«The following statement is not true. The previous statement is true.» 

Re: [Pacman] Ménage partiel des paquets (résolu)
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)
Archlinux sur AMD64 (xfce / lightdm)
- 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)
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.» 
