Gentoolkit
1.
Introduzione
Cosa è Gentoolkit?
Gentoo è una distribuzione unica, e presenta alcune difficoltà che non esistono
per le altre distribuzioni. Quando gli sviluppatori di Gentoo ed i collaboratori
scoprono alcune di queste difficoltà, scrivono degli strumenti per semplificare
la vita degli utenti ed il lavoro degli amministratori. Molti di questi
strumenti hanno contribuito al Progetto Gentoo, e sono stati inclusi nel
pacchetto app-portage/gentoolkit
Nota:
In questo momento ci sono due versioni di gentoolkit:
app-portage/gentoolkit e app-portage/gentoolkit-dev Mentre il
primo contiene script per l'amministrazione, il secondo contiene script
specifici per aiutare gli sviluppatori di Gentoo. Questo documento parla
unicamente di gentoolkit.
|
Gentoolkit contiene un insieme di strumenti utili per la gestione delle proprie
installazioni e per tenere traccia di quello che accade nel proprio sistema
quando vengono installati dei programmi. Molti utenti --soprattutto quelli che
aggiornano il loro sistema spesso-- troveranno utile avere gentoolkit
installato.
Installazione
Come per ogni pacchetto Gentoo, l'installazione è un semplice emerge.
Codice 1.1: Ottenere ed installare gentoolkit |
# emerge gentoolkit
|
Nota:
Molti degli strumenti presenti in gentoolkit rivelano delle informazioni
importanti riguardo il sistema o richiedono privilegi di root. Per questo motivo
alcuni dei programmi potranno essere eseguiti (o perchè funzionino
correttamente) solo da utenti con privilegi root.
|
Trovare la documentazione
Tutta la documentazione che occorre per ogni componente di gentoolkit (oltre le
pagine man) è presente in
/usr/share/doc/gentoolkit-[versione]/[nome-programma]/.
2.
equery
Introduzione
equery è uno strumento che visualizza una grande varietà di informazioni
riguardanti i pacchetti installati nel sistema, e molto altro ancora. equery
--help mostrerà tutte le possibili opzioni.
Nota:
Non tutte le opzioni elencate da equery --help sono state ancora
implementate. In ogni caso quelle non ancora supportate sono chiaramente
indicate. Notare inoltre che ogni opzione ha anche una versione contratta, ad
esempio invece di belongs è possibile utilizzare b.
|
Nota:
Ricordare che equery attualmente cambia il formato del proprio output
se passato ad un pipe. Il formato in questo caso è pensato per renderne più
semplice l'utilizzo da parte delle applicazioni a cui è passato, ma può essere
disabilitato tramite l'opzione --no-pipe. Tenere presente questa nota se
si scrivono script che includono equery.
|
Trovare a quale pacchetto appartiene un determinato file
equery può anche trovare il pacchetto a cui un determinato file
appartiene, utilizzando l'opzione belongs (o semplicemente b).
Codice 2.1: Trovare l'ebuild che ha installato un determinato file |
# equery belongs /usr/bin/audacious
[ Searching for file(s) /usr/bin/audacious in *... ]
media-sound/audacious-1.1.2 (/usr/bin/audacious)
|
Utilizzando l'opzione -f, si possono cercare i pacchetti i cui file
corrispondano ad un'espressione regolare. L'opzione -e è utile per
interrompere la ricerca nel momento in cui viene trovata una corrispondenza.
Verificare se un pacchetto è danneggiato
Alcune volte può essere utile controllare se un pacchetto sia per caso
danneggiato. equery può verificare l'md5 come anche i timestamp per
indicare quando un pacchetto potrebbe essere stato corrotto, sostituito o
rimosso.
Codice 2.2: Controllare l'integrità di un pacchetto |
# equery check gentoolkit
[ Checking app-portage/gentoolkit-0.2.0 ]
* 54 out of 54 files good
|
Tenere presente che nel caso vengano modificati i file di configurazione dopo
l'installazione di un pacchetto, quest'ultimo potrebbe essere rilevato come
"danneggiato".
Avere un elenco di tutte le dipendenze
equery può anche restituire una lista di tutte le dipendenze dirette di
un pacchetto. La funzione che in questo caso bisognerà utilizzare è
depends:
Codice 2.3: Cercare pacchetti che dipendono da pygtk |
# equery depends pygtk
[ Searching for packages depending on pygtk... ]
app-office/dia-0.93
dev-python/gnome-python-2.0.0-r1
gnome-extra/gdesklets-core-0.26.2
media-gfx/gimp-2.0.4
x11-libs/vte-0.11.11-r1
|
Grafico delle dipendenze
equery può anche rappresentare graficamente le dipendenze di un
pacchetto specifico. Questo grafico rappresenta tutte le dipendenze, sia
dirette che indirette, del pacchetto in questione.
Codice 2.4: Grafico delle dipendenze per cdrtools |
# equery depgraph cdrtools
Displaying dependencies for app-cdr/cdrtools-2.01_alpha37
`-- app-cdr/cdrtools-2.01_alpha37
`-- sys-libs/glibc-2.3.4.20040808 (virtual/libc)
`-- sys-kernel/linux-headers-2.4.22 (virtual/os-headers)
`-- sys-apps/baselayout-1.10.4
`-- sys-apps/sysvinit-2.85-r1
`-- sys-apps/gawk-3.1.3-r1
`-- sys-apps/util-linux-2.12-r4
`-- sys-apps/sed-4.0.9
`-- sys-libs/ncurses-5.4-r4
`-- sys-apps/pam-login-3.14
`-- sys-libs/pam-0.77-r1
`-- sys-libs/cracklib-2.7-r10
`-- sys-apps/miscfiles-1.3-r1
`-- app-arch/gzip-1.3.5-r1
`-- sys-apps/portage-2.0.50-r10
|
Per esempio, mentre le glibc hanno una dipendenza diretta sui cdrtools, i
linux.headers sono una dipendenza indiretta. Notare che l'output include anche
le informazioni riguardo i pacchetti virtuali. Nell'esempio precedente,
cdrtools richiede anche virtual/libc e non sys-libs/glibc ma quest'ultimo
fornisce virtual/libc.
Elencare i file che appartengono ad un ebuild
equery può elencare tutti i file che appartengono ad un pacchetto
installato. Se non si sa quali file sono stati installati nel sistema da un
determinato pacchetto, essi possono venire elencati tramite equery.
Codice 2.5: Elencare i file |
# equery files gentoolkit
[ Searching for packages matching gentoolkit... ]
app-portage/gentoolkit-0.2.0
* Contents of app-portage/gentoolkit-0.2.0:
/usr
/usr/bin
/usr/bin/equery
/usr/bin/etcat
/usr/bin/euse
/usr/bin/glsa-check
/usr/bin/qpkg
/usr/bin/revdep-rebuild
/usr/lib
/usr/lib/gentoolkit
/usr/lib/gentoolkit/pym
/usr/lib/gentoolkit/pym/gentoolkit
/usr/lib/gentoolkit/pym/gentoolkit/__init__.py
/usr/lib/gentoolkit/pym/gentoolkit/gentoolkit.py
/usr/lib/gentoolkit/pym/gentoolkit/pprinter.py
/usr/lib/gentoolkit/pym/glsa.py
/usr/sbin
/usr/share
/usr/share/doc
/usr/share/doc/gentoolkit-0.2.0_pre10
[...]
|
L'opzione files di equery include alcune sotto-opzioni, elencate
nella pagina man di equery. che permettono di modificare l'output del
comando.
Cercare i pacchetti che utilizzano particolari flag USE
Se si vuole trovare quali pacchetti nel proprio sistema utilizzano particolari
flag USE, equery ha l'opzione hasuse:
Codice 2.6: Cercare i pacchetti che utilizzano la flag USE firefox |
# equery hasuse firefox
[ Searching for USE flag firefox in all categories among: ]
* installed packages
[I--] [ ] dev-python/gnome-python-extras-2.14.0-r1 (0)
[I--] [ ] media-video/totem-2.16.4 (0)
|
Ottenere elenchi dei pacchetti
equery offre una potente opzione per elencare i pacchetti nel proprio
sistema, sia in portage che nell'overlay, Provare questa funzione:
Codice 2.7: Elencare i pacchetti con equery |
# equery list gentoolkit
[ Searching for package 'gentoolkit' in all categories among: ]
* installed packages
[I--] [ ] app-portage/gentoolkit-0.2.0 (0)
|
La query standard cercherà nel sistema i pacchetti installati aventi il nome
dato. Se la ricerca ha esito positivo, verranno mostrate le seguenti
informazioni: la posizione del pacchetto tra le prime parentesi quadre (I ->
Installato, P -> Portage, O -> Overlay), gli eventuali mascheramenti tra le
seconde parentesi quadre (~ per keyword, - per architettura o M hard masked),
poi la categoria ed il nome completo, infine lo slot in cui si trova il
pacchetto.
Un altro esempio, questa volta verrà utilizzata l'opzione local per cercare il
pacchetto nel proprio albero portage e nella propria directory di overlay.
Codice 2.8: Utilizzare l'opzione local con equery |
# equery list -p -o vim
[ Searching for package 'vim' in all categories among: ]
* installed packages
[I--] [ ] app-editors/vim-6.3-r4 (0)
* Portage tree (/usr/portage)
[-P-] [M~] app-editors/vim-7.0_alpha20050126 (0)
[-P-] [M~] app-editors/vim-7.0_alpha20050201 (0)
[-P-] [ ] app-editors/vim-6.3-r2 (0)
[-P-] [M~] app-editors/vim-7.0_alpha20050122 (0)
[-P-] [M~] app-editors/vim-core-7.0_alpha20050126 (0)
[-P-] [ ] app-editors/vim-core-6.3-r3 (0)
[-P-] [M~] app-editors/vim-core-7.0_alpha20050122 (0)
[-P-] [M~] app-editors/vim-core-7.0_alpha20050201 (0)
[-P-] [ ] app-editors/vim-core-6.3-r4 (0)
* overlay tree (/opt/ebuilds)
|
Trovare le dimensioni del pacchetto
Ci si è mai chiesti a quanto ammonta lo spazio occupato da un particolare
pacchetto installato? Dal momento che un pacchetto può avere i propri files
sparpagliati su più directory, il classico du -hc potrebbe non essere
sufficiente. Non c'è da preoccuparsi, equery può tornare utile anche in
questa situazione!
Codice 2.9: Dimensione pacchetto |
# equery size openoffice-bin
* app-office/openoffice-bin-1.1.2
Total Files : 2908
Total Size : 223353.31 KiB
|
equery mostra lo spazio occupato e il numero totale dei file appartenenti
al pacchetto dato.
Informazioni sulle flag USE utilizzate da un pacchetto
equery può essere utilizzato per ottenere informazioni riguardo le flag
USE utilizzate da un particolare pacchetto. Comunica quali flag sono attualmente
utilizzate e quali sono disponibili.
Codice 2.10: Visualizzare le flag utilizzate e disponibili |
# equery uses wireshark
[ Colour Code : set unset ]
[ Legend : (U) Col 1 - Current USE flags ]
[ : (I) Col 2 - Installed With USE flags ]
U I [ Found these USE variables in : net-analyzer/wireshark-0.99.4 ]
- - adns : Adds support for the adns DNS client library
+ + gtk : Adds support for x11-libs/gtk+ (The GIMP Toolkit)
- - ipv6 : Adds support for IP version 6
- - kerberos : Adds kerberos support
- - portaudio : Adds support for the crossplatform portaudio audio API
- - selinux : !!internal use only!! Security Enhanced Linux support, this must
be set by the selinux profile or breakage will occur
- - snmp : Adds support for the Simple Network Management Protocol if available
+ + ssl : Adds support for Secure Socket Layer connections
- - threads : Adds threads support for various packages. Usually pthreads
|
wireshark è installato con le flag gtk e ssl, ma esistono altre flag disponibili
per il pacchetto. Per maggiori informazioni sulle flag USE, fare riferimento al
capitolo Flag
USE del Manuale Gentoo.
Dov'è l'ebuild?
Inoltre è possibile trovare quale ebuild è stato utilizzato per un particolare
pacchetto, il tutto utilizzando sempre equery. Questo si può ottenere
utilizzando equery which che mostra il percorso assoluto all'ebuild
selezionato.
Codice 2.11: Mostrare il percorso all'ebuild |
# equery which cdrtools
/usr/portage/app-cdr/cdrtools/cdrtools-2.01_alpha37.ebuild
|
3.
euse
Introduzione
euse è unp strumento per vedere, attivare e disattivare le flag USE a
vari livelli. Per maggiori informazioni sulle flag USE fare riferimento a Flag USE.
Consultare euse -h per visualizzare l'aiuto e tutte le opzioni.
Visualizzare, attivare e disattivare le flag USE
euse -a legge le flag USE correntemente attive e le visualizza.
Nota:
Ci sono 5 colonne che euse utilizza per mostrare le flag
utilizzate e non utilizzate e dove tutte le flag sono state impostate. Le
colonne rappresentano l'utilizzo o meno di una flag tramite -/+, indicano
inoltre se la flag è stata impostata come variabile d'ambiente (E), nel
make.conf (C), nel make.defaults (D) o nel make.globals (G). L'output è quindi
simile a [+ECDG].
|
Codice 3.1: Vedere tutte le flag USE attive |
# euse -a
X [+ CD ]
aalib [+ ]
acpi [+ C ]
alsa [+ C ]
apache2 [+ C ]
apm [+ D ]
avi [+ D ]
berkdb [+ D ]
bitmap-fonts [+ D ]
bonobo [+ ]
cdr [+ C ]
crypt [+ CD ]
cscope [+ C ]
cups [+ CD ]
curl [+ ]
emboss [+ D ]
encode [+ D ]
esd [+ ]
fam [+ ]
fbcon [+ C ]
firefox [+ C ]
font-server [+ D ]
foomaticdb [+ D ]
fortran [+ D ]
gd [+ C ]
gdbm [+ D ]
gif [+ CD ]
gimpprint [+ C ]
gnome [+ CD ]
gphoto2 [+ ]
gpm [+ CD ]
gstreamer [+ C ]
gtk [+ D ]
gtkhtml [+ C ]
guile [+ ]
imagemagick [+ ]
imlib [+ CD ]
innodb [+ ]
ipv6 [+ D ]
javascript [+ C ]
jpeg [+ CD ]
kde [+ D ]
ldap [+ ]
libg++ [+ CD ]
libwww [+ CD ]
mad [+ CD ]
mbox [+ C ]
md5sum [+ C ]
mikmod [+ CD ]
mmx [+ C ]
motif [+ CD ]
mp3 [+ ]
mpeg [+ CD ]
mpeg4 [+ C ]
mysql [+ C ]
ncurses [+ CD ]
nls [+ D ]
nvidia [+ C ]
odbc [+ ]
offensive [+ ]
ogg [+ CD ]
opengl [+ CD ]
oss [+ D ]
pam [+ CD ]
pdflib [+ CD ]
perl [+ CD ]
png [+ CD ]
python [+ CD ]
qt [+ D ]
quicktime [+ CD ]
readline [+ CD ]
ruby [+ ]
sdl [+ CD ]
slang [+ D ]
spell [+ CD ]
sse [+ C ]
ssl [+ CD ]
svga [+ CD ]
tcltk [+ C ]
tcpd [+ D ]
tiff [+ C ]
truetype [+ CD ]
usb [+ C ]
vanilla [+ C ]
x86 [+ C ]
xml [+ ]
xosd [+ C ]
xv [+ CD ]
xvid [+ C ]
zlib [+ CD ]
|
Allo stesso modo è possibile utilizzare euse -a -g per vedere le flag USE
attive globalmente. euse -a -l fa la stessa cosa ma per le flag USE
locali. -g e -l sono subopzioni di euse e necessitano
un'opzione prima di loro (come -a) per funzionare correttamente.
Codice 3.2: Vedere le flag USE attive localmente |
# euse -a -l
bitmap-fonts [+ D ]
font-server [+ D ]
fortran [+ D ]
gimpprint [+ C ]
md5sum [+ C ]
mpeg4 [+ C ]
nvidia [+ C ]
offensive [+ ]
truetype [+ CD ]
|
È possibile utilizzare euse anche per attivare o disattivare delle flag
in USE. I comandi sono euse -E nomeflag (attiva una flag) e euse -D
nomeflag (disattiva la flag).
Avvertenza:
Non utilizzare euse -E o euse -D senza impostare una flag. Questo
attiverà o disattiverà TUTTE le flag in /etc/make.conf. Sebbene venga
fatto una copia di sicurezza in /etc/make.conf.euse_backup,
prestare attenzione nell'utilizzo di euse -E o euse -D.
|
Codice 3.3: Attivare e disattivare le flag USE |
# euse -E 3dfx
/etc/make.conf was modified, a backup copy has been placed at
/etc/make.conf.euse_backup
USE="alsa acpi apache2 -arts cups cdr crypt cscope -doc fbcon \
firefox gd gif gimpprint gnome gpm gstreamer gtkhtml imlib \
innodb -java javascript jpeg libg++ libwww mad mbox md5sum \
mikmod mmx motif mpeg mpeg4 mysql ncurses nvidia \
ogg odbc offensive opengl pam pdflib perl png python \
quicktime readline sdl spell sse ssl svga tcltk tiff truetype usb \
vanilla X xosd xv xvid x86 zlib 3dfx"
# euse -D 3dfx
/etc/make.conf was modified, a backup copy has been placed at
/etc/make.conf.euse_backup
USE="alsa acpi apache2 -arts cups cdr crypt cscope -doc fbcon \
firefox gd gif gimpprint gnome gpm gstreamer gtkhtml imlib \
innodb -java javascript jpeg libg++ libwww mad mbox md5sum \
mikmod mmx motif mpeg mpeg4 mysql ncurses nvidia \
ogg odbc offensive opengl pam pdflib perl png python \
quicktime readline sdl spell sse ssl svga tcltk tiff truetype usb \
vanilla X xosd xv xvid x86 zlib -3dfx"
|
Nota:
euse non rimuove fisicamente la flag da make.conf, semplicemente
aggiunge un segno - davanti la flag in modo da disattivarla. Bisognerà rimuovere
manualmente le flag indesiderate.
|
4.
Altri strumenti
revdep-rebuild
Questo strumento è il Ricostruttore di Dipendenze Inverse di Gentoo. Controllerà
tutti gli ebuild installati alla ricerca di qualche pacchetto avente una o più
dipendenze spezzate, magari a causa dell'aggiornamento di un pacchetto dal quale
dipende. Può eventualmente emergere in automatico il pacchetto incriminato ma
può anche succedere che un dato pacchetto non funzioni più con la dipendenza
correntemente installata, nel qual caso si dovrà aggiornare manualmente il
pacchetto. È possibile passare l'opzione --pretend a revdep-rebuild per
vedere cosa verrà aggiornato prima di proseguire.
Codice 4.1: Utilizzare revdep-rebuild in modalità pretend |
# revdep-rebuild -p
Checking reverse dependencies...
Packages containing binaries and libraries broken by any package update,
will be recompiled.
Collecting system binaries and libraries... done.
(/root/.revdep-rebuild.1_files)
Collecting complete LD_LIBRARY_PATH... done.
(/root/.revdep-rebuild.2_ldpath)
Checking dynamic linking consistency...
broken /usr/lib/ao/plugins-2/libarts.so (requires libartsc.so.0)
broken /usr/lib/kde3/libkpresenterpart.so (requires libartskde.so.1 libqtmcop.so.1
libsoundserver_idl.so.1 libkmedia2_idl.so.1 libartsflow.so.1 libartsflow_idl.so.1 libmcop.so.1)
broken /usr/lib/ruby/site_ruby/1.8/i686-linux/fox.so (requires libFOX-1.0.so.0)
broken /usr/lib/xine/plugins/1.0.0/xineplug_ao_out_arts.so (requires libartsc.so.0)
broken /usr/lib/perl5/vendor_perl/5.8.0/i686-linux/auto/SDL_perl/SDL_perl.so (requires libSDL_gfx.so.0)
broken /usr/lib/libloudmouth-1.so.0.0.0 (requires libgnutls.so.10)
broken /usr/bin/k3b (requires libartskde.so.1 libqtmcop.so.1 libsoundserver_idl.so.1 libkmedia2_idl.so.1
libartsflow.so.1 libartsflow_idl.so.1 libmcop.so.1)
broken /usr/bin/lua (requires libhistory.so.4)
broken /usr/bin/lyx (requires libAiksaurus-1.0.so.0)
broken /usr/bin/luac (requires libhistory.so.4)
broken /usr/bin/avidemux2 (requires libartsc.so.0)
broken /usr/bin/pptout (requires libxml++-0.1.so.11)
broken /usr/bin/xml2ps (requires libxml++-0.1.so.11)
done.
(/root/.revdep-rebuild.3_rebuild)
Assigning files to ebuilds... done.
(/root/.revdep-rebuild.4_ebuilds)
Evaluating package order... done.
(/root/.revdep-rebuild.5_order)
All prepared. Starting rebuild...
emerge --oneshot --nodeps -p =app-cdr/k3b-0.11.14 =app-office/koffice-1.3.2 =app-office/lyx-1.3.4 \
=app-office/passepartout-0.2 =dev-lang/lua-5.0.2 =dev-ruby/fxruby-1.0.29 =media-libs/libao-0.8.5 \
=media-libs/xine-lib-1_rc5-r3 =media-video/avidemux-2.0.26 =net-libs/loudmouth-0.16
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild R ] app-cdr/k3b-0.11.14
[ebuild R ] app-office/koffice-1.3.2
[ebuild R ] app-office/lyx-1.3.4
[ebuild R ] app-office/passepartout-0.2
[ebuild R ] dev-lang/lua-5.0.2
[ebuild R ] dev-ruby/fxruby-1.0.29
[ebuild R ] media-libs/libao-0.8.5
[ebuild R ] media-libs/xine-lib-1_rc5-r3
[ebuild R ] media-video/avidemux-2.0.26
[ebuild R ] net-libs/loudmouth-0.16
Now you can remove -p (or --pretend) from arguments and re-run revdep-rebuild.
|
Se si vogliono emergere nuovamente alcuni pacchetti rimuovere la -p dal
comando revdep-rebuild ed i pacchetti presenti nella lista precedente verranno
riemersi.
glsa-check
glsa-check è uno strumento ancora in test che tiene traccia dei vari
GLSA (Gentoo Linux Security Advisory) e che probabilmente in futuro verrà
integrato in emerge ed equery.
eread
eread è uno strumento molto semplice per visualizzare i file di log
prodotti da >=portage-2.1. È possibile impostare il salvataggio dei file
di elog configurando un paio di variabili in /etc/make.conf:
Codice 4.2: Abilitare elog in /etc/make.conf |
PORTAGE_ELOG_CLASSES="log"
PORTAGE_ELOG_SYSTEM="save"
|
Nota:
Questo è solamente uno dei modi per salvare i messaggi di elog. Per maggiori
informazioni su come funziona lo strumento elog di Portage,fare riferimento alla
pagina appropriata nel Manuale di
Portage.
|
Una volta che elog è stato configurato in modo soddisfacente, basta eseguire
eread per vedere i propri file di log.
Codice 4.3: Usare eread |
$ eread
This is a list of portage log items. Choose a number to view that file or
type q to quit.
1) app-portage:gentoolkit-0.2.4_pre2:20070320-000256.log
2) app-portage:gentoolkit-0.2.4_pre2:20070320-000258.log
3) app-portage:gentoolkit-0.2.4_pre2:20070320-000319.log
4) app-portage:gentoolkit-0.2.3:20070320-000408.log
Choice?
|
Selezionare un numero per visualizzare il file tramite il programma di
paginazione specificato nella variabile d'ambiente PAGER. Se PAGER non è
impostato, verrà utilizzato less.
Dopo aver visualizzato il file di elog, verrà richiesto se si vuole cancellare
il file.
eclean
eclean è uno strumento per rimuovere i vecchi file sorgenti ed i vecchi
pacchetti binari dal proprio sistema.
Quando un pacchetto viene compilato ed installato, i file sorgenti vengono
scaricati e preservati in DISTDIR, solitamente
/usr/portage/distfiles. Ciò può portare ad un accumulo di gigabyte
di materiale, a lungo andare, se non viene effettuata una pulizia periodica. È
possibile eseguire eclean-dist per ripulire solamente i file sorgenti da
DISTDIR.
È possibile creare archivi dei pacchetti installati usando quickpg o
FEATURES="buildpkg". Questi pacchetti archiviati vengono mantenuti in PKGDIR,
solitamente /usr/portage/packages. Quando non se ne ha più
bisogno, o se sono troppo vecchi, è possibile eseguire eclean-pkg per
rimuoverli da PKGDIR. È un buon metodo per assicurarsi che qualunque pacchetto
si possieda sia relativo all'ultima versione.
Per maggiori informazioni su eclean e su trucchi per mantenere un
sistema libero da dati inutili, leggere man eclean.
|