Pagina 1 di 1
BASH - esistono alternative meno macchinose??
Inviato: ven 21 mag 2010, 21:52
da danix
Ciao a tutti,
perdonate il titolo non proprio chiaro ma non mi veniva in mente nulla di meglio
Oggi pomeriggio guardavo il ChangeLog di slackware64-current e mi domandavo come si fa a sapere in maniera più o meno automatica quali pacchetti sono stati rimossi per poi verificare nel proprio sistema ed eventualmente disinstallarli... siccome non ho trovato tools che facciano questa cosa in automatico, ho scritto 2 righe da lanciare in sequenza per effettuare questa verifica:
Codice: Seleziona tutto
for line in $(egrep "Removed\.$" ChangeLog.txt |cut -d':' -f1 |egrep "t?z$"); do basename $line;done >> rem_pkgs.txt
Questa prima sequenza prende ogni riga di pacchetto t?z che finisce con "Removed." nel ChangeLog e la ripulisce del percorso per poi salvarla nel file rem_pkgs.txt, poi tocca alla seconda sequenza andare a vedere cosa ci sia ancora installato di tutto quello che risulta in questo file:
Codice: Seleziona tutto
for line in $(cat rem_pkgs.txt); do PACK=$(echo $line | rev | cut -d- -f4- | rev); ls /var/log/packages/ |grep $PACK;done
Questa sequenza quindi fa il controllo sul database dei pacchetti e restituisce solo quello che effettivamente è installato...
Adesso, che voi sappiate ci sono già tools che fanno questa cosa o comunque, c'è un modo più veloce di farla??
Grazie mille in anticipo...

Re: BASH - esistono alternative meno macchinose??
Inviato: ven 21 mag 2010, 22:08
da Mario Vanoni
danix ha scritto:Ciao a tutti,
perdonate il titolo non proprio chiaro ma non mi veniva in mente nulla di meglio
Oggi pomeriggio guardavo il ChangeLog di slackware64-current e mi domandavo come si fa a sapere in maniera più o meno automatica quali pacchetti sono stati rimossi per poi verificare nel proprio sistema ed eventualmente disinstallarli... siccome non ho trovato tools che facciano questa cosa in automatico, ho scritto 2 righe da lanciare in sequenza per effettuare questa verifica:
Codice: Seleziona tutto
for line in $(egrep "Removed\.$" ChangeLog.txt |cut -d':' -f1 |egrep "t?z$"); do basename $line;done >> rem_pkgs.txt
Questa prima sequenza prende ogni riga di pacchetto t?z che finisce con "Removed." nel ChangeLog e la ripulisce del percorso per poi salvarla nel file rem_pkgs.txt, poi tocca alla seconda sequenza andare a vedere cosa ci sia ancora installato di tutto quello che risulta in questo file:
Codice: Seleziona tutto
for line in $(cat rem_pkgs.txt); do PACK=$(echo $line | rev | cut -d- -f4- | rev); ls /var/log/packages/ |grep $PACK;done
Questa sequenza quindi fa il controllo sul database dei pacchetti e restituisce solo quello che effettivamente è installato...
Adesso, che voi sappiate ci sono già tools che fanno questa cosa o comunque, c'è un modo più veloce di farla??
Grazie mille in anticipo...

Domanda, facendo i tuoi script con
time script.sh
quanto tempo impiegano sulla tua macchina?
Poi altra domanda, che impieghino
0m?? oppure 3m?? e` vitale per te?
Guarda che invecchi piu` in fretta!
Re: BASH - esistono alternative meno macchinose??
Inviato: ven 21 mag 2010, 22:20
da ZeroUno
slackpkg clean-system
Re: BASH - esistono alternative meno macchinose??
Inviato: ven 21 mag 2010, 22:27
da targzeta
C'è sempre il mio script
analyze_SlackPkg.sh, vedi se l'opzione '-m' può aiutarti.
Emanuele
Re: BASH - esistono alternative meno macchinose??
Inviato: ven 21 mag 2010, 22:28
da albatrosla
La prima mi sembra efficiente, senonché si potrebbe evitare di fargli fare un loop. Si può risolvere con un'unica stringa di sed:
Codice: Seleziona tutto
sed -e '/.*txz.*Removed\.$/!d' -e 's/.*\/\(.*\)\.txz.*$/\1/' ChangeLog.txt
La seconda fa un ls della directory /var/log/packages ad ogni giro, cosa che è poco efficiente, almeno vista sulla mia macchina sgangherata. Perciò si può manipolare l'output della precedente per costruire una stringa da passare a grep, del tipo -e pattern0 -e pattern1 [...] -e patternN:
Codice: Seleziona tutto
ls /var/log/packages/|grep -e `sed -e '/.*txz.*Removed\.$/!d' -e 's/.*\/\(.*\)\.txz.*$/\1/' ChangeLog.txt|sed -e :a -e '$!N;s/\n/ -e /;ta'`
In questo modo si ottiene direttamente la lista dei package da rimuovere già installati sul sistema.
L'ho testato or ora sul mio sistema e pare funzionare bene, ma le mie stringhe di sed sono spesso rozze, immagino che qualche guru di sed possa fare lo stesso in modo più efficiente (i.e. senza ricorrere al pipe sul secondo sed ma usando solamente la prima istanza).
Non va usato il clean-system suggerito da qualcuno: rimuove tutti i package third party, oltre a quelli che vuoi rimuovere tu!
Re: BASH - esistono alternative meno macchinose??
Inviato: ven 21 mag 2010, 22:43
da ZeroUno
albatrosla ha scritto:Non va usato il clean-system suggerito da qualcuno: rimuove tutti i package third party, oltre a quelli che vuoi rimuovere tu!
Ho scritto d'impulso. E' solo chei il 99% del software aggiuntivo che installo ha un suffisso alfanumerico, quindi li riconosco al volo.
ovviamente non va per un approccio metodico.
Re: BASH - esistono alternative meno macchinose??
Inviato: ven 21 mag 2010, 23:04
da danix
Grazie a tutti per le risposte, rispondendo a Mario, in effetti non mi cambia la vita se ci mettessi anche un'ora a fare il lavoro, ma per imparare ho piacere a confrontarmi con gli altri e vedere come loro farebbero quello che sto cercando di fare io... tutto qui
@Matteo && @Emanuele
slackpkg clean-system e analyze_slackpkg -m mi restituiranno anche i 3rd party e non è quello che voglio, con le 2 righe che ho buttato giù mi concentro solo su quello che c'è nel changelog (che è quello che voglio tenere aggiornato principalmente) il resto è optional
Grazie ad albatrosla per i suggerimenti, l'ultimo in particolare mi darà di che leggere per una settimana
Ri-grazie a tutti

Re: BASH - esistono alternative meno macchinose??
Inviato: ven 21 mag 2010, 23:10
da targzeta
Solo per dire che filtrare l'output del mio script è veramente banale.
Emanuele
Re: BASH - esistono alternative meno macchinose??
Inviato: sab 22 mag 2010, 23:03
da ildiama
ZeroUno ha scritto:albatrosla ha scritto:Non va usato il clean-system suggerito da qualcuno: rimuove tutti i package third party, oltre a quelli che vuoi rimuovere tu!
Ho scritto d'impulso. E' solo chei il 99% del software aggiuntivo che installo ha un suffisso alfanumerico, quindi li riconosco al volo.
ovviamente non va per un approccio metodico.
Sì, ma mica lo fa automaticamente. Ti fa una lista dei pacchetti che non fanno (più) parte della distro e che trova installati. Poi decidi tu cosa rimuovere e cosa lasciare. Quindi, va usato. Tra l'altro è praticamente il modo ufficiale slackware per fare questa operazione.