1 487
contributi
(Prima versione) |
(Correzioni minori) |
||
Riga 1: | Riga 1: | ||
==Introduzione== | ==Introduzione== | ||
Come tutti sanno, o avranno notato, Debian | Come tutti sanno, o avranno notato, Debian � compilata con opzioni di compilazione generiche, penste per processori i386. | ||
Questa scelta | Questa scelta � stata fatta per questioni di stabilit�, a quanto ho trovato sulla rete. | ||
Per chi vuole sfruttare a fondo la propria macchina, e consigliata una ricompilazione con le ottimizzazioni relative al proprio processore, | |||
Innanzitutto, non tutti i programmi diventeranno | Per chi vuole sfruttare a fondo la propria macchina, e consigliata una ricompilazione con le ottimizzazioni relative al proprio processore, cos� da poter sfruttare fino in fondo tutte le innovazioni introdotte in questi anni, ma prima di affrontare questo argomento, per�, vorrei fare alcune precisazioni... | ||
Innanzitutto, non tutti i programmi diventeranno pi� veloci: esisteranno sempre i 'colli di bottiglia', come la velocit� di lettura degli Hard Disk, etc; quindi i programmi che ne trarranno giovamento maggiore saranno quelli che abusano di operazioni matematiche, e che stressano il processore... | |||
==Installazione== | ==Installazione== | ||
Ovviamente, trattandosi di Debian, | Ovviamente, trattandosi di Debian, � sufficiente dare un semplice: | ||
<pre> | <pre> | ||
# apt-get install apt-build | # apt-get install apt-build | ||
Riga 15: | Riga 17: | ||
Mentre il pacchetto viene scaricato insieme alle sue dipendenze, vi invito a fare una visitina a Debtoo, un interessante progetto per dare a Debian strumenti utili per la compilazione dei pacchetti... | Mentre il pacchetto viene scaricato insieme alle sue dipendenze, vi invito a fare una visitina a Debtoo, un interessante progetto per dare a Debian strumenti utili per la compilazione dei pacchetti... | ||
L'indirizzo | L'indirizzo � http://www.debtoo.org/ . | ||
Analizziamo le domande del processo di configurazione che viene lanciato durante l'installazione: | Analizziamo le domande del processo di configurazione che viene lanciato durante l'installazione: | ||
'''Where should apt-build download and build packages?''' | '''Where should apt-build download and build packages?''' | ||
La scelta di default va | |||
La scelta di default va pi� che bene...assicuratevi per� di avere un po' di spazio (4-5Gb sarebbero comodi), in quanto la compilazione ne richiede tanto, ed i sorgenti gi� processati non vengono rimossi automaticamente. | |||
'''Where must apt-build store built packages?''' | '''Where must apt-build store built packages?''' | ||
Qui siamo liberi di fare quello che vogliamo: apt-build, una volta terminata la compilazione, | |||
Qui siamo liberi di fare quello che vogliamo: apt-build, una volta terminata la compilazione, creer� il pacchetto debian ottimizzato per la nostra macchina. Qui dobbiamo indicare dove metterli... | |||
'''These are equivalent to -O1, -O2 and -O3. Optimization level is time dependant - in fact, the more you want to optimize your build the more time will be necessary for compiling but the faster your programs will be. Warning: Strong optimization may lead to stability problems. Which optimization level do you want?''' | '''These are equivalent to -O1, -O2 and -O3. Optimization level is time dependant - in fact, the more you want to optimize your build the more time will be necessary for compiling but the faster your programs will be. Warning: Strong optimization may lead to stability problems. Which optimization level do you want?''' | ||
Le scelte che mi sento di consigliare sono due: Medium per una ottimizzazione media.... Strong per una ottimizzazione avanzata (attenzione: | |||
Le scelte che mi sento di consigliare sono due: Medium per una ottimizzazione media.... Strong per una ottimizzazione avanzata (attenzione: pi� � alto il livello di ottimizzazione, pi� tempo impiega il processo...come � indicato nel testo della domanda. | |||
'''Add apt-build repository to sources.list?''' | '''Add apt-build repository to sources.list?''' | ||
Rispondendo 'Si' aggiungeremo al nostro sources.list una riga indicante il repository che viene creato da apt-build (la seconda domanda che ci | |||
Rispondendo 'Si' aggiungeremo al nostro sources.list una riga indicante il repository che viene creato da apt-build (la seconda domanda che ci � stata posta durante il processo di configurazione) | |||
'''Which options would you like to add to gcc?''' | '''Which options would you like to add to gcc?''' | ||
Qui possiamo passare delle opzioni aggiuntive a gcc... Eccone alcune: | Qui possiamo passare delle opzioni aggiuntive a gcc... Eccone alcune: | ||
-jX X indica il numero di compilazioni parallele consentite | -jX X indica il numero di compilazioni parallele consentite | ||
-pipe Riduce l'accesso al disco (velocizzando l'operazione) utilizzando il pipe (|) invece dei file temporanei | -pipe Riduce l'accesso al disco (velocizzando l'operazione) utilizzando il pipe (|) invece dei file temporanei | ||
'''What is your architecture?''' | '''What is your architecture?''' | ||
Ora ci | |||
Ora ci verr� mostrata una lista di famiglie di processori, relative alla 'marca' del nostro processore (nel mio caso tutte AMD)...scegliamo quella adeguata (nel mio caso, su un Compaq Presario 2100, athlon-xp) | |||
Siamo giunti al termine della configurazione! | Siamo giunti al termine della configurazione! | ||
Ancora un passaggio e saremo pronti a conoscere apt-build! | Ancora un passaggio e saremo pronti a conoscere apt-build! | ||
Bisogna modificare il file '''/etc/apt/sources.list''' aggiungendo i repository per i sorgenti. | Bisogna modificare il file '''/etc/apt/sources.list''' aggiungendo i repository per i sorgenti. | ||
Per quelli ufficiali Debian, | Per quelli ufficiali Debian, � sufficiente ricopiare la riga dei repository dei pacchetti normali e sostituire a 'deb' 'deb-src'. | ||
Ad esempio, se il nostro sources list contiene la riga: | Ad esempio, se il nostro sources list contiene la riga: | ||
<pre> | <pre> | ||
deb http://ftp.it.debian.org/debian/ sid main | deb http://ftp.it.debian.org/debian/ sid main | ||
</pre> | </pre> | ||
diventer� | |||
<pre> | <pre> | ||
deb http://ftp.it.debian.org/debian/ sid main | deb http://ftp.it.debian.org/debian/ sid main | ||
Riga 60: | Riga 76: | ||
==Opzioni== | ==Opzioni== | ||
Analizziamo un po' di opzioni, molto utili, che renderanno | Analizziamo un po' di opzioni, molto utili, che renderanno pi� comprensibili i comandi utilizzati in seguito. | ||
La sintassi di apt-build | La sintassi di apt-build � vicinissiama a quellad i apt-get, infatti troviamo, come comandi, i seguenti: | ||
'''update''' Aggiorna la lista dei pacchetti (come apt-get update) | '''update''' Aggiorna la lista dei pacchetti (come apt-get update) | ||
'''upgrade''' Esegue un aggiornamento del sistema, scaricando i pacchetti e compilandoli | '''upgrade''' Esegue un aggiornamento del sistema, scaricando i pacchetti e compilandoli | ||
'''install''' Scarica e compila il pacchetto indicato | '''install''' Scarica e compila il pacchetto indicato | ||
'''source''' Scarica e decomprime il pacchetto nella directory di compilazione (di solito /var/cache/apt-build/build ) | '''source''' Scarica e decomprime il pacchetto nella directory di compilazione (di solito /var/cache/apt-build/build ) | ||
'''remove''' Come apt-get remove | '''remove''' Come apt-get remove | ||
'''clean-build''' Provvede a pulire la directory contentente i sorgenti scaricati | '''clean-build''' Provvede a pulire la directory contentente i sorgenti scaricati | ||
'''clean-repository''' Provvede a pulire la directory contentente i pacchetti compilati | '''clean-repository''' Provvede a pulire la directory contentente i pacchetti compilati | ||
'''world''' Ricompila tutti i pacchetti correntemente installati | '''world''' Ricompila tutti i pacchetti correntemente installati | ||
'''info''' Visualizza le informazioni relative al pacchetto compilato | '''info''' Visualizza le informazioni relative al pacchetto compilato | ||
Le opzioni, invece, sono le seguenti: | Le opzioni, invece, sono le seguenti: | ||
'''--reinstall''' Ricompila e reinstalla il paccheto | |||
'''--reinstall''' Ricompila e reinstalla il paccheto gi� installato...ci torner� comodo... | |||
'''--rebuild''' Ricompila il pacchetto indicato | '''--rebuild''' Ricompila il pacchetto indicato | ||
'''--remove-builddep''' Rimuove le dipendenze di compilazione (librerie -dev) installate da apt-build per la compilazione | '''--remove-builddep''' Rimuove le dipendenze di compilazione (librerie -dev) installate da apt-build per la compilazione | ||
'''--nowrapper''' Non usa il wrapper: compilazione senza le opzioni di ottimizzazione | '''--nowrapper''' Non usa il wrapper: compilazione senza le opzioni di ottimizzazione | ||
'''--purge''' Durante la rimozione, verranno cancellati anche i file di configurazione presenti in /etc | '''--purge''' Durante la rimozione, verranno cancellati anche i file di configurazione presenti in /etc | ||
'''--noupdate''' Non esegue 'apt-get update' prima dell'installazione dei pacchetti | '''--noupdate''' Non esegue 'apt-get update' prima dell'installazione dei pacchetti | ||
'''--build-command cmd''' Usa cmd per compilarei il pacchetto | '''--build-command cmd''' Usa cmd per compilarei il pacchetto | ||
'''--patch file''' Applica la patch prima di compilare il pacchetto | '''--patch file''' Applica la patch prima di compilare il pacchetto | ||
'''--patch-strip n''' Indica lo striplevel per il file di patch (equivale al parametro -pX del comando patch | '''--patch-strip n''' Indica lo striplevel per il file di patch (equivale al parametro -pX del comando patch | ||
'''--yes -y''' Risponde 'Yes' a tutte le domande poste da apt (usare con prudenza) | '''--yes -y''' Risponde 'Yes' a tutte le domande poste da apt (usare con prudenza) | ||
'''--version -v''' Mostra la versione di apt-build | '''--version -v''' Mostra la versione di apt-build | ||
'''--source''' Non scarica i sorgenti (indica che i sorgenti sono | |||
'''--source''' Non scarica i sorgenti (indica che i sorgenti sono gi� stati scaricati | |||
'''--build-only''' Non installare le dipendenze del pacchetto (usare con attenzione) | '''--build-only''' Non installare le dipendenze del pacchetto (usare con attenzione) | ||
'''--build-dir dir''' Specifica la directory in cui eseguire la compilazione | '''--build-dir dir''' Specifica la directory in cui eseguire la compilazione | ||
'''--repository-dir dir''' Specifica la directory dove mettere i file compilati | '''--repository-dir dir''' Specifica la directory dove mettere i file compilati | ||
'''--target-release''' Indica da quale release (Stable, Testing, Unstable, Experimental) scaricare i sorgenti | '''--target-release''' Indica da quale release (Stable, Testing, Unstable, Experimental) scaricare i sorgenti | ||
'''--sources-list''' Specifica un sources.list alternativo | '''--sources-list''' Specifica un sources.list alternativo | ||
Le opzioni che useremo spesso saranno '''--reinstall --noupdate'''. | Le opzioni che useremo spesso saranno '''--reinstall --noupdate'''. | ||
Ora guardiamo come utilizzare apt-build per ricompilare pacchetti | |||
Ora guardiamo come utilizzare apt-build per ricompilare pacchetti gi� presenti nel sistema... | |||
<pre> | <pre> | ||
# apt-build --reinstall install kdebase | # apt-build --reinstall install kdebase | ||
Riga 99: | Riga 144: | ||
ad esempio... | ad esempio... | ||
l'opzione '''--reinstall''' ci | l'opzione '''--reinstall''' ci permetter� di installare il pacchetto anche se nel sistema � gi� presente un pacchetto con la medesima versione. | ||
Se invece il pacchetto non | Una volta lanciato il comando, apt-build si occuper� di sincronizzare la lista dei pacchetti, scaricher� le librerie di sviluppo necessarie alla compilazione del pacchetto ed eventualmente si occuper� anche delle dipendenze. Una volta scaricato il pacchetto dei sorgenti provveder� alla compilazione. | ||
Potrebbero apparire errori di compilazione: in questi casi bisogna leggerli con attenzione per capire se � un errore prodotto da apt-build o da un errore nei sorgenti e, in tal caso, chiedere aiuto a S. Google =) | |||
Se invece il pacchetto non � stato precedentemente installato, � possibile installarlo omettendo l'opzione --reinstall: | |||
<pre> | <pre> | ||
# apt-build install nomepacchetto | # apt-build install nomepacchetto | ||
</pre> | </pre> | ||
Comando 'strano', che non ho ancora avuto modo di sperimentare | Comando 'strano', che non ho ancora avuto modo di sperimentare �: | ||
<pre> | <pre> | ||
# apt-build world | # apt-build world | ||
Riga 115: | Riga 162: | ||
che permette la ricompilazione di tutti i pacchetti correntemente installati sul computer! | che permette la ricompilazione di tutti i pacchetti correntemente installati sul computer! | ||
Allo stesso modo | Allo stesso modo � possibile aggiornare il sistema direttamente, tramite un semplice | ||
<pre> | <pre> | ||
# apt-build upgrade | # apt-build upgrade | ||
Riga 121: | Riga 168: | ||
Una precisazione | Una precisazione � d'obbligo: non tutti i repository offrono i pacchetti contenenti i sorgenti, e per questo ci si pu� trovare di fronte ad alcuni errori... | ||
Qui sta a voi risolverli, o installando il pacchetto binario o cercando un altro mirror... | Qui sta a voi risolverli, o installando il pacchetto binario o cercando un altro mirror... | ||
Riga 128: | Riga 175: | ||
Lo strumento | Lo strumento � veramente potente, anche se non esente da bug... | ||
Promette bene e porta una ventata di | Promette bene e porta una ventata di novit� in un campo precedentemente complesso in quanto, per compilare con ottimizzazioni, era necessario ricorrere a strumenti un po' complessi e sfortunatamente tutti indipendenti tra loro, allontanando tutto questo dall'utente novizio... | ||
Ora, anche chi vuole un sistema compilato ad hoc per la propria macchina, | Ora, anche chi vuole un sistema compilato ad hoc per la propria macchina, potr� restare fedele e usufruire della potenza di apt! | ||
==Faq== | ==Faq== | ||
'''Q: Ho spostato la directory della cache di apt-build, ma ora apt mi da degli errori...''' | '''Q: Ho spostato la directory della cache di apt-build, ma ora apt mi da degli errori...''' | ||
Riga 143: | Riga 189: | ||
</pre> | </pre> | ||
per riconfigurare il tutto con i nuovi path. | per riconfigurare il tutto con i nuovi path. | ||
Se invece si vuole agire a mano | Se invece si vuole agire a mano � sufficiente modificare il file '''/etc/apt/apt-build.conf''' e il sources.list, aggiornando i path relativi ad apt-build. | ||
'''Q: Come mai non vengono elencati tutte le famiglie di processori durante la configurazione?''' | '''Q: Come mai non vengono elencati tutte le famiglie di processori durante la configurazione?''' | ||
'''A:''' Semplicemente | '''A:''' Semplicemente perch� lo script di configurazione di apt-build esegue un check preliminare in modo da determinare la marca del processore. | ||
'''Q: Mi sono accorto di non aver configurato correttamente apt-build, come posso fare a modificare la configurazione??''' | '''Q: Mi sono accorto di non aver configurato correttamente apt-build, come posso fare a modificare la configurazione??''' | ||
Riga 153: | Riga 201: | ||
# dpkg-reconfigure apt-build | # dpkg-reconfigure apt-build | ||
</pre> | </pre> | ||
'''Q: Ho notato che apt-build sostituisce gcc e g++ con uno script, cosa vuol dire?''' | '''Q: Ho notato che apt-build sostituisce gcc e g++ con uno script, cosa vuol dire?''' | ||
'''A:''' Apt-build utilizza un wrapper, uno script che si occupa di chiamare gcc e g++ passandogli dei parametri aggiuntivi (quelli per l'ottimizzazione) se a chiamarlo | '''A:''' Apt-build utilizza un wrapper, uno script che si occupa di chiamare gcc e g++ passandogli dei parametri aggiuntivi (quelli per l'ottimizzazione) se a chiamarlo � apt-build. | ||
'''Q: Visto che apt-build modifica lo script per lanciare gcc e g++, verranno applicate le opzioni di ottimizzazione anche quando compilo senza usare apt-build?''' | '''Q: Visto che apt-build modifica lo script per lanciare gcc e g++, verranno applicate le opzioni di ottimizzazione anche quando compilo senza usare apt-build?''' | ||
'''A:''' No, in quanto, all'interno del wrapper (che | '''A:''' No, in quanto, all'interno del wrapper (che � uno script di shell) viene controllato se � apt-build il chiamante e, in quel caso, applica le opzioni per l'ottimizzazione; nel caso in cui gcc/g++ non vengono chiamati da apt-build, non sono applicate le ottimizzazioni. | ||
Riga 164: | Riga 215: | ||
http://www.debtoo.org/ | http://www.debtoo.org/ | ||
Debian, con in | Debian, con in pi� la possibilit� di eseguire compilazioni in stile gentoo! | ||
Da tenere d'occhio! Qui | Da tenere d'occhio! Qui � presente un po' di documentazione su apt-build. | ||
http://www.debianplanet.org/node.php?id=210 | http://www.debianplanet.org/node.php?id=210 | ||
Why isn't Debian 'ported' to the higher x86 machines? | Why isn't Debian 'ported' to the higher x86 machines? | ||
Interessante discussione sul | Interessante discussione sul perch� non si � deciso di compilare debian ottimizzandola un po' di pi�... | ||
http://debian-i586.sourceforge.net/ | http://debian-i586.sourceforge.net/ | ||
Interessante progetto di ricompilazione di Debian. | Interessante progetto di ricompilazione di Debian. | ||
Ora sembrerebbe un po'...`smorto`...magari si potrebbe dargli una mano... | Ora sembrerebbe un po'...`smorto`...magari si potrebbe dargli una mano... |
contributi