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)