[Fedora-it] package-deep-cleanup

Lorenzo Villani lvillani a binaryhelix.net
Ven 12 Nov 2010 12:01:44 UTC


Per la serie "step up or shut up" ho finalmente sviluppato (qualche
notte fa) lo strumento che mi mancava per avere una esperienza decente
con yum.


Per gli impazienti:
Sorgenti: https://github.com/lvillani/yum-utils-extra/
Download: https://github.com/lvillani/yum-utils-extra/archives/master
BTS: https://github.com/lvillani/yum-utils-extra/issues
Installazione: su -c 'make install'
Dipendenze: asciidoc >= 8.6, yum



Indice:
1. Introduzione
2. Motivazione
3. Come funziona
4. Come funziona in dettaglio


1. Introduzione
---------------
Il package manager é un utile strumento. Dopo qualche anno peró, la
ripetuta installazione e deinstallazione di pacchetti software tende a
"sporcare" il sistema. Rimangono installati decine di pacchetti che
ormai non servono piú. Un sistema pulito si aggiorna piú facilmente e
occupa meno spazio su disco.


2. Motivazione
--------------
Alcuni package manager (apt, emerge) hanno il concetto di "pacchetto
installato esplicitamente" e sono in grado di tracciarli. Questo vuol
dire che quando andate a rimuovere un pacchetto, il package manager
proverá a rimuovere anche le dipendenze non piú necessarie.

Quando fate "yum remove" peró viene rimosso solo il pacchetto richiesto.
Ovviamente ci sono strumenti aggiuntivi per ottenere un comportamento
simile a apt e emerge:
- yum-plugin-remove-with-leaves: vi dovete sempre ricordare di passare
"--remove-leaves" sulla linea di comando (potete sempre creare un
alias).
- package-cleanup --leaves: produce spesso dei falsi positivi.

Anaconda, inoltre, non fornisce un controllo finissimo sui pacchetti in
fase di installazione quindi potreste ritrovarvi con pacchetti non
necessari.

Lo scopo di questo script é quindi quello di dare la possibilitá di
pulire il sistema a posteriori anche senza un uso continuato degli
strumenti sopra citati.


3. Come funziona
----------------
Basta prendere un editor di testo e creare un file contenente la lista
dei pacchetti che utilizzate piú spesso disposti uno per riga, senza
righe vuote o commenti. Questo file dovrá essere dato in pasto a
package-deep-cleanup per determinare quali pacchetti installare e quali
rimuovere a partire dalla lista. Lo script produce un piccolo report e
vi permette di annullare l'operazione (premendo Ctrl+C). Ci possono
volere diversi tentativi prima di ottenere il set giusto di pacchetti da
mettere nel file. Personalmente utilizzo:
https://github.com/lvillani/yum-utils-extra/blob/master/examples/gnome


4. Come funziona in dettaglio
-----------------------------
Il file con la lista dei pacchetti viene utilizzato per generare un
albero di dipendenze completo che poi viene confrontato con la lista dei
pacchetti installati (con un "diff" rudimentale). Per ottenere la lista
dei pacchetti + dipendenze viene simulato un sistema con rpmdb vuoto
rimpiazzando al volo la classe RPMDBPackageSack (YumBase.rpmdb) con uno
stub (EmptyRPMDBSack -- quant'é bello cambiare le carte in tavola a
run-time). Al momento non conosco altro sistema per fare questa cosa,
ogni consiglio é ben accetto. Lo script inoltre apre e chiude il
database 3 volte (preferisco evitare l'uso di un oggetto globale visto
che dovrei rimpiazzarne un attributo un paio di volte). Considerando che
la API di Yum é un qualcosa di inguardabile e pessimamente documentata
mi ritengo soddisfatto.


Spero che questo strumento vi possa essere utile cosí come lo é stato
per me.

L.



Maggiori informazioni sulla lista it-users