Repository 32bit  Forum
Repository 64bit  Wiki

Find external SlackPkg files: differenze tra le versioni

Da Slacky.eu.
(Filtrate correttamente le librerie glibc)
(Caricato i file esterni all'interno di wikislacky)
 
(4 revisioni intermedie di un utente non mostrate)
Riga 15: Riga 15:
installato?". Generalmente i dubbi sono infondati, quasi tutti i
installato?". Generalmente i dubbi sono infondati, quasi tutti i
pacchetti vengono rimossi completamente e non lasciano tracce, ma
pacchetti vengono rimossi completamente e non lasciano tracce, ma
è proprio quel 'quasi tutti' che non fa dormire sonno
+
è proprio quel 'quasi tutti' che non fa dormire sonni
tranquilli :).
+
tranquilli.
Lo script find_external_SlackPkg_files.sh esegue una scansione di
Lo script find_external_SlackPkg_files.sh esegue una scansione di
Riga 39: Riga 39:
{{Information
{{Information
|Informazione:
|Informazione:
|Si capisce che l'algoritmo è semplice ma la sia esecuzione è bella lunga. Diciamo che la vostra CPU non vi ringraziera.
+
|L'algoritmo è semplice ma la sia esecuzione è bella lunga. Diciamo che la vostra CPU non vi ringrazierà.
}}
}}
Riga 63: Riga 63:
Quindi ad esempio, se il file contiene le seguenti righe:
Quindi ad esempio, se il file contiene le seguenti righe:
<pre>
<pre>
# My comment
+
# My comments
/home
/home
/mnt
/mnt
/media
/media
/usr/share/fonts/*.dir
+
/usr/share/fonts/*/fonts.scale
/usr/share/mime update-mime-database
+
/usr/share/mime update-mime-database
</pre>
</pre>
Allora lo script ignorer&agrave;:
Allora lo script ignorer&agrave;:
* la directory ''/home''
* la directory ''/home''
* le directory contenenti i filesystem montati, ma che sono estranei alla distribuzione (''/mnt'' e ''/media'').
* le directory contenenti i filesystem montati, ma che sono estranei alla distribuzione (''/mnt'' e ''/media'').
* tutti i file generati dal comando '''mkfontdir'''
+
* tutti i file generati dal comando '''mkfontscale'''
* la directory ''/usr/share/mime'' se, e solo se, esiste il comando '''update-mime-database'''
* la directory ''/usr/share/mime'' se, e solo se, esiste il comando '''update-mime-database'''
{{Warning
{{Warning
|Nota:
|Nota:
|Se il path da filtrare contiene uno spazio, allora lo script penser&agrave; che ci&ograve; che si trova dopo lo spazia sia un comando da controllare. In questo caso, affinch&eacute; tutto funzioni, bisogna aggiungere un altro spazio e poi un comando sicuramente esistente (ad esempio la bash, visto che lo script &egrave; interpretato proprio da questa shell).
+
|Se il path da filtrare contiene uno spazio, allora lo script penser&agrave; che ci&ograve; che si trova dopo lo spazio sia un comando da controllare. In questo caso, affinch&eacute; tutto funzioni, bisogna aggiungere un altro spazio e poi un comando sicuramente esistente (ad esempio la bash, visto che lo script &egrave; interpretato proprio da questa shell).
  +
Es:
  +
/my path with spaces bash
}}
}}
{{Hint
{{Hint
|Nota:
|Nota:
|I percorsi sono passati al comando '''find''' tramite l'uso della sua opzione '''-path'''. Si veda il manuale di '''find''' per conoscere il formato accettato.
+
|I percorsi da filtrare sono passati al comando '''find''' tramite l'uso della sua opzione '''-path'''. Si veda il manuale di '''find''' per conoscere il formato accettato.
}}
}}
= Le opzioni =
= Le opzioni =
== -h ==
== -h ==
Questa opzione ha il solo scopo di mostrare l'help.
+
Mostra l'help ed esce.
== -f ==
== -f ==
Riga 117: Riga 117:
|Lo script individua correttamente le librerie installate dal pacchetto '''glibc''', ma questo rappresenta comunque un classico caso di '''doinst.sh''' non banale (si veda la sezione [[#Bug]]). Si faccia quindi attenzione ad eliminare 'a priori' tutti i file segnalati dallo script.
|Lo script individua correttamente le librerie installate dal pacchetto '''glibc''', ma questo rappresenta comunque un classico caso di '''doinst.sh''' non banale (si veda la sezione [[#Bug]]). Si faccia quindi attenzione ad eliminare 'a priori' tutti i file segnalati dallo script.
}}
}}
  +
  +
= KDE =
  +
KDE usa la directory ''/var/tmp'' per inserire le cache utenti. In
  +
particolare, per ogni utente crea la directory
  +
''/var/tmp/kdecache-username''. Essendo queste directory create a
  +
run-time da KDE lo script le individuer&agrave; come "estranee" a
  +
tutti i pacchetti.
  +
  +
Si pu&ograve; quindi inserire la seguente regola di filtraggio per
  +
evitare che lo script mostri in output tutte queste directory:
  +
/var/tmp/kdecache-* kde-mv
  +
il comando '''kde-mv''' viene installato con il pacchetto
  +
'kdebase-runtime'. Grazie a questa regola, quindi, tutte le cache
  +
utenti di KDE saranno ignorate sino a che si decide di mantenere nel
  +
sistema tutto il desktop environment. Alla rimozione di KDE (e quindi
  +
anche del comando '''kde-mv'''), lo script consiglier&agrave; di
  +
eliminare anche tutte la sua cache.
= Bug =
= Bug =
Ci sono un po' di note sull'algoritmo che vale la pena segnalare:
+
Per quanto lo script si sforzi di trovare tutti e soli quei file e
* alcuni '''doinst.sh''' sono scritti in maniera particolare e fanno ben altro che creare semplici link simbolici. Un caso per tutti &egrave; il '''doinst.sh''' della '''bash''' dove il file installato dal pacchetto non si chiama '''bash''' ma, ad esempio '''bash4.new'''. Sar&agrave; poi lo script di post-installazione a rinominare il file installato come '''bash'''. Quindi per lo script, paradossalmente, l'interprete che lo esegue (la shell bash, appunto) non &egrave; stato installato da nessun pacchetto.
+
directory "estranei" ai pacchetti installati, alcuni '''doinst.sh'''
* il comando '''[''' crea problemi con '''grep'''. Quest'ultimo comando viene usato per controllare se i file nella 'file list' appartengono o meno ad un pacchetto o ad un link creato da i '''doinst.sh'''. Il problema &egrave; che il carattere '[' ha un significato particolare per '''grep''' e quindi viene sollevato un errore. Si consiglia di filtrare il comando '''[''' aggiungengo nel file di filtro la seguente riga:<pre>*/bin/[</pre>
+
sono scritti in maniera particolare e fanno ben altro che creare
  +
semplici link simbolici. Ad esempio uno script di post installazione
  +
potrebbe creare nuove directory, oppure copiare e/o spostare dei file da
  +
una directory ad un'altra. Tutti questi rappresentano casi non banali
  +
che lo script non &egrave; in grado di individuare.
= Lo script =
= Lo script =
Bene, &egrave; ora giunto il momento di scaricare e provare lo script, che
Bene, &egrave; ora giunto il momento di scaricare e provare lo script, che
pu&ograve; essere trovato a questo link:
+
pu&ograve; essere trovato [[Media:Find_external_SlackPkg_files.sh|qui]].
[http://www.slacky.eu/~spina/script/find_external_SlackPkg_files.sh find_external_SlackPkg_files.sh]
+
  +
Un buon file da usare come filtro invece lo potete trovare [[Media:Find_external_SlackPkg_files_filter.txt|qui]].
  +
  +
una volta scaricato basta rinominarlo usando il comando seguente:
  +
mv find_external_SlackPkg_files_filter.txt ~/.find_external_SlackPkg_files
  +
Se secondo voi ci sono altri path che varrebbe la pena inserire in
  +
questo file, non esitate a scrivermi.
= Vedere anche =
= Vedere anche =
Riga 132: Riga 149:
= Copyright - License =
= Copyright - License =
Autore (ultima modifica): [[Utente:Spina|spina]] 12:29, 18 set 2011 (CEST)
+
Autore (ultima modifica): [[Utente:targzeta|targzeta]] 00:54, 3 ott 2011 (CEST)
  +
  +
Ringrazio gli utenti di Slacky.eu, Procopio e ZeroUno per i loro
  +
feedback e suggerimenti. Se lo script &egrave; migliorato nel tempo
  +
&egrave; soprattutto grazie a loro.
{{Information
{{Information
|GNU Free Documentation Licence
|GNU Free Documentation Licence

Versione attuale delle 23:28, 2 ott 2012

Indice

[modifica] Introduzione

I "maniaci delle pulizie" - come me - a volte hanno la necessità di scovare quei file, presenti nella root directory, che non appartengono a nessun pacchetto installato. Questo infatti permette di stabilire se quei file sono vecchi e vanno rimossi oppure sono file di configurazione (o altro) creati dai programmi a run-time.

Spesso e volentieri qualcuno installa un pacchetto ma poi si accorge che non gli serviva, quindi lo rimuove. Il dubbio si insinua nella mente di un "maniaco delle pulizie": "ho rimosso tutto? il sistema è ritornato come se il pacchetto non fosse mai stato installato?". Generalmente i dubbi sono infondati, quasi tutti i pacchetti vengono rimossi completamente e non lasciano tracce, ma è proprio quel 'quasi tutti' che non fa dormire sonni tranquilli.

Lo script find_external_SlackPkg_files.sh esegue una scansione di tutta la root directory e controlla, file per file, se esso è stato installato da un pacchetto Slackware oppure no. Quindi visualizza in output tutti quei file "estranei" ai pacchetti.

Lo script può essere eseguito sia come root che come utente normale. In quest'ultimo caso, ovviamente, lo script non potrà scandire quelle directory di proprietà di altri utenti, ma darà comunque dei buoni risultati.

[modifica] L'algoritmo

L'algoritmo è molto semplice, lo script esegue un find sulla root directory filtrando alcuni path (si veda la sezione #Filtrare dei percorsi). Una volta creata questa 'file list', lo script individua anche tutti i link simbolici creati dagli script doinst.sh dei vari pacchetti. Quindi, controlla quali tra i file presenti nella 'file list' non appartiene ad un pacchetto e non è neanche un link simbolico creato da un doinst.sh.


Informazione:
L'algoritmo è semplice ma la sia esecuzione è bella lunga. Diciamo che la vostra CPU non vi ringrazierà.

[modifica] Filtrare dei percorsi

Lo script non scandisce tutta la root directory, ma filtra i seguenti percorsi speciali:

  • /dev
  • /proc
  • /root
  • /sys
  • /var/log/packages
  • /var/log/scripts
  • /var/log/removed_packages
  • /var/log/removed_scripts

Si possono inoltre (ed è consigliato farlo) impostare dei filtri utente semplicemente creando il file ~/.find_external_SlackPkg_files. Il formato del file è il seguente:

  • tutte le righe vuote e le righe che iniziano con un '#' sono ignorate.
  • ogni riga non ignorata deve contenere esattamente un percorso e, opzionalmente, un comando da controllare. In quest'ultimo caso, il comando deve essere separato dal percorso da almeno un carattere di spaziatura; il percorso associato sarà filtrato se, e solo se, il comando esiste nel PATH.

Quindi ad esempio, se il file contiene le seguenti righe:

# My comments

/home
/mnt
/media
/usr/share/fonts/*/fonts.scale
/usr/share/mime                       update-mime-database

Allora lo script ignorerà:

  • la directory /home
  • le directory contenenti i filesystem montati, ma che sono estranei alla distribuzione (/mnt e /media).
  • tutti i file generati dal comando mkfontscale
  • la directory /usr/share/mime se, e solo se, esiste il comando update-mime-database


Nota:
Se il path da filtrare contiene uno spazio, allora lo script penserà che ciò che si trova dopo lo spazio sia un comando da controllare. In questo caso, affinché tutto funzioni, bisogna aggiungere un altro spazio e poi un comando sicuramente esistente (ad esempio la bash, visto che lo script è interpretato proprio da questa shell).

Es: /my path with spaces bash


Nota:
I percorsi da filtrare sono passati al comando find tramite l'uso della sua opzione -path. Si veda il manuale di find per conoscere il formato accettato.

[modifica] Le opzioni

[modifica] -h

Mostra l'help ed esce.

[modifica] -f

Mostra in output i percorsi filtrati ed esce.

[modifica] I link simbolici alle librerie

Alcuni link simbolici alle librerie, che lo script mostra in output, vengono creati dal comando ldconfig. In generale eliminare questi link non comporta danno poiché basta eseguire di nuovo il comando citato (e la Slackware di default lo fa ad ogni avvio) per ricrearli. E' ovvio però che sarebbe meglio lasciarli.

[modifica] Le glibc

Le librerie glibc non sono installate in maniera canonica. Il pacchetto installa queste librerie in una directory temporanea chiamata incoming e poi lo script di post-installazione sposta tutte le librerie nella locazione opportuna. Questo viene fatto proprio per impedire che le librerie vengano eliminate insieme al pacchetto. Se questo accadesse, infatti, un aggiornamento 'a caldo' delle glibc farebbe sì che tutti i comandi linkati con le vecchie librerie non funzionino più. Questo vorrebbe dire un blocco del sistema poiché non si avrebbero più a disposizione i comandi basilari come rm, ls, etc...


Attenzione:
Lo script individua correttamente le librerie installate dal pacchetto glibc, ma questo rappresenta comunque un classico caso di doinst.sh non banale (si veda la sezione #Bug). Si faccia quindi attenzione ad eliminare 'a priori' tutti i file segnalati dallo script.

[modifica] KDE

KDE usa la directory /var/tmp per inserire le cache utenti. In particolare, per ogni utente crea la directory /var/tmp/kdecache-username. Essendo queste directory create a run-time da KDE lo script le individuerà come "estranee" a tutti i pacchetti.

Si può quindi inserire la seguente regola di filtraggio per evitare che lo script mostri in output tutte queste directory:

/var/tmp/kdecache-*      kde-mv

il comando kde-mv viene installato con il pacchetto 'kdebase-runtime'. Grazie a questa regola, quindi, tutte le cache utenti di KDE saranno ignorate sino a che si decide di mantenere nel sistema tutto il desktop environment. Alla rimozione di KDE (e quindi anche del comando kde-mv), lo script consiglierà di eliminare anche tutte la sua cache.

[modifica] Bug

Per quanto lo script si sforzi di trovare tutti e soli quei file e directory "estranei" ai pacchetti installati, alcuni doinst.sh sono scritti in maniera particolare e fanno ben altro che creare semplici link simbolici. Ad esempio uno script di post installazione potrebbe creare nuove directory, oppure copiare e/o spostare dei file da una directory ad un'altra. Tutti questi rappresentano casi non banali che lo script non è in grado di individuare.

[modifica] Lo script

Bene, è ora giunto il momento di scaricare e provare lo script, che può essere trovato qui.

Un buon file da usare come filtro invece lo potete trovare qui.

una volta scaricato basta rinominarlo usando il comando seguente:

mv find_external_SlackPkg_files_filter.txt  ~/.find_external_SlackPkg_files

Se secondo voi ci sono altri path che varrebbe la pena inserire in questo file, non esitate a scrivermi.

[modifica] Vedere anche

unused_SlackPkg.sh

[modifica] Copyright - License

Autore (ultima modifica): targzeta 00:54, 3 ott 2011 (CEST)

Ringrazio gli utenti di Slacky.eu, Procopio e ZeroUno per i loro feedback e suggerimenti. Se lo script è migliorato nel tempo è soprattutto grazie a loro.

GNU Free Documentation Licence
This article is released under the GNU Free Documentation Licence. You are welcome to copy and redistribute it (subject to certain conditions).
Strumenti personali
Namespace

Varianti