Page 1 sur 1

[Codage] Script de nettoyage de printemps

Publié : jeu. 08 nov. 2007, 15:19
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.

Publié : jeu. 08 nov. 2007, 15:36
par marc[i1]
Je crois que yaourt fait ça ...

Publié : jeu. 08 nov. 2007, 15:56
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.

Publié : jeu. 08 nov. 2007, 16:57
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. :(

Publié : jeu. 08 nov. 2007, 18:21
par bapt
La par contre je suis d'accord, et au niveau perf je suis étonné, zsh se rapproche du temps du code c.

Publié : jeu. 08 nov. 2007, 18:33
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.

Publié : jeu. 08 nov. 2007, 18:44
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 :))

Publié : jeu. 08 nov. 2007, 19:37
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

Publié : ven. 09 nov. 2007, 09:15
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 :)

Publié : ven. 09 nov. 2007, 21:12
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

Publié : ven. 09 nov. 2007, 22:21
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:

Publié : ven. 09 nov. 2007, 23:22
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 ... :(

Publié : sam. 10 nov. 2007, 11:35
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 :)

Publié : sam. 10 nov. 2007, 13:00
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.

Publié : lun. 04 févr. 2008, 15:13
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.