Apt-build: ottimizzazione dei pacchetti: differenze tra le versioni

nessun oggetto della modifica
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 4: Riga 4:
Questa scelta è stata fatta per questioni di stabilità, a quanto ho trovato sulla rete.
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, 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...
A chi vuole sfruttare a fondo la propria macchina, è consigliata una ricompilazione con le ottimizzazioni relative al proprio processore, così da poter sfruttare a fondo tutte le innovazioni introdotte in questi anni.


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...
Prima di affrontare questo argomento è necessario fare una precisazione: 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 e Configurazione==


Ovviamente, trattandosi di Debian, è sufficiente dare un semplice:
Ovviamente, trattandosi di Debian, è sufficiente dare un semplice:
Riga 15: Riga 15:
</pre>
</pre>


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 [http://www.debtoo.org/ Debtoo], un interessante progetto per dare a Debian strumenti utili per la compilazione dei pacchetti.
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:
Riga 22: Riga 22:
'''Where should apt-build download and build packages?'''
'''Where should apt-build download and build packages?'''


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.
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, creerà il pacchetto Debian ottimizzato per la nostra macchina. Qui dobbiamo indicare dove metterli...
Qui siamo liberi di fare quello che vogliamo: apt-build, una volta terminata la compilazione, creerà il pacchetto Debian ottimizzato per la nostra macchina. 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: più è alto il livello di ottimizzazione, più tempo impiega il processo...come è indicato nel testo della domanda.
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 'Sì' 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)
Rispondendo 'Sì' aggiungeremo al nostro <code>sources.list</code> 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
Riga 49: Riga 49:
'''What is your architecture?'''
'''What is your architecture?'''


Ora ci verrà mostrata una lista di famiglie di processori, relative alla 'marca' del nostro processore (nel mio caso tutte AMD)...scegliamo quella adeguata prendendo spunto da questa lista: [http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html lista] (nel mio caso, su un Compaq Presario 2100, athlon-xp)
Ora ci verrà mostrata una lista di famiglie di processori, relative alla 'marca' del nostro processore (nel mio caso tutte AMD): scegliamo quella adeguata prendendo spunto da questa lista: [http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html lista] (nel mio caso, su un Compaq Presario 2100, athlon-xp).




Riga 57: Riga 57:




Bisogna modificare il file '''/etc/apt/sources.list''' aggiungendo i repository per i sorgenti.
Bisogna modificare il file <code>/etc/apt/sources.list</code> aggiungendo i repository per i sorgenti.
Per quelli ufficiali Debian, è sufficiente ricopiare la riga dei repository dei pacchetti normali e sostituire a 'deb' 'deb-src'.
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 <code>sources.list</code> contiene la riga:
<pre>
<pre>
deb http://ftp.it.debian.org/debian/ sid main
deb http://ftp.it.debian.org/debian/ sid main
Riga 78: Riga 78:
La sintassi di apt-build è vicinissima a quella di apt-get, infatti troviamo, come comandi, i seguenti:
La sintassi di apt-build è vicinissima a quella di 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 <code>/var/cache/apt-build/build<code>);
; remove : Come apt-get remove
; remove : Come apt-get remove;
; clean-sources : esegue un debian/rules clean, che rimuove solamente i prodotti della compilazione
; clean-sources : esegue un debian/rules clean, che rimuove solamente i prodotti della compilazione;
; clean-build : rimuove il contenuto della directory '''/var/cache/apt-build/build/''' che contiene i sorgenti dei pacchetti ricompilati;  
; clean-build : rimuove il contenuto della directory <code>/var/cache/apt-build/build/</code> che contiene i sorgenti dei pacchetti ricompilati;  
; clean-repository : rimuove il contenuto della directory '''/var/cache/apt-build/repository/''' che contiene i pacchetti ricompilati tramite apt-build
; clean-repository : rimuove il contenuto della directory <code>/var/cache/apt-build/repository/</code> che contiene i pacchetti ricompilati tramite apt-build;
; 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 pacchetto già installato...ci tornerà comodo...
; --reinstall : Ricompila e reinstalla il pacchetto 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 <code>/etc</code>;
; --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 compilare il pacchetto
; --build-command cmd : Usa cmd per compilare 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 già stati scaricati
; --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 <code>sources.list</code> alternativo.




Le opzioni che useremo spesso saranno '''--reinstall --noupdate'''.
Le opzioni che useremo spesso saranno <code>'''--reinstall --noupdate'''</code>.


==Utilizzo==
==Utilizzo==
Ora guardiamo come utilizzare apt-build per ricompilare pacchetti già presenti nel sistema...
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
</pre>
</pre>


ad esempio...
ad esempio, l'opzione <code>'''--reinstall'''</code> ci permetterà di installare il pacchetto anche se nel sistema è già presente un pacchetto con la medesima versione.
l'opzione '''--reinstall''' ci permetterà di installare il pacchetto anche se nel sistema è già presente un pacchetto con la medesima versione.


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.
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 =)
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:
Se invece il pacchetto non è stato precedentemente installato, è possibile installarlo omettendo l'opzione <code>--reinstall</code>:
<pre>
<pre>
# apt-build install nomepacchetto
# apt-build install nomepacchetto
Riga 143: Riga 142:




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...
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.


==Conclusioni==
==Conclusioni==




Lo strumento è veramente potente, anche se non esente da bug...
Lo strumento è veramente potente, anche se non esente da bug.
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...
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, potrà restare fedele e usufruire della potenza di apt!
Ora, anche chi vuole un sistema compilato ad hoc per la propria macchina, potrà restare fedele e usufruire della potenza di apt!


Riga 157: Riga 156:
==Faq==
==Faq==


'''Q: Ho spostato la directory della cache di apt-build, ma ora apt mi dà degli errori...'''<br/>
'''Q: Ho spostato la directory della cache di apt-build, ma ora apt mi dà degli errori.'''<br/>
'''A:''' Beh...sarebbe stato utile, dopo lo spostamento, eseguire un
'''A:''' Beh...sarebbe stato utile, dopo lo spostamento, eseguire un
<pre>
<pre>
Riga 163: Riga 162:
</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 è sufficiente modificare il file '''/etc/apt/apt-build.conf''' e il sources.list, aggiornando i path relativi ad apt-build.
Se invece si vuole agire a mano è sufficiente modificare il file <code>/etc/apt/apt-build.conf</code> e il <code>sources.list</code>, aggiornando i path relativi ad apt-build.




Riga 171: Riga 170:


'''Q: Mi sono accorto di non aver configurato correttamente apt-build, come posso fare a modificare la configurazione??'''<br/>
'''Q: Mi sono accorto di non aver configurato correttamente apt-build, come posso fare a modificare la configurazione??'''<br/>
'''A:''' Certamente...con il comando
'''A:''' Certamente con il comando
<pre>
<pre>
# dpkg-reconfigure apt-build
# dpkg-reconfigure apt-build
Riga 184: Riga 183:
'''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.
'''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.


==Bookmark==
==Link==


http://debian-i586.sourceforge.net/
* [http://debian-i586.sourceforge.net/]: interessante progetto di ricompilazione di Debian. Ora sembrerebbe un po'...`smorto`...magari si potrebbe dargli una mano...
Interessante progetto di ricompilazione di Debian.
Ora sembrerebbe un po'...`smorto`...magari si potrebbe dargli una mano...




1 508

contributi