# Pulire la spazzatura da /etc?

## CRV§ADER//KY

Ho una gentoo "vecchia" di qualche anno. Come ben sapete, i files in /etc non vengono cancellati quando i pacchetti a cui appartengono vengono disinstallati; l'ovvia conseguenza è che, col tempo, la directory /etc si ritrova a contenere un sacco di spazzatura inutile.

C'è un modo per fare pulizia? L'ideale sarebbe ottenere una lista di tutti i files in /etc che non appartengono a nessun pacchetto.

----------

## Ic3M4n

si ci stavo pensando anche io perchè ho un po' lo stesso problema. però non ho trovato niente del genere. credo che finora nessuno se ne sia preoccupato perchè non conta che gli "smanettoni" mettono e tolgono pacchetti con una velovità impressionante. per esempio il mio server è un po' che è su ma è ancora bello "pulito". il fisso, che sarebbe un po' il pc di prova è ridotto da far abb. schifo.

----------

## fat_penguin

```
qpkg -f /etc/nomefile
```

... ti restituisce a quale pacchetto appartiene il file... se il risultato è nullo.. non appartiene piu a nessuno...

Occhio ai file creati a "mano" !!

byebye

fat_penguin

----------

## CRV§ADER//KY

 *fat_penguin wrote:*   

> 
> 
> ```
> qpkg -f /etc/nomefile
> ```
> ...

 

Eh giusto... peccato che un comando tipo

find /etc -type f -exec qpkg -f {} \;

(a parte il fatto che mostra quelli che HANNO un pacchetto di appartenenza mentre è richiesto il contrario) richieda circa 2 settimane per terminare....  :Rolling Eyes: 

----------

## Ic3M4n

beh... ce ne mettiamo 3 e ci mettiamo anche un 

```
diff
```

 :Very Happy: 

----------

## xchris

io avevo modificato un mio tool per fare questo lavoro.

Il problema era che dava troppi falsi positivi e l'ho messo nel armadio.

Eventualmente se puo' interessare lo cerco (non lo trovo :S) o eventualmente fondo md5check e checkintegrity per dare un tool generico per questo tipo di operazioni. (visto che cmq utilizzano un database comune)

ciao

----------

## CRV§ADER//KY

L'ideale sarebbe:

1)find /var/db/pkg -name CONTENTS -exec cat {} \; | grep "obj /etc/"  | sort > configs-in-portage.txt

per ottenere tutti i file di configurazione presenti in portage

2)uno script di sed (che NON so usare) che peschi solo la seconda parola, quella col percorso, da ogni riga

3)find /etc -type f | sort > configs-in-etc.txt

4)diff configs-in-portage.txt configs-in-etc.txt

Sarebbe vergognosamente comodo estendere uno script del genere all'intero disco fisso (escluse /home, /var/db, etc.), di modo da porter ricostruire da zero una gentoo lanciando semplicemente un emerge di tutti i pacchetti presenti nella vecchia e infine aggiungendo i file aggiuntivi.

----------

## Ic3M4n

 *Quote:*   

> Sarebbe vergognosamente comodo estendere uno script del genere all'intero disco fisso (escluse /home, /var/db, etc.), di modo da porter ricostruire da zero una gentoo lanciando semplicemente un emerge di tutti i pacchetti presenti nella vecchia e infine aggiungendo i file aggiuntivi.

 per questo esistono altre cose, tipo 

- dd

- cp -a

oppure puoi utilizzare tool propri di portage come quickpkg o se l'hai già abilitato nel make.conf buildpkg; sulla macchina ospite trasferisci i pacchetti ed il file di world e dai un emerge usepkgonly file di world. nell'ultimo caso se hai usato quickpkg ti copia i file in /etc modificati. quindi già configurati

----------

## CRV§ADER//KY

 *Ic3M4n wrote:*   

>  *Quote:*   Sarebbe vergognosamente comodo estendere uno script del genere all'intero disco fisso (escluse /home, /var/db, etc.), di modo da porter ricostruire da zero una gentoo lanciando semplicemente un emerge di tutti i pacchetti presenti nella vecchia e infine aggiungendo i file aggiuntivi. per questo esistono altre cose, tipo 
> 
> - dd
> 
> - cp -a
> ...

 

Non mi sono spiegato; la mia idea è finalizzata al backup, dove sono importanti il tempo e la dimensione del backup mentre ha scarsa rilevanza (in quanto accade solo in caso di disastro) il tempo necessario per il recovery.

L'idea di fare un backup di sistema che prende una decina di Mb (/home esclusa) è a dir poco interessante....

Riassumendo, il backup dovrebbe funzionare così:

1)viene generata una lista di tutti i files installati da portage, tramite il comando

find /var/db/pkg -name CONTENTS -exec cat {} \;

2)viene generata una lista, in formato identico, di tutti i files presenti in /, a meno di una serie di directory (/home, /var/db/pkg, etc. etc. etc.)

3)i files che non sono presenti nella prima lista o che hanno MD5SUM diverso vengono bzippati, incluso /var/lib/portage/world. In una gentoo "pura", ossia dove non sono avvenute installazioni manuali, questo dovrebbe limitarsi a quei files in /etc che sono stati modificati dall'utente.

Mentre per il restore:

1)viene scompattata la stageX (a piacere)

2)vengono rimessi al loro posto i files bzippati, compreso /var/lib/portage/world

3)emerge -upvD world

4)etc-update e... ta-daaaaaaah! Dovresti avere una gentoo assolutamente equivalente a quella persa nel disastro.

Questo metodo sarebbe anche funzionale per coloro che devono migrare da x86 a x86-64.

La differenza di tempo?

Questo è il tempo richiesto per l'md5sum di un file da 17Mb:

real    0m0.849s

user    0m0.103s

sys     0m0.077s

Questo è il tempo per il bzip2 del medesimo file:

real    0m22.070s

user    0m20.759s

sys     0m0.326s

Devo aggiungere altro?  :Cool: 

----------

## Delta9

Mi sembrava che cruft (è da qualche parte nel forum) facesse proprio questo

----------

## Ic3M4n

questo è il successore di cruft. che da quello che ho capito non è più mantenuto.

----------

## CRV§ADER//KY

Sto provando cruft, molto bello... quel che non capisco è che sul forum dice che non è più mantenuto, ma sul sito web la data di ultima modifica del file è 13-Jun-2005 03:11.

----------

## xchris

io starei attento con quei tool.  :Smile: 

riportano molti falsi positivi (compresi molti socket!)

ciao

----------

## .:chrome:.

piuttosto fai una cosa... tieni d'occhio l'output di emerge, durante gli aggiornamenti. vedi subito quali files smettono di essere usati

esempio: recentemente è uscito il nuovo baselayout, che, tra gli altri, non usa più /etc/hostname, ma /etc/conf.d/hostname: questa cosa viene segnalata, e seguendo l'output puoi mantenere pulito il tuo sistema

----------

## Cazzantonio

 *k.gothmog wrote:*   

> piuttosto fai una cosa... tieni d'occhio l'output di emerge, durante gli aggiornamenti. 

 

In realtà bisognerebbe fare soprattutto attenzione alle rimozioni dei pacchetti (quelle insidiose righe "cfgpro" che indicano i file che non sono stati rimossi...)

Mi chiedo (come del resto anche per gli ewarn e gli einfo) come mai ancora non ci sia il modo per riassumere alla fine quanto di interessante sputa fuori l'output di emerge durante le operazioni

----------

## CRV§ADER//KY

Ho finito di far girare cruft, con estrema attenzione.

Mi ha scassato un po' di pacchetti, ma nulla che una ricompilazione non abbia risolto. L'unico pacchetto scassato che non è stato "beccato" da revdep-rebuild è stato tetex.

Risultato.......

120 Mb di pattume in meno!!!  :Cool:   :Cool:   :Cool:   :Cool:   :Cool: 

----------

## federico

 *CRV§ADER//KY wrote:*   

> Ho finito di far girare cruft, con estrema attenzione.
> 
> Mi ha scassato un po' di pacchetti, ma nulla che una ricompilazione non abbia risolto. L'unico pacchetto scassato che non è stato "beccato" da revdep-rebuild è stato tetex.
> 
> Risultato.......
> ...

 

Cavoli... e avevi 120mega di file di configurazione ?!

----------

## gutter

 *CRV§ADER//KY wrote:*   

> 
> 
> 120 Mb di pattume in meno!!!     

 

Sembrano tanti pure a me  :Shocked: 

Ma cosa ti ha tolto di preciso?

----------

## federico

 *gutter wrote:*   

>  *CRV§ADER//KY wrote:*   
> 
> 120 Mb di pattume in meno!!!      
> 
> Sembrano tanti pure a me 
> ...

 

Ho provato al volo a vedere cosa farebbe a me; ho lanciato il cruft, gli ho fatto fare il suo bel file di log di quello che toglierebbe e ho misurato quanto toglierebbe con sto coso 

```

import os

size=0

fp=file('cruftfiles','r')

for i in fp.readlines():

    try:

        size=size+os.path.getsize(i[:-1])

    except OSError:

        pass

fp.close()

print (size/1024)/1024

```

in python che fa schifo per la cronaca ma e' mattina e ho sonno.

Ebbene secondo lui dovrebbe togliermi 195 mega di cose, pero' a ben vedere mi toglie pezzi di kernel vecchi, robe in /usr/share non meglio definite e via discorrendo... Non di meno pretenderebbe di segare qualsiasi programma fatto da me inserito nel sistema. Questo coso andrebbe utilizzato con notevole attenzione, solo che esamina 13577 file nel mio caso e vagliarli uno ad uno sarebbe un po' oneroso.

----------

## CRV§ADER//KY

 *federico wrote:*   

> Ebbene secondo lui dovrebbe togliermi 195 mega di cose

 

Nulla di strano se, come me, hai una gentoo vecchia di 2-3 anni e non hai mai fatto una pulizia del genere.

 *Quote:*   

> pero' a ben vedere mi toglie pezzi di kernel vecchi

 

Sì anche a me pretende di cancellare i moduli del kernel, basta toglierli dalla lista.

 *Quote:*   

> robe in /usr/share non meglio definite

 

Il mio consiglio caloroso: sposta tutto in una directory a parte prima di cancellare, cancella, verifica che continui a funzionare tutto e infine elimina il backup.

 *Quote:*   

> Non di meno pretenderebbe di segare qualsiasi programma fatto da me inserito nel sistema.

 

Giustamente. I programmi fatti da te (e qualsiasi cosa che non usi portage) andrebbero messi un /usr/local o in /opt.

Ho scritto un paio di script ad hoc:

cruft-cp lista.txt: copia tutti i files elencati da / a ~/cruft, mantenendo la gerarchia delle directory e i permessi

```
#!/bin/bash

mkdir -p ~/cruft

for f in `cat $1` 

do

   cp -a --parents $f ~/cruft

done
```

cruft-rm lista.txt: elimina tutti i files nella lista

```
#!/bin/bash

for f in `cat $1` 

do

   rm -rf $f

done
```

Occhio a pacchetti che quasi sicuramente dovrai riemergere subito dopo:

tetex

perl

e ovviamente devi lanciare revdep-rebuild.

Io, terminata la pulizia, ottengo appena 75 falsi positivi, più i moduli dei kernel vecchi:

```
/etc/X11/Sessions/XFce4

/etc/X11/Sessions/kde

/etc/X11/Sessions/nwn

/etc/X11/Sessions/nwn_dmc

/etc/X11/Sessions/xfce

/etc/X11/wcm.cursor

/etc/X11/wcm.eraser

/etc/X11/wcm.stylus

/etc/no-ip.conf

/etc/no-ip2.conf

/etc/raidtab

/etc/rsync

/etc/rsync/rsyncd.secrets

/etc/samba/smbpasswd

/etc/wacom.dat

/lib/libtermcap.so.2

/usr/lib/libcdio.so.0

/usr/share/snmp/mibs/.index

/usr/share/texmf/web2c/amstex.fmt

/usr/share/texmf/web2c/amstex.log

/usr/share/texmf/web2c/cont-en.efmt

/usr/share/texmf/web2c/cont-en.log

/usr/share/texmf/web2c/elatex.efmt

/usr/share/texmf/web2c/elatex.log

/usr/share/texmf/web2c/etex.efmt

/usr/share/texmf/web2c/etex.log

/usr/share/texmf/web2c/lambda.log

/usr/share/texmf/web2c/lambda.oft

/usr/share/texmf/web2c/latex.fmt

/usr/share/texmf/web2c/latex.log

/usr/share/texmf/web2c/metafun.log

/usr/share/texmf/web2c/metafun.mem

/usr/share/texmf/web2c/mf-nowin.base

/usr/share/texmf/web2c/mf.base

/usr/share/texmf/web2c/mf.log

/usr/share/texmf/web2c/mfw.base

/usr/share/texmf/web2c/mpost.log

/usr/share/texmf/web2c/mpost.mem

/usr/share/texmf/web2c/mptopdf.efmt

/usr/share/texmf/web2c/mptopdf.log

/usr/share/texmf/web2c/omega.log

/usr/share/texmf/web2c/omega.oft

/usr/share/texmf/web2c/pdfamstex.fmt

/usr/share/texmf/web2c/pdfamstex.log

/usr/share/texmf/web2c/pdfelatex.efmt

/usr/share/texmf/web2c/pdfelatex.log

/usr/share/texmf/web2c/pdfetex.efmt

/usr/share/texmf/web2c/pdfetex.log

/usr/share/texmf/web2c/pdflatex.fmt

/usr/share/texmf/web2c/pdflatex.log

/usr/share/texmf/web2c/pdftex.fmt

/usr/share/texmf/web2c/pdftex.log

/usr/share/texmf/web2c/plain.base

/usr/share/texmf/web2c/plain.fmt

/usr/share/texmf/web2c/plain.mem

/usr/share/texmf/web2c/tex.fmt

/usr/share/texmf/web2c/tex.log

/var/lib/net-snmp/snmpapp.conf

/var/log/mldonkey.log

/var/log/privoxy/jarfile

/var/log/privoxy/privoxy.log

/var/log/tor/tor.log

/var/log/vsftpd/vsftpd.log

/var/run/63-adsl.pid

/var/run/63-adsl.pid.pppd

/var/run/63-adsl.pid.pppoe

/var/run/cgisock

/var/run/console.lock

/var/run/pppd.tdb

/var/run/vmnat.10942

/var/run/vmnet-bridge-0.pid

/var/run/vmnet-natd-8.mac

/var/run/vmnet-natd-8.pid

/var/spool/cups-pdf

/var/spool/cups-pdf/SPOOL
```

----------

## emix

 *Cazzantonio wrote:*   

> Mi chiedo (come del resto anche per gli ewarn e gli einfo) come mai ancora non ci sia il modo per riassumere alla fine quanto di interessante sputa fuori l'output di emerge durante le operazioni

 

Quoto... credo che sia una delle cose più fastidiose del portage.

----------

## CRV§ADER//KY

OCCHIO che cruft tenterà di cancellarvi i seguenti files FONDAMENTALI:

/etc/raidtab

/etc/nssswitch.conf

----------

## xchris

IMHO è pericoloso e lo sconsiglio a chi non è ferrato!

----------

## bandreabis

Vorrebbe cancellarmi l'HD di windows!!!!  :Shocked: 

 :Laughing:   :Laughing:   :Laughing: 

----------

