Compilare e Comprimere..

Transcript

Compilare e Comprimere..
w w w.scruch.com/docs
Compilare e Comprimere..
Versione 1.0
Prima creazione:
Ultima modifica :
22 / gennaio / 2004
10 / febbraio / 2004
Gabriele Barni (Scruch) :
[email protected] , Uin: 50921134, Web: www.scruch.com
Indice:
1) Compilare
2) Formati compressi
- Gzip
- Bzip2
- Zip
- Compress
2003/2004 < G a b r i e l e B a r n i >
GNU / FDL Licenses
Questo articolo può essere riprodotto anche integralmente,
senza violare nessuna legge, in quanto è rilasciato sotto GNU
Free Documentation Licenses. (www.gnu.org)
www.scruch.com
Ho deciso di scrivere questo documento, che non vuol esser nient'altro che un mini
how-to su come gestire applicazioni da compilare e file da comprimere sotto linux.
Forse noioso per coloro che già smanettano con linux da tempo, ma credo utile per
i meno esperti che (a me per primo) capita di dimenticare la corretta sintassi da
usare in certe situazioni.
------------------------
COMPILARE
-------------------------
Ovviamente con gli rpm di redhat, e molti nuovi “standard”, non siamo più costretti
a compilare un programma per installarlo, tuttavia compilare un programma da
dei grossi vantaggi che l'installazione diretta tramite binari non riesce a dare: il
primo di tutti è l'aumento delle prestazioni, dato che durante la compilazione il
pacchetto viene ottimizzato per la vostra configurazione, la possibilità di poter
scegliere varie opzioni aggiuntive durante l'installazione, facilità nel aggiornare al
rilascio di nuovi update etc, etc...
Tornando un passo indietro ricordo che per poter eseguire un programma è
necessario che questo sia in grado di interagire direttamente con il processore, ma
dato che il processore interpreta solo il linguaggio macchina, un programmatore
sarebbe costretto a scrivere il programma con sfilze infinite di 0 e 1, per ovviare a
questo sono stati creati i linguaggi ad alto livello, coi quali è possibile scrivere
programmi utilizzando una sintassi molto più vicina al linguaggio naturale, però
resta che il processore è in grado di eseguire soltanto listati in linguaggio macchina,
perciò sono nati i compilatori, programmi in grado di tradurre un linguaggio
sorgente con un altro linguaggio target.
A grandi linee:
Dopo aver letto con cura il file README e INSTALL, si può procedere con una sintassi
più o meno simile a questa, diciamo che il 90% delle applicazioni si installa
utilizzando questi comandi.
tar -zxvf programma.tar.gz
cd programma/
./configure
make
make install
Analizziamo qualcosina in più:
/usr/src : il filesystem di linux, dedica questa directory per decomprimervici dentro
tutte le sorgenti dei nostri programmi che abbiamo installato, per scriverci bisogna
avere i privilegi root.
tar zxvf nome-.1.tar.gz serve a decomprimere l'archivio, se questo avesse come
estensione .tar.bz2 allora si usa jxvf nome1.1.tar.bz2 (ma di questo ne parliamo tra
qualche riga..)
configure , è il file caratteristiche dell'ormai diffuso gnu autoconf, si avvia
digitando ./configure, parte uno script che verifica il nostro sistema e configura i
sorgenti per la compilazione, se nel nostro sistema dovesse mancare un
componente, lui ci darebbe un errore. ( ./configure --prefix=/usr/local/ l
parametro prefix specifica di creare i Makefile in modo tale che i file eseguibili
vengano installati all’interno della gerarchica /usr/local )
config.log, tutte le operazioni che svolge lo script di configure vengono riportate in
questo file, che facilità molto anche nel controllare tutti gli errori che compaiono
durante il config.
config.chache , per ottimizzare le prestazioni di esecuzione le informazioni raccolte
durante il config vengono inserite in questo file, se alla prima prima esecuzione
c'erano degli errori per mancate dipendenze etc.. e avete provveduto a
correggerle, dovete eliminare questo file prima della prossima esecuzione di ./
configure ( rm config.chache )
make , con questo comando si può iniziare la compilazione vera e propria, e se
non presenta errori, si può impartire make install (quasi sempre è richiesto essere
loggati come root) per completare l'installazione copiando i binari e file di
configurazione nelle directory a loro dedicate. Si può facilitare il tutto dando fin
dall'inizio make && make install che esegue subito l'install solo . Se alla fine del
processo decidiamo di conservare i file sorgenti (ormai è una scelta classica
considerando gli HD di grosse dimensioni che si trovano in quasi tutti i nostri pc) è
utile digitare il comando make clean, se invece vogliamo eliminare le sorgenti
basterà cancellare la directory con un rm -rfi nomedir
Librerie Statiche: per intenderci quelle con l'estensione .a . Esse sono
semplicemente cataloghi di moduli oggetto che sono stati collezionati in un unico
file contenitore. Una libreria statica è utilizzata dal suo programma e da nessun
altro. Pensiamo però a più programmi che utilizzano, magari per altri scopi, la
stessa libreria statica. I programmi utilizzano la libreria statica distintamente, cioè
ognuno ne possiede una copia. Se questi devono essere eseguiti
contemporaneamente nello stesso sistema, i requisiti di memoria si moltiplicano di
conseguenza solo per ospitare funzioni assolutamente identiche.
Librerie Dinamiche: Permettono di essere sfruttate da più programmi, sono universali
e ciò permette di tenere solo una copia di una data libreria in memoria ad un certo
istante. L'uso delle librerie dinamiche perciò ci permette di utilizzare meno memoria
per eseguire dei programmi, di avere eseguibili molto più leggeri e risparmiare
spazio su disco.
---------------
FORMATI COMPRESSI
-----------------
Ecco volevo parlarvi anche due minuti inerente i formati di compressione tipici di
linux, di tipi c'e ne sono parecchi, ma forse quattro sono quelli con cui ci tocca
combattere ogni giorno, analizzandoli partendo proprio da quello più diffuso:
GZIP: è senz'altro il più diffuso in ambiente Unix, per utilizzarlo ci vogliono proprio
poche nozioni per poterlo usare, se vogliamo comprimi ad esempio il file
“largoEbanfo.txt” sarà sufficente il comando gzip largoEbanfo.txt nel caso invece
volessimo decomprimere un file gunzip allora il comando sarà: gzip -d
largoEbanfo.txt.gz , oppure gunzip largoEbanfo.txt.gz.
Spesso ci troviamo però difronte a file archivi compressi, e per gestire questo tipo di
file, è necessario l'uso del comando tar , il quale è in grado di archiviare intere
directory, il suo nome tar significa Tape ARchiver (ricorda i suoi antichi compiti).
Comprimnere una directory: tar zcvf largoEbanfo.txt.tar.gz directory/ , e invece per
decromprimere: tar xvfz largoEbanfo.txt.tar.gz . Un tar.gz non è altro che un insieme
di file e directory conservati in modo ordinato in un unico file non compresso. In tale
file sono presenti tutte le informazioni per ricostruire correttamente la gerarchia di
directory originale con tutto il suo contenuto.
N.B: Il tar è anche un ottimo strumento per fare backup veloci e puliti, ad esempio
se abbiamo archiviato la directory /home/scruch, e dopo una settimana volessimo
aggiornare il backup sarà sufficente utilizzare il seguente comando: tar uzvf
scruch.tgz , oppure tar -c 'find / -mtime -1 ! -type d -print' scriptino che permette di
aggiornare i file di un archivio modificati solo l'ultimo giorno. Tuttavia se avete
bisogno di effettuare backup seri, vi consiglio rsync che consente copia di file via
rete, ottimizzando i tempi di backup e ripristino dei dati. Lo si può configurare
attraverso /etc/rsyncd.conf , dove si possono settare le informazioni quali nomi
della condivisione, uid, gid, gli host a cui è consentito sfruttare il servizio etc etc..
BZIP2: è forse uno dei più nuovi formati di compressione utilizza il potente algoritmo
“Burrows-Wheeler block sorting“, è un utility in grado di comprimere con più
efficenza e allo stesso tempo ottenere una maggiore velocità dei suoi rivali, la sua
estensione è .bz2 , il suo utilizzo è simile a quello di gunzip, con bzip2 -d
decomprimiamo un file, e valgono tutte le regole che abbiamo elencato sopra.
ZIP: Senz'altro tra gli utenti windows è il più diffuso, ma non solo, questa utility è
presente anche nel mondo:VMS, MSDOS, OS/2, Minix, Atari and Macintosh ed è in
grado da solo di gestire gli archivi compressi, è comodo da usare in quanto
permette velocemente di comprimere un intera directory con il comando zip
compresso.zip *.txt , in questo modo inserisce nel archivio compresso.zip tutti i file
txt. Per decomprimere un file zip basterà usare unzip compresso.zip .
COMPRESS: due parole vanno dette all'ormai vecchio Compress , utilizza l'antico
algoritmo Lempel-Ziv, caratteristico dei file compress è l'estensione .Z l'utilizzo è
sempre lo stesso per comprimere basterà dare il comando: compress
largoEbanfo.txt.
TABELLA RIASSUNTIVA: ho eseguito un piccolo test per mostrarvi la differenza di
compressione delle varie alternative:
root@darkbox:~/Prova# ls -l
44781 Feb 1 15:14 Ping.txt (file originale)
4849 Jan 30 23:30 Ping.Z
(utilizzando compress)
3065 Feb 1 15:14 Ping.zip
(utilizzando zip)
2948 Feb 1 15:15 Ping.gz
(utilizzando gunzip)
1962 Feb 1 15:14 Ping.bz2
(utilizzando bzip2)