View previous topic :: View next topic |
Author |
Message |
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Mon Jul 19, 2004 7:29 pm Post subject: [Howto] Depcheck, script di aiuto per il depclean |
|
|
Ho fatto a tempo perso uno scriptino che qualcuno potrebbe trovare utile, altri no, fate voi
Questo script è abbastanza "verbose" e crea tre file alla fine del processo (che non è eccessivamente lungo, ~5 minuti a seconda dei pacchetti che avete installati)
deps
system
nodeps
in deps ci sono elencati tutti i pacchetti installati non presenti in world (dipendenze sostanzialmente)
in system ci sono tutti i pacchetti del SYSTEM PROFILE che sono in deps (penso che non serva a nulla ma crearlo costava scrivere una riga...)
in nodeps invece ci sono tutti i pacchetti presenti in deps che non sono dipendenze di niente, stando almeno all'output di qpkg -q
Chiaramente non sto a dirvi che per usarlo dovete avere installato gentoolkit (che contiene qpkg se non sbaglio)
Lo script di per se' è abbastanza bruttino (non sono un mago della bash, magari si puo fare meglio) ma almeno a prima vista sembra che funzioni
Se lo usate controllate e fatemi sapere se c'è qualche bug o qualche paccheto che non indica correttamente (dipende tutto da come formatta il testo qpkg...)
A me risulta utile perchè automatizza un processo che di per se' è parecchio lungo (fare qpkg su tutti i pacchetti per scovare quelli che non sono dipendenze di nulla) ed è abbastanza utile confrontare i pacchetti in nodeps con l'output di emerge --depclean, per decidere cosa eventualmente rimuovere o preservare
Non sto nemmeno a ripetere che chiaramente non sono responsabile se lanciando questo script il vostro pc esplode e gli alieni vengono a rapirvi la famiglia... rivolgetevi agli X-Files
spero sia utile a qualcuno... magari in futuro se ho tempo ci aggiungo anche un'automazione per il confronto con emerge --depclean, e magari anche un controllo sulle USE (o può farlo qualcun'altro e postarlo se ha voglia e tempo )
[EDIT] Aggiunto il confronto automatico con l'output di emerge --depclean; ora compaiono altri due file che sono
matching_nodpes
not_matching_nodeps
dove vanno i pacchetti che vorrebbe disinstallare emerge --depclean che compaiono o non compaiono in nodeps
[\EDIT]
[edit] l'aggiunta era sbagliata (l'avevo fatta al volo... mai farlo), corretta [\edit]
[edit] nel postarlo qualche riga è stata mandata a capo, tiratela su quando lo copiate per lanciarlo
è la riga:
for j in `cat -n pack|grep -v "0;01"|grep -v "34;01"|grep -v "31;01"|tr -s [:blank:]| sed 's/\t/*/'`
che dovrebbe stare solo su una riga
I commenti iniziali che erano troppo lunghi li ho accorciati per farli rientrare nel margine
[/edit]
Code: |
#!/bin/bash
#Questo umilissimo script serve per generare una lista dei pacchetti
#installati non presenti in world,
#generare una lista dei pacchetti non in world che appartengono a
#SYSTEM PROFILE (inutile, ma già che c'ero...),
#infine (cosa interessante) controlla per ciascuno di questi pacchetti
#l'output di qpkg e scrive una lista dei pacchetti
#che non sono dipendenza di nesusn altro pacchetto
#
#Questo script è stato fatto da me e vieto a chiunque non possieda una
#testa e un torso ben distinti di utilizzarlo
#(alieni e Mike Tyson siete avvertiti!)
#
#Non mi ritengo responsabile per i danni provocati al vostro sistema
#da questo script (se è mai possibile che possa creare danni)
#Non mi ritengo inoltre responsabile di qualsiasi attentato terroristico
#in alcuna parte del globo compiuto con
#la partecipazione anche minimale di questo script nel caso Bush
#volesse dichiarare guerra al mio condominio
#(di questi tempi non si sa mai)
#la variabile che contiene la lista di tutti i pacchetti installati
ALL=$(qpkg -I -nc|cut -f1 -d" ")
echo Controllo i pacchetti installati non presenti in world
echo
# controllo che non ci sia una versione precedente di ./deps ed eventualmente la rimuovo
test -e deps && rm -f deps
# scrivo i pacchetti insallati non in world nel file ./deps (c'e' anche qualche pacchetto SYSTEM)
for i in $ALL
do
[ `/usr/bin/cat /var/cache/edb/world | grep $i | wc -l` = "0" ] && echo $i >> deps
done
echo i pachetti non presenti in wolrd sono stati elencati nel file ./deps
echo
echo ora controllo se ci sono pacchetti in ./deps che non sono dipendenze di nessun pacchetto
echo potrebbe volerci qualche tempo
echo vai a farti un giro e torna tra qualche minuto
echo oppure goditi la bella listona che segue
echo
test -e system && rm -f system
test -e nodeps && rm -f nodeps
DEPS=$(cat deps)
for i in $DEPS
do
#qua inizia la sezione per estrarre la lista dei pacchetti da cui dipende $i
#definisco le variabili con le cose che mi servono e scrivo in risultato di qpkg su pack
qpkg -q $i > pack
echo sto controllando se ci sono pacchetti che dipendono da $i
echo
ENDLINE=$(cat -n pack|grep "0;01"|tr -s [:blank:]|cut -f1|head -n 2|tail -n 1|cut -f2 -d" ")
#divido i pacchetti SYSTEM dagli altri con il primo if e li mando in ./system
if [ `cat -n pack | grep SYSTEM | wc -l` -gt 0 ]
then
echo $i >> system
echo è un pacchetto di sistema
echo
echo
else
#cerco le linee dell'output di qpkg che mi servono (devo cercare le prime perchè qpkg potrebbe
#dare le dipendenze anche per altri pacchetti con nome simile)
for j in `cat -n pack|grep -v "0;01"|grep -v "34;01"|grep -v "31;01"|tr -s [:blank:]| sed 's/\t/*/'`
do
[ `echo $j|cut -f2 -d" "|cut -f1 -d"*"` -lt $ENDLINE ] && echo $j|cut -f2 -d"*" >> deppack
done
#guardo se deppack esiste e agisco di conseguenza
if test -e deppack
then
DEPENDS=$(cat deppack)
echo è una dipendenza di $DEPENDS
echo
echo
else
echo non è dipendenza di niente
echo
echo
echo $i >> nodeps
fi
test -e deppack && rm -f deppack
fi
test -e pack && rm -f pack
done
#faccio il controllo con l'output di emerge --depclean e guardo quali sono i pacchetti in nodeps
#che emerge --depclean vorrebbe disinstallare e quali no
echo La lista dei pacchetti presenti in ./deps che non sono dipendenze
echo di alcun pacchetto installato e non compaiono in ./system
echo è stata salvata in ./nodeps
echo
echo confronto il depclean di emerge con ./nodeps e scrivo in ./matching_nodeps
echo i file che vorrebbe disinstallare e che compaiono in ./nodeps
echo scrivo in ./not_matching_nodeps quelli che invece non vi compaiono
echo
emerge -p --depclean > depclean
test -e matching_nodeps && rm -f matching_nodeps
test -e not_matching_nodeps && rm -f not_matching_nodeps
for k in `cat depclean | grep /`
do
if [ `cat nodeps|grep -w $k|wc -l` -eq 1 ]
then
echo $k >> matching_nodeps
else
echo $k >> not_matching_nodeps
fi
done
test -e depclean && rm -f depclean
echo Tutti i nomi dei pacchetti installati non presenti in world
echo sono stati salvati in ./deps
echo
echo Tutti i nomi dei pacchetti di sistema sono stati salvati in ./system
echo
echo in ./nodeps potrebbero comunque esserci pacchetti importanti
echo questo script valuta solo il responso di qpkg
echo quindi occhio a disinstallare tutto!
|
_________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne
Last edited by Cazzantonio on Tue Jul 20, 2004 4:56 pm; edited 1 time in total |
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Mon Jul 19, 2004 9:43 pm Post subject: Re: [Howto] Depcheck, script di aiuto per il depclean |
|
|
Che palle!
mi sono appena accorto che glibc viene buttato in nodeps!!
Questo accade perchè:
Code: |
ale@casa01 ale $ qpkg -q glibc
sys-libs/glibc-2.3.3.20040420 *
DEPENDED ON BY:
sys-libs/glibc-2.3.3.20040420
DEPENDED ON BY:
app-office/openoffice-1.1.1-r1
sys-devel/gcc-3.3.3-r6
sys-libs/glibc-2.3.3_pre20040207
DEPENDED ON BY:
app-office/openoffice-1.1.1-r1
sys-devel/gcc-3.3.3-r6
sys-libs/glibc-2.3.4.20040619
DEPENDED ON BY:
app-office/openoffice-1.1.1-r1
sys-devel/gcc-3.3.3-r6
sys-libs/glibc-2.3.2-r10
DEPENDED ON BY:
app-office/openoffice-1.1.1-r1
sys-devel/gcc-3.3.3-r6
sys-libs/glibc-2.3.4.20040605
etc...etc... |
in realtà glibc è ovviamente dipendenza di "qualcosa" (nientemeno che gcc), tuttavia la formattazione del testo di altri pacchetti è diversa
Code: | x11-wm/metacity-2.8.0 *
DEPENDED ON BY:
control-center-2.6.0.3
gnome-2.6
x11-themes/metacity-themes-1.0
DEPENDED ON BY:
x11-wm/metacity-2.8.1
DEPENDED ON BY:
gnome-base/control-center-2.6.0.3
gnome-base/gnome-2.6
......
|
ora non vedete i colori ma le dipendenze date all'inizio per metacity non sono colorate, e io uso proprio il colore come filtro per le dipendenze!
Siccome gcc non da' le dipendenze in bianco e nero all'inizio lo vede come dipendenza di nulla e lo butta in nodeps
Non capisco il perchè di questa diversa formattazione ma mi sembra che siano pochi i pacchetti che si comportano come gcc (potrei filtrare in maniera diversa ma era così semplice in questo modo...)
Che ci posso fare... tanto lo so che glibc non lo devo disinstallare e mi regolerò di conseguenza... _________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
fedeliallalinea Administrator
Joined: 08 Mar 2003 Posts: 31344 Location: here
|
Posted: Mon Jul 19, 2004 9:49 pm Post subject: |
|
|
Ottimo script _________________ Questions are guaranteed in life; Answers aren't. |
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Mon Jul 19, 2004 9:53 pm Post subject: |
|
|
Confermo che sys-libs/glibc è l'unico pacchetto che si comporta in maniera anomala
ora lo metto in world e fine della storia _________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Mon Jul 19, 2004 9:57 pm Post subject: |
|
|
fedeliallalinea wrote: | Ottimo script |
Grazie
Mi fa piacere essere stato utile a qualcuno!
Beh, comunque non è certo la soluzione definitiva per il depclean (e non l'ho pensata solo per quello, sennò il check bastava farlo solo sui pacchetti elencati da emerge --depclean)
Mi serve soprattutto per fare ordine nel sistema
Non ho mai capito perchè ci fosse solo world e non altri file con tutto il resto delle informazioni che potevano servire _________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Tue Jul 20, 2004 8:02 am Post subject: |
|
|
purtroppo soffre degli st[essi problemi per i quali ho interrotto (per il momento) lo sviluppo del mio script: qpkg e' troppo bacato per adesso per potervi fare seriamente affidamento.
andrebbe riscritta tutta la funzione che lo governa, cosa che in effetti sto lentamente rifacendo in bash _________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Tue Jul 20, 2004 8:14 am Post subject: |
|
|
volevo segnalarti un errore
il file system conterra' sempre e solo una voce.
Dovresti rimuovere il file system non all'interno del ciclo.
Lo script e' interessante perche' genera un po' di "statistiche sul sistema" pero' soffre' aime' dei bug di qpkg.
Non so se l'avevi visto ma fonderia aveva fatto uno script (depclean) che porta agli stessi risultati (anche se ha qc controllo in + su quelli injected) di matching_nodeps.
L'argomento mi e' molto caro in quanto si sente vivamente la mancanza di un uninstaller decente.
Complimenti per l'iniziativa.
Ciao
/EDIT: preceduto _________________ while True:Gentoo() |
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Tue Jul 20, 2004 8:23 am Post subject: |
|
|
FonderiaDigitale wrote: |
andrebbe riscritta tutta la funzione che lo governa, cosa che in effetti sto lentamente rifacendo in bash |
lo stavo facendo pure io.. (al momento solo nel cervello)
mi sembra pero' che bash scripting non sia proprio il + comodo.
una versione DUMB l'ho gia' fatta... ma e' proprio dumb perche' lavora come se tutte le use flags fossero settate (alquanto improbabile)
c'e' di buono che e' molto conservativo e quando un pkt e' indicato come da rimuovere...al 99% e' vero.
al momento uso l'output di depclean e del mio per fare pulizia.
a che punto sei con qpkg-new? _________________ while True:Gentoo() |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Tue Jul 20, 2004 10:41 am Post subject: |
|
|
c'e' chi gia l'ha fatta in bash...anche se ai tempi del menga.
sto in stallo causa contingenze.. appena puoto ricomincio _________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Tue Jul 20, 2004 4:58 pm Post subject: |
|
|
xchris wrote: | volevo segnalarti un errore
il file system conterra' sempre e solo una voce.
Dovresti rimuovere il file system non all'interno del ciclo.
|
OOPS... grazie corretto, ora dovrebe andare... (spero però di non aver sbagliato a fare cut & paste) _________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Tue Jul 20, 2004 5:04 pm Post subject: |
|
|
FonderiaDigitale wrote: | purtroppo soffre degli st[essi problemi per i quali ho interrotto (per il momento) lo sviluppo del mio script: qpkg e' troppo bacato per adesso per potervi fare seriamente affidamento.
andrebbe riscritta tutta la funzione che lo governa, cosa che in effetti sto lentamente rifacendo in bash |
Si, sapevo che qpkg era bacato... Infatti ho preferito fargli generare semplicemente una lista per restringere il campo della ricerca manuale, che ora come ora resta l'unica vera soluzione "sicura" per fare il depclean
Cmunque ora voglio cercare il tuo script per il depclean... che di sicuro funziona meglio del mio (l'ho fatto un po' di corsa, come si può notare dagli errori... e poi ormai sei famoso per gli script fonderia ) _________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Tue Jul 20, 2004 10:19 pm Post subject: |
|
|
grazie, ma non me lo merito.
in ogni caso prima di fare manovre, fai un backup.. ti conviene. _________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
|