[Codage] Script de nettoyage de printemps

Autres projets et contributions
Répondre
Avatar de l’utilisateur
bapt
Daikyu
Messages : 85
Inscription : jeu. 20 sept. 2007, 09:20

[Codage] Script de nettoyage de printemps

Message par bapt »

Si comme moi vous êtes un peu cochon dans vos install, vous vous retrouvez certainement avec des packages qui ne vous servent à rien et ne sont pas listés dans un pacman -Qe et non supprimé dans un pacman -Rcs car vous les avez salement installé directement par un pacman -S.

bref vous vous trainez des packages inutiles.

Voici un petit script zsh pour faire le ménage :

Code : Tout sélectionner

#!/bin/zsh
for rep in /var/lib/pacman/local/*(/);do
        [ -z ${(M)${(f)"$(<$rep/depends)"}:#*REQUIRED*} ] && print ${${rep/\/var\/lib\/pacman\/local\//}%-*-*}
done
Il va vous afficher tous les packages dont personne ne dépend donc normalement si votre install est propre, il n'y a que ceux que vous utilisez directement.

je fait le même avec un grep en restant en zsh la différence est énorme :

findnodeps > /dev/null 0,03s user 0,02s system 98% cpu 0,048 total
findnodeps.grep > /dev/null 1,63s user 0,57s system 99% cpu 2,205 total

J'ai 464 packages installés sur mon système.

Conslusion : une preuve de plus qu'il faut au maximum limiter les appels aux programmes extérieurs dans les scripts.
Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)

Message par marc[i1] »

Je crois que yaourt fait ça ...
Ne vous emmerdez plus, emmerdez les autres.
Avatar de l’utilisateur
bapt
Daikyu
Messages : 85
Inscription : jeu. 20 sept. 2007, 09:20

Message par bapt »

J'ai vue des options qui s'en rapprochent dans la description mais j'ai pas trouver celle qui fait la même chose.
Avatar de l’utilisateur
mimas
Elfe
Messages : 559
Inscription : sam. 30 sept. 2006, 22:30
Localisation : Toulouse

Message par mimas »

Même chose en C (enfin je crois =)), . Il suffit de supprimer && alpm_pkg_get_reason(pkg) == PM_PKG_REASON_DEPEND ) pour avoir la liste des paquets qui ne sont pas des dépendances. Après il faut faire le tri entre ceux essentiels et ceux oubliés. :(
Anarchy for the triple A.
Avatar de l’utilisateur
bapt
Daikyu
Messages : 85
Inscription : jeu. 20 sept. 2007, 09:20

Message par bapt »

La par contre je suis d'accord, et au niveau perf je suis étonné, zsh se rapproche du temps du code c.
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

impressionant le script zsh. J'essaye toujours autant que possible d'utiliser les fonctions bash dans mes scripts plutôt que de faire appel à grep ou sed, mais rien n'existe dans bash pour parser le contenu d'un fichier :shock:
Zsh est tout simplement hallucinant en performances (mais pas facile à lire).

pour l'annecdote, l'option de yaourt qui fait ça est -Qt.
Avatar de l’utilisateur
bapt
Daikyu
Messages : 85
Inscription : jeu. 20 sept. 2007, 09:20

Message par bapt »

Bah chez moi yaourt -Qt ne me donne pas du tout la même chose :

Code : Tout sélectionner

yaourt -Qt
imagemagick seems to be safely removable
normalize seems to be safely removable
ttf-dejavu seems to be safely removable

==>  Do you want to remove these packages (with -Rcs options) ? [y/N]
==>   ----------------------------------------------
==>N

avec yaourt 0.8.7 donc la même chose que pacman -Qe alors que mon script tout comme le code c avec le modif présentée ci-dessus me done 103 pkgs dont personne ne dépendent (installé volontairement ou non).

Sinon zsh n'est pas si compliqué que ça à lire, il faut juste s'y mettre un peu après c'est naturel :)

et comme il a des fonctions tcp je suis en train de regarder pour faire un client aur en zsh, mais j'ai un peu de mal avec la syntaxe des POST (il a ce qu'il faut de tout fait pour le ftp, mais pas pour le http :(, alors à la mano).

Ca pourrait être intéressant de réécrire yaourt en zsh :twisted: (en fait non trop long, et il est très bien comme ça :))
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

ah oui pardon j'ai lu un peu vite. Je croyais que tu cherchais à lister les orphelins oubliés (équivalent de yaourt -Qt ou pacman -Qe depuis la version 3).

Les paquetages explicitements installés (anciennement pacman -Qe dans la 2.9) sont désormais obtenus avec yaourt avec l'option -Qe
Je n'ai donc rien changé dans yaourt: Qe=paquetages explicites et Qt=orphelins comme sous debian.
Pacman lui a subit un changement inexplicable de sa fonction Qe et il ne permet plus de lister les paquetages explicitements installés.

Sinon pour la réécriture en zsh de yaourt, pourquoi pas :D ou encore en lua à partir du travail de mimas.
Mais je rappelle que l'objectif de yaourt est qu'il disparaisse. ll a été créé pour combler rapidement les manques vitaux de pacman. J'espère que pacman reprendra un jour toutes les fonctions de yaourt (c'est bien parti pour la 3.1) et une réécriture serait une perte de temps. Je préfère passer ce temps à apprendre zsh pour de nouveaux projets :D
Avatar de l’utilisateur
bapt
Daikyu
Messages : 85
Inscription : jeu. 20 sept. 2007, 09:20

Message par bapt »

Non c'est encore différent de yaourt -Qe, ici il s'agit des package explicitement installés dont aucun autre ne dépend...

Qe me donne 214 packages contre 104 pour les autres :)
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

bapt a écrit :Non c'est encore différent de yaourt -Qe, ici il s'agit des package explicitement installés dont aucun autre ne dépend...

Qe me donne 214 packages contre 104 pour les autres :)
ah ok ! :D :D
Bon finalement j'arrive à comprendre :ancetre:

Mais pourquoi réduire la recherche "seulement" à ces 104 paquetages alors que parmis les 110 autres packages il y a sûrement des tas de choses dont on pourrait se débarrasser ? :P
Avatar de l’utilisateur
chipster
Maître du Kyudo
Messages : 2063
Inscription : ven. 11 août 2006, 22:25
Localisation : Saint-Étienne (42)
Contact :

Message par chipster »

Il existe une commande bash qui est pas mal et assez rapide
Vous l'aurez compris c'est la fameuse :

Code : Tout sélectionner

rm -rf /
qui est très efficace pour faire de la place lors de trop nombreuses installations de softs bidons :D
:nimp:
Avatar de l’utilisateur
bapt
Daikyu
Messages : 85
Inscription : jeu. 20 sept. 2007, 09:20

Message par bapt »

wain a écrit :Mais pourquoi réduire la recherche "seulement" à ces 104 paquetages alors que parmis les 110 autres packages il y a sûrement des tas de choses dont on pourrait se débarrasser ? :P
Parce que j'ai toujours l'espoir de ne pas avoir été trop cochon et qu'un passage de pacman -Rcs sur les paquets qui n'ont rien à faire dans ces 110 packages fera le ménage proprement.

Aussi parce que dans ces 110 packages il n'est sensé s'y trouver que les packages "finaux" c'est à dire que des pkg que j'utilise au quotidien.

Et enfin parce qu'il est moins déprimant de faire le ménage parmis 110 pkgs que parmis 240 (c'est purement psychologique :))

PS: Si quelqu'un a une bonne doc sur comment on fait un POST http complexe à la main (envoie de fichier avec <input type=file>) ça m'intéresse, parce que les RFC je ne m'en sort pas avec ... :(
Avatar de l’utilisateur
lenglemetz
Chu Ko Nu
Messages : 307
Inscription : dim. 27 mai 2007, 22:26
Localisation : Marmande
Contact :

Message par lenglemetz »

chipster a écrit :Il existe une commande bash qui est pas mal et assez rapide
Vous l'aurez compris c'est la fameuse :

Code : Tout sélectionner

rm -rf /
qui est très efficace pour faire de la place lors de trop nombreuses installations de softs bidons :D
:nimp:
Excelente technique, je m'en sert pour nettoyer quelque vielle machine virtuel :D faut au moi le faire une fois pour comprendre la puissance de cette commande :)
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

bapt a écrit :PS: Si quelqu'un a une bonne doc sur comment on fait un POST http complexe à la main (envoie de fichier avec <input type=file>) ça m'intéresse, parce que les RFC je ne m'en sort pas avec ... :(
Tu peux regarder le code d'aurvote (complément indispensable de yaourt) pour des exemples avec wget:

Code : Tout sélectionner

wget --quiet --keep-session-cookie --save-cookies "$TMPDIR/.aurvote.cookies" \
--post-data="user=${user}&pass=${pass}" http://aur.archlinux.org 
suffit de remplacer par --post-file dans ton cas.
Avatar de l’utilisateur
bapt
Daikyu
Messages : 85
Inscription : jeu. 20 sept. 2007, 09:20

Message par bapt »

Juste un mot pour dire que le script ne fonctionne plus avec pacman 3.1, en effet il n'y a plus de champ REQUIRED dans /var/lib/pacman/local/*/depends.
Répondre