Page 1 of 3

[TOOL][GECHI] DepCleaner (will be PortageNurse ;) )

Posted: Tue May 11, 2004 3:46 am
by FonderiaDigitale
UPDATE: Code Freeze. Questa versione non e' piu' manutenuta, vedere questo post per i dettagli.
-------------------------------------------------------------------------------------

Premessa: non voglio avere sulla coscienza nessuno, e ci tengo a ripeterlo... specie il suo portage tree, per cui:
RICORDATEVI CHE QUESTO TOOL E' SPERIMENTALE!
FATEVI DELLE COPIE DI SICUREZZA DEI FILE IMPORTANTI PER IL SISTEMA!!


ATTENZIONE: Qpkg ha un bug documentato qui: tende a riportare dipendenze non corrette. per cui anche depclean puo' non essere efficace. pertanto usatelo solo a scopo indicativo: riguardate bene COSA andate a modificare.


Si dice che la notte porti consiglio; io invece vi porto questo programmino, creato nella scia di un altro thread.
E' un wrapper per emerge depclean, in piu controlla le dipendenze e il loro stato, le include eventualmente nel file world, e ripulisce i file temporanei di portage.

Versione 0.0.8a: Questa e' l'ultima release che utilizza bash, la considero una 'feature freeze': d'ora in poi, fino alla release in python, non aggiungero' nulla e fixero' solo bachi o inesattezze.
Inoltre dalla prossima versione questo programma verra' 'fuso' con ebuild-switch, per creare un'interfaccia unica per soddisfare il piu possibile i bisogni di pulizia (e le mancanze, purtroppo) di portage.

FEATURES:
- colori e display gentoo-style
- usando il parametro --ask richiede conferma per ogni singolo pacchetto
- ha una opzione --pretend che funziona esattamente come quella di emerge
- con --tmpclean, permette di ripulire i file temporanei creati da emerge (anche se avete specificato una directory temporanea personalizzata :))
- permette di effettuare azioni selettive su ogni singolo pacchetto, come unmerge, aggiunta al file world
- avvisa sempre prima di maneggiare il file world, e puo' eseguire il backup automatico di quest'ultimo prima di fare modifiche.
- avvisa in caso di passaggi pericolosi e ha un timeout prima dell'unmerge effettivo (5 secondi)
- permette di passare un pattern da linea di comando per selezionare solo i pacchetti che corrispondano a una keyword (ad esempio *lib* )
- controlla che i pacchetti selezionati siano REALMENTE dipendenze di qualcosa e che non siano attualmente utilizzati.
- controlla che effettivamente le dipendenze utilizzate siano state emergiate (fixa errori di emerge se ce ne sono)
- non usa nessun file temporaneo su disco (tranne in caso di modifica del file world, ovviamente)
- Dovrebbe essere veloce in quanto non usa programmi esterni a bash stesso (come grep, cut, awk, ecc)
- richiede qpkg (presente in gentoolkit), se non e' presente, lo mergia. Ovviamente avvisa prima di farlo (tramite la funzione --ask di emerge)
- Ebuild autoinstallante disponibile
>>> ebuild di depclean <<<
per usarlo (dovreste aver settato la directory di overlay):

Code: Select all

source /etc/make.conf
cd $PORTDIR_OVERLAY
tar zxvf depclean-0.0.8.tar.gz
emerge depcleaner
Screenshot!

Qualche esempio di utilizzo:
(test fatti sul mio notebook)

Code: Select all

Goliath scripts # ./depclean -h
depclean 0.0.8 by Giovanni Ferri <giovanni@fonderiadigitale.it>
Usage: depclean [options] <pattern>
                 --ask or -a: asks for each package to be unmerged (needed to add to the world file)
                              this is *REALLY* reccomended!
               --debug or -d: debug mode. Useful only for testing.
  [--pattern|-x] <something>: only include packages matching *something*

                              the '--pattern' switch can be omitted at all.
            --pretend  or -p: do not actually perform actions (to show what will be unmerged)
            --tmpclean or -t: remove temporary portage files

Code: Select all

Goliath scripts # depclean -p lib
>>> --pretend was added, nothing will be really performed on-disk.

Creating list of possible dependencies, please wait.
Filtering selected pattern lib..
Checking for unused dependencies: this could take a HUGE amount of time.
Go visiting Gechi website www.gechi.it, have a coffee, or such ;)
..............................
Found 5 unused dependencies.
 
Unmerging package:   [1] =media-libs/libdvdplay-1.0.1
Unmerging package:   [2] =media-libs/libmpeg2-0.4.0b
Unmerging package:   [3] =media-libs/gle-3.0.1-r2
Unmerging package:   [4] =dev-libs/ewd-0.0.1.20040214
Unmerging package:   [5] =media-libs/libdvbpsi-0.1.4

Code: Select all

Goliath scripts # depclean --pretend --ask nonhonientedisimilesulmiopc
>>> --pretend disables --ask... removing --ask from options. nothing will be performed on disk.
 
Creating list of possible dependencies, please wait.
Filtering selected pattern nonhonientedisimilesulmiopc..
Checking for unused dependencies: this could take a HUGE amount of time.
Go visiting Gechi website www.gechi.it, have a coffee, or such ;)
.
Found 0 unused dependencies.
 
Nothing left to unmerge. :)

Code: Select all

Goliath scripts # ./depclean -t -a -p gnome
>>> --pretend disables --ask... removing --ask from options. nothing will be performed on disk.
Found stale files in portage temp dir /home/portage/tmp/portage/, fixing: ................... cleaned.
 
Creating list of possible dependencies, please wait.
Filtering selected pattern gnome..

Checking for unused dependencies: this could take a HUGE amount of time.
Go visiting Gechi website www.gechi.it, have a coffee, or such ;)
..
Found 8 unused dependencies.
 
Unmergeable package:   [1] =gnome-base/gnome-common-2.4.0
Unmergeable package:   [2] =gnome-extra/nautilus-cd-burner-2.6.0
Unmergeable package:   [3] =gnome-extra/gconf-editor-2.6.0
Unmergeable package:   [4] =gnome-extra/zenity-2.6.0
Unmergeable package:   [5] =dev-cpp/gnomemm-1.2.3-r1
Unmergeable package:   [6] =gnome-extra/gnome-media-2.6.0
Unmergeable package:   [7] =gnome-extra/gcalctool-4.3.51
Unmergeable package:   [8] =gnome-extra/gucharmap-1.4.1

Code: Select all

Goliath scripts # ./depclean -a -x gnome
 
Creating list of possible dependencies, please wait.
Filtering selected pattern gnome..
Checking for unused dependencies: this could take a HUGE amount of time.
Go visiting Gechi website www.gechi.it, have a coffee, or such ;)
..
Found 8 unused dependencies.
 
Remove gnome-base/gnome-common-2.4.0 ? [yes/no/all/skiprest/world/abort]:
you must answer 'yes','no','all','skiprest','world','abort'.
Remove gnome-base/gnome-common-2.4.0 ? [yes/no/all/skiprest/world/abort]:
Aborted on user request.
 
Goliath scripts # ./depclean -a -x gnome
 
Creating list of possible dependencies, please wait.
Filtering selected pattern gnome..
Checking for unused dependencies: this could take a HUGE amount of time.
Go visiting Gechi website www.gechi.it, have a coffee, or such ;)
..
Found 8 unused dependencies.
 
Remove gnome-base/gnome-common-2.4.0 ? [yes/no/all/skiprest/world/abort]:
you must answer 'yes','no','all','skiprest','world','abort'.
Remove gnome-base/gnome-common-2.4.0 ? [yes/no/all/skiprest/world/abort]: y
Remove gnome-extra/nautilus-cd-burner-2.6.0 ? [yes/no/all/skiprest/world/abort]: w
Remove gnome-extra/gconf-editor-2.6.0 ? [yes/no/all/skiprest/world/abort]: w
Remove gnome-extra/zenity-2.6.0 ? [yes/no/all/skiprest/world/abort]: w
Remove dev-cpp/gnomemm-1.2.3-r1 ? [yes/no/all/skiprest/world/abort]: n
Remove gnome-extra/gnome-media-2.6.0 ? [yes/no/all/skiprest/world/abort]: n
Remove gnome-extra/gcalctool-4.3.51 ? [yes/no/all/skiprest/world/abort]: n
Remove gnome-extra/gucharmap-1.4.1 ? [yes/no/all/skiprest/world/abort]: y
Unmergeable package:   [1] =gnome-base/gnome-common-2.4.0
Unmergeable package:   [2] =gnome-extra/gucharmap-1.4.1
 

These packages will be added to the world file:
Would be added to world:   [1] gnome-extra/nautilus
Would be added to world:   [2] gnome-extra/gconf
Would be added to world:   [3] gnome-extra/zenity
WARNING: This feature is experimental. Have you backed up your file?
         If you have not backed it up, selecting auto will make a copy to /root/worldfile_15-05-2004.depclean, just in case something goes wrong.
 
Choose  [yes/no/auto]:
You must answer 'yes','auto','no'.
 
Choose  [yes/no/auto]: a
Backing up /var/cache/edb/world to /root/worldfile_15-05-2004.depclean... Done.
 
Adding selected packages to the world file...
Done.
Sorting world file... Done.
 
 
REALLY want to remove these dependencies?
LAST CHANCE TO QUIT!! (CTRL+C to exit) .. 5 4
Aborted on user request.
 
Goliath scripts # head -n 10 /var/cache/edb/world
app-admin/addpatches
app-admin/bacula
app-admin/gkrellm
app-admin/prelude-lml
app-admin/prelude-manager
app-admin/pydf
app-admin/quickswitch
app-admin/syslog-ng
app-admin/tripwire
app-admin/usbview

E' importante che riceva del feedback sul suo funzionamento, richieste di nuove features (ragionevolmente parlando), se lo usate, se vi e' servito in qualche modo, ecc.. :)
Grazie. buon uso (spero ne farete :))

Posted: Tue May 11, 2004 5:33 am
by solka
Ciao.
complimenti per il programmino, l'ho provato, ma c'è una cosa che non mi è chiara. Lanciandolo, sembra che non ci siano pacchetti da rimuovere, invece se lancio il normale depclean di emerge, mi dà una lista di pacchetti possibili, alcuni sono dipendenze, e quindi non sono da rimuovere, ma altri invece non lo sono. Non dovrebbe rimuoverli?
Ad esempio, lanciando il tuo programma:

Code: Select all

pitagora root # ./depclean --askme
Creating list of possible dependencies, please wait.
Sorting list....
Checking for unused dependencies: this could take a HUGE amount of time.
Go visiting Gechi website www.gechi.it, have a coffee, or such ;)
.
Found 0 unused dependencies.
Nothing left to unmerge. :)
Lanciando emerge depclean -p

Code: Select all

>>> These are the packages that I would unmerge:

 app-text/dgs
    selected: 0.5.10-r1
   protected: none
     omitted: none

 app-dicts/aspell-en
    selected: 0.51.0
   protected: none
     omitted: none

 dev-libs/crypto++
    selected: 5.1-r1
   protected: none
     omitted: none

 media-sound/mad
    selected: 0.15.1b
   protected: none
     omitted: none
Controllo app-text/gds e noto che è una dipendenza, quindi non è da rimuovere

Code: Select all

pitagora root # qpkg -I -q dgs
app-text/dgs-0.5.10-r1 *
DEPENDED ON BY:
        imagemagick-5.5.7.15
Invece provo con crypto++ e vedo che non è una dipendenza, quindi sarebbe da rimuovere

Code: Select all

pitagora root # qpkg -I -q crypto++
dev-libs/crypto++-5.1-r1 *
DEPENDED ON BY:
Sto sbagliando io qualche cosa e quei pacchetti sono tutti necessari?
Poi secondo me sarebbe utile che il tuo programma aggiungesse i pacchetti che emerge depclean -p elenca come superflui, ma che in realtà non lo sono, in /var/cache/edb/world, magari domandandolo all'utente, in modo tale da non rischiare ogni volta di eliminarli con un mero depclean.

Ciao e grazie :)

Posted: Tue May 11, 2004 6:37 am
by FonderiaDigitale
sembra che abbiamo una versione di qpkg che emette un output diverso.
cmq ho capito, adesso aggiungo un controllo in piu.
il motivo per cui hai un output diverso da depclean e' che lui controlla effettivamente se le dipendenze sono libere e se il pacchetto e' solo injettato o c'e' davvero.
spiegami cosa intendi con 'superflui' per emerge depclean: depclean elenca solo le dipendenze che crede siano 'spurie' anche se a volte non lo sono.

Posted: Tue May 11, 2004 8:36 am
by fedeliallalinea
Anche a me da qualche problema questo programma. Mi dice che non c'e' niente da togliere. Allora ho fatto partire depclean e ho controllato a mano. A questo punto provo il pacchetto gail

Code: Select all

# qpkg -I -q gail
gnome-base/gail-1.4.1 *
DEPENDED ON BY:
        eel-2.4.2
eel anche lui fa parte dell'output di depclean allora controllo e

Code: Select all

# qpkg -I -q eel 
gnome-base/eel-2.4.2 *
DEPENDED ON BY:

Posted: Tue May 11, 2004 9:35 am
by FonderiaDigitale
c'e' un piccolo problema di parsing, piu tardi lo fixo, per il momento non usatelo.

Posted: Tue May 11, 2004 2:56 pm
by solka
FonderiaDigitale wrote: spiegami cosa intendi con 'superflui' per emerge depclean: depclean elenca solo le dipendenze che crede siano 'spurie' anche se a volte non lo sono.
Con 'superflui' intendo quei pacchetti che secondo depclean possono essere eliminati. A volte però mi è capitato che depclean cercasse di eliminare un pacchetto che in realtà mi serviva, e per evitare che lo facesse di nuovo avevo aggiunto il pacchetto nel file world, di conseguenza ti chiedevo se non fosse possibile fare una cosa del genere all'interno del programma stesso.
Esempio, depclean elenca come pacchetto da eliminare 'pippo'. Con qpkg risulta che 'pippo' non va eliminato, per evitare che ogni volta depclean cerchi di rimuovere lo stesso pacchetto, si aggiunge 'pippo' in /var/cache/edb/world. Magari domandando all'utente di aggiungere il pacchetto nel file world, in modo tale che possa anche decidere di tenere pacchetti che per il sistema sono superflui ma che per un qualche motivo l'utente non vuole eliminare.
Spero di essere stato chiaro e che non sia un procedimento del tutto inutile ;)

Posted: Tue May 11, 2004 5:30 pm
by Mr.Evolution
Ottima idea questo tool....l'ho appena scaricato e ti farò avere il mio feedback al più presto.

Un'idea: non è che si potrebbe aggiungere una funzione per pulire la /var/tmp/ dalle informazioni di caching di portage?

Posted: Tue May 11, 2004 5:35 pm
by FonderiaDigitale
si. aggiungo anche questo.
ripeto: fino alla prossima release non lo usate. e' da fixare (seppure sia una banalita')

Posted: Wed May 12, 2004 12:35 pm
by FonderiaDigitale
giusto per tenervi informati, lo sto praticamente riscrivendo per meta', non ero molto soddisfatto.
ho aggiunto la funzione che chiedeva yoshi, per aggiungere il pacchetto al worldfile.
se volete vedere come sta venendo, qui ci sono gli screenshots.

Posted: Thu May 13, 2004 7:27 am
by solka
Ottimo, non vedo l'ora di provarlo :)

Posted: Thu May 13, 2004 1:17 pm
by neon
Emh tempo fa avevamo pensato di risolvere lo stesso problema in maniera inversa... ovvero aggiungendo i pacchetti che non dovevano essere toccati nel world file

Script 1
Script 2

Magari sono di aiuto e cmq quel thread è caduto nel dimenticatioio, se voleste risvegliarlo...

Posted: Thu May 13, 2004 2:12 pm
by FonderiaDigitale
ti ringrazio, comunque la funzione relativa al world file e' gia' funzionante.. sto aspettando a rilasciare la nuova versione perche lo sto unendo all'altro script che ho postato ultimamente :)

Posted: Thu May 13, 2004 2:35 pm
by codadilupo
Ottimo ! Come avevamo sperato io e peach (e tutti gl'altri, mi sa ;-)), il vecchio trhead sta riprendendo vita, e, non paghi, se n'e' aperto pure un'altro... ottimo, soprattutto, se riusciamo a mettere insieme tutte le esperienze, e tirar fuori quello che ancora resta, evidentemente, il problema piu' sentito da tutti... un bel un-merge come si deve ;-)

Coda

Posted: Thu May 13, 2004 2:56 pm
by federico
Avevo scritto tempo fa un software simile (il problema e' sentito) ma si era poi rivelato non cosi' preciso e avevo abbandonato l'idea.
Sono ansioso di provare questa tua proposta!
Federico

Posted: Thu May 13, 2004 3:53 pm
by =DvD=
*mumble mumble*

[umilmente]
Aggiungere pacchetti al world file non mi ispira molto...
Se io emergo il pacchetto [A] che per dipendenze ha [A.1] e [A.2] e per caso emerge depclean volesse rimuovermi [A.2], aggiungerlo al world per fixare la cosa non mi sembra molto producente... Quando andrò a unmergere [A] e poi a fare un deplean (o depcleaner!) [A.1] sarà rimosso, ma [A.2] no, perchè ormai è nel world, ma non mi serve mica!!
[/umilmente]

Probabilmente ho capito male, vero?? =D

// edit: ho aggiunto un verbo che mancava! ;)

Posted: Thu May 13, 2004 4:44 pm
by FonderiaDigitale
fermo.
il mio software gia implementa una feature che ti chiede espressamente se TU vuoi mettere nel world file ogni SINGOLO pacchetto.
niente che tocchi il file world e' automatizzato (e mi pare giusto).
guarda qui e capisci: SHOT 1 SHOT 2

siccome risente ancora di qualche problema di giovinezza, ed essendo il suo scopo quello di maneggiare files piuttosto importanti per il sistema, non mi sento ancora di rilasciarlo, finche non ho testato e implementato tutte le funzioni che voglio.

Vorrei creare un tool che sia unificato per tutte le funzioni di pulizia, mantenimento degli ebuild, e 'sanitizzazione' di portage.
Vi tengo cmq informati delle novita' :) portate pazienza.

Posted: Thu May 13, 2004 5:34 pm
by federico
Come le Norton OOOps Gechi Utilities ? 8)

Posted: Fri May 14, 2004 8:10 am
by Benve
FonderiaDigitale wrote: siccome risente ancora di qualche problema di giovinezza, ed essendo il suo scopo quello di maneggiare files piuttosto importanti per il sistema, non mi sento ancora di rilasciarlo, finche non ho testato e implementato tutte le funzioni che voglio.
Ma e` proprio per questo che devi rilasciarlo :D
Mica Linux e` stato rilasciato dalla versione 1.0 :D

Posted: Fri May 14, 2004 2:45 pm
by OKreZ
Benve wrote:Ma e` proprio per questo che devi rilasciarlo :D
Mica Linux e` stato rilasciato dalla versione 1.0 :D
Concordo, rilascialo cosi' tutti lo possono testare ed eventualmente darti una mano... sbaglio o e' cosi' che piu' o meno funziona il concetto di "open source" ? :D

Posted: Sat May 15, 2004 2:12 am
by FonderiaDigitale
sempre il solito simpaticone lui :roll: :roll:

il mio era un buon intento, volevo preservarvi da possibili danni autoprovocati :twisted:

Cmq ok, mi avete persuaso.
Vedete il primo post del thread (aggiornato) :)

Posted: Sat May 15, 2004 9:41 am
by Thrain
Nonostante il primo impatto sia stato piacevolissimo...

BUG!

Piccolo ma evidente:

volevo inserire "media-fonts/gnu-gs-fonts-std" nel file world, ma depclean mi
ha avvisato che stava per inserire "media-fonts/gnu" ... poi non l'ha fatto e
non so perchè!

Penso sia un piccolo problema di parser (magari si ferma al primo "-" :?: )

A parte questo, il tool è eccezionale! Bellissimo!

Posted: Sat May 15, 2004 9:42 am
by FonderiaDigitale
ok, ho capito cosa e', risolvo subito.

EDIT: vedi un po' se il problema ti si presenta anche con la nuova versione.

Posted: Sun May 16, 2004 1:08 pm
by Thrain
EDIT: vedi un po' se il problema ti si presenta anche con la nuova versione.
Mh... non riesco a scaricare il file :( !

Posted: Sun May 16, 2004 1:21 pm
by FonderiaDigitale
Ops! :oops:
riprova ora

Posted: Mon May 17, 2004 12:52 pm
by Thrain
mh... è normale che depcleaner-0.0.8a.ebuild contenga:
▒¦@í[oÛ6ÇýZ}3¡m0ë~q
x@▒­±\
âϾ£8 'Åb§IÑ.X¿©ÃsÄó?¤Bè
.5Q· "¯)i©¼×ì{ç
ÍY]ôI¢èúl_0
{¾çÅ~Æô¼À°ÞM÷}Ì& '9×OûVÿvp/Ñéþt<9í=P¹dBæPÑZ@CZMX
®³H[3Ò²/´-)l¹ÃÚÌÛ¹Â~L"Ú´ÍU¶u:Ý?ÿ8íJkñÎuýÝØ ÂÈñSßC·ä8T2R°Ó¤¦î¶s·à¶æ¤PîëËÉå̾ØÖ£ÑdïýèÎÜb±pf4¯Ã´»Ú¶f[¿>ýq2=8Ú«ÏVBä°RH¼ZTV
VØ&MD°b¤û#8<9m÷Gǧ8÷ûÉa?°­Ñdt|0´{rZP_0▒
ï\HZ¯ÔRõqrË«{¿o³­é­½×ëÖm?vóaßèôl:ÞG?ZÞ0)¹´-KÉüµÈuýæ-\ZpýLúî\IWe¬½ë)8öÁ­Ê­«»%.fç+ÝE¾6kK¾ù
ì ª(HÚÐ&£tE0Ï+¦ [$À+ZªkÌ{ò«¶õê«f6\ØÙÙÑÑt|4:>Û;ìnJðV±ÕL/▒T\%{A×÷0$!ùLæ¹7{µæóY¨í=Y*M▒\^((YKß>xèZ'ÂÈ¿<èøfîîÍ¢_%
_4kÖîun2ý+èÎMo#G¥võFRRÜ»âîæztW[ôR`eyw²ÐïwꪦTïaJÿìÒú" _ßÿKVSå>ÓÝ~Æñcûÿu{½ÿ'iàþï'Qô ~¦ùä¾ÿ?¹þ¸{R¥ûÛÁïãúülÿÂ4¸[Ï|8þ?vþ»yIö¿Ðõ?:!Ë2ÎI▒
3xð5°>Aäc¡ýÙ▒þ èò%jÿYæøþ»þ§Ø6úÿ7èôãGNùÒ, ÔÏI▒å~ç»~åCý¯ÿ▒Öu)A: >I ¢AT´LhIVÆ»9
ã,M^F©<#ðä~IbªÁ`0▒
Á`0▒
Á`0▒
ÏÈßh@âÙ(

:? ... penso di no :D