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

Vai alla navigazione Vai alla ricerca
m
nessun oggetto della modifica
(Correzioni minori)
mNessun oggetto della modifica
Riga 1: Riga 1:
==Introduzione==
==Introduzione==


In questo howto vedremo come sia possibile applicare una patch ad un pacchetto
Come tutti sanno, o avranno notato, Debian compilata con opzioni di compilazione generiche, penste per processori i386.
ufficiale Debian.
Questa scelta � stata fatta per questioni di stabilit�, a quanto ho trovato sulla rete.
Prima di proseguire, per�, vedremo quando non � possibile farlo:
* il pacchetto non stato distribuito anche in forma di sorgenti (capita per
qualche repository non ufficiale e per alcuni pecchetti uff. (una volta mi era
successo...).


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


==Preparazione del sistema==
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...


Per prima cosa bisogna assicurarsi di avere, in '''/etc/apt/sources.list''',
le sorgenti per scaricare i pacchetti di tipo deb-src:
<pre>
#--CUT HERE--#
#per stable
deb-src http://ftp2.it.debian.org/debian/ stable main non-free contrib
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib
non-free


#per testing
==Installazione==
deb-src http://ftp2.it.debian.org/debian/ testing main non-free contrib
deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib
non-free


#per unstable
Ovviamente, trattandosi di Debian, � sufficiente dare un semplice:
deb-src http://ftp2.it.debian.org/debian/ sid main non-free contrib
deb-src http://non-us.debian.org/debian-non-US sid/non-US main contrib non-free
#--CUT HERE--#
</pre>
ora aggiorniamo il contenuto del database dei pacchetti:
<pre>
<pre>
# apt-get update
# apt-get install apt-build
</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...
L'indirizzo http://www.debtoo.org/ .
Analizziamo le domande del processo di configurazione che viene lanciato durante l'installazione:
'''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.
'''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...
'''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.
'''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 stata posta durante il processo di configurazione)
'''Which options would you like to add to gcc?'''
Qui possiamo passare delle opzioni aggiuntive a gcc... Eccone alcune:
-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
'''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 (nel mio caso, su un Compaq Presario 2100, athlon-xp)




==Procediamo==


===Metodo 1: `apt-get source && dpkg-buildpackage`===
Siamo giunti al termine della configurazione!
Ancora un passaggio e saremo pronti a conoscere apt-build!


Per scaricare i sorgenti, seguiamo questa procedura:
 
Per avere tutto in ordine, creiamo una cartella di lavoro
Bisogna modificare il file '''/etc/apt/sources.list''' 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'.
Ad esempio, se il nostro sources list contiene la riga:
<pre>
<pre>
$ mkdir nomepacchetto && cd nomepacchetto
deb http://ftp.it.debian.org/debian/ sid main
</pre>
</pre>
 
diventer�
Ora possiamo scaricare i sorgenti:
<pre>
<pre>
$ apt-get source nomepacchetto
deb http://ftp.it.debian.org/debian/ sid main
deb-src http://ftp.it.debian.org/debian/ sid main
</pre>
</pre>


cos� facendo, scaricheremo 3 file, che verranno decompressi in una cartella
'''NB:''' le due righe possono coesistere tranquillamente.
(nomepacchetto-ver.sio.ne)
Ora siamo pronti ad iniziare!
 
 
==Opzioni==
 
Analizziamo un po' di opzioni, molto utili, che renderanno pi� comprensibili i comandi utilizzati in seguito.
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)
 
'''upgrade''' Esegue un aggiornamento del sistema, scaricando i pacchetti e compilandoli
 
'''install''' Scarica e compila il pacchetto indicato
 
'''source''' Scarica e decomprime il pacchetto nella directory di compilazione (di solito /var/cache/apt-build/build )
 
'''remove''' Come apt-get remove
 
'''clean-build''' Provvede a pulire la directory contentente i sorgenti scaricati
 
'''clean-repository''' Provvede a pulire la directory contentente i pacchetti compilati
 
'''world''' Ricompila tutti i pacchetti correntemente installati
 
'''info''' Visualizza le informazioni relative al pacchetto compilato
 
 
Le opzioni, invece, sono le seguenti:
 
'''--reinstall''' Ricompila e reinstalla il paccheto gi� installato...ci torner� comodo...
 
'''--rebuild''' Ricompila il pacchetto indicato
 
'''--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
 
'''--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
 
'''--build-command cmd''' Usa cmd per compilarei 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
 
'''--yes -y''' Risponde 'Yes' a tutte le domande poste da apt (usare con prudenza)
 
'''--version -v''' Mostra la versione di apt-build
 
'''--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-dir dir''' Specifica la directory in cui eseguire la compilazione
 
'''--repository-dir dir''' Specifica la directory dove mettere i file compilati
 
'''--target-release''' Indica da quale release (Stable, Testing, Unstable, Experimental) scaricare i sorgenti
 
'''--sources-list''' Specifica un sources.list alternativo
 
 
Le opzioni che useremo spesso saranno '''--reinstall --noupdate'''.


Ora possiamo entrare in questa cartella, scaricare la patch e applicarla:
 
Ora guardiamo come utilizzare apt-build per ricompilare pacchetti gi� presenti nel sistema...
<pre>
<pre>
$ cd nomepacchetto-ver.sio.ne
# apt-build --reinstall install kdebase
$ wget http://indirizzo/per/la/patch.patch
</pre>
</pre>


supponendo che la patch non sia compressa...
ad esempio...
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.
 
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>
$ patch -p1 < patch.patch
# apt-build install nomepacchetto
</pre>
</pre>


se compressa:
Comando 'strano', che non ho ancora avuto modo di sperimentare �:
<pre>
<pre>
$ zcat patch.patch | patch -p1
# apt-build world
</pre>
</pre>


Una volta applicata la patch, se non riceviamo errori, siamo pronti a
che permette la ricompilazione di tutti i pacchetti correntemente installati sul computer!
compilare il pacchetto.
 
Per fare questo utilizzeremo un altro tool Debian: dpkg-buildpackage
Allo stesso modo � possibile aggiornare il sistema direttamente, tramite un semplice
<pre>
<pre>
# dpkg-buildpackage
# apt-build upgrade
</pre>
</pre>


Il comando prover� a compilare il pacchetto, ed in caso di errori ci chieder�
 
di sistemare le dipendenze (se l'errore � dovuto alla mancanza di alcune
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...
librerie) elencando tutti i pacchetti necessari, installabili con un normale
Qui sta a voi risolverli, o installando il pacchetto binario o cercando un altro mirror...
 
 
==Conclusioni==
 
 
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...
Ora, anche chi vuole un sistema compilato ad hoc per la propria macchina, potr� restare fedele e usufruire della potenza di apt!
 
 
 
==Faq==
 
'''Q: Ho spostato la directory della cache di apt-build, ma ora apt mi da degli errori...'''
'''A:''' Beh...sarebbe stato utile, dopo lo spostamento, eseguire un
<pre>
<pre>
# apt-get buid-dep 'nomepacchetto_da_installare'
# dpkg-reconfigure apt-build
</pre>
</pre>
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.


una volta giunta a termine la compilazione, troveremo (nella cartella
'''Q: Come mai non vengono elencati tutte le famiglie di processori durante la configurazione?'''
nomepacchetto da noi creata) una serie di file .deb!
'''A:''' Semplicemente perch� lo script di configurazione di apt-build esegue un check preliminare in modo da determinare la marca del processore.
ora possiamo installarli:
 
 
'''Q: Mi sono accorto di non aver configurato correttamente apt-build, come posso fare a modificare la configurazione??'''
'''A:''' Certamente...con il comando
<pre>
<pre>
# dpkg -i nomepacchetto_ver.sio.ne.deb
# dpkg-reconfigure apt-build
</pre>
</pre>


Bene, se non riceviamo errori...il pacchetto installato.


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


===Metodo 2: `apt-build`===


Prima di iniziare, d'obbligo una introduzione su apt-build.
Questo tool abbastanza giovane, e consente di compilare i pacchetti Debian
ottimizzandoli per la propria macchina. Durante l'installazione vengono poste
delle domande (tipo di processore, livello di ottimizzazione), e rispondendo
nel modo opportuno, sar possibile compilare i pacchetti ottimizzandoli per la
propria macchina, cosa che, nel METODO 1 non avviene.


Apt-build ci mette a disposizione una opzione, '''--patch''', che consente di applicare delle patch al pacchetto da installare.
==Bookmark==
Vediamo, ora, come fare.
Scarichiamo la patch:
<pre>
$ wget http://indirizzo/per/la/patch.patch
</pre>


ora diamo il semplice comando:
http://www.debtoo.org/
<pre>
Debian, con in pi� la possibilit� di eseguire compilazioni in stile gentoo!
# apt-build -p 0 --patch patch.patch install 'pacchetto'
Da tenere d'occhio! Qui � presente un po' di documentazione su apt-build.
</pre>


ora mettiamoci comodi, armati di tazzona di caff� (rigorosamente marchiata con un bel Tux) e controlliamo a video mentre:
http://www.debianplanet.org/node.php?id=210
* vengono scaricate i pacchetti *-dev per la compilazione;
Why isn't Debian 'ported' to the higher x86 machines?
* viene aggiornato l'elenco dei pacchetti dei vari repository (usare l'opzione '''--noupdate''' per evitarlo);
Interessante discussione sul perch� non si � deciso di compilare debian ottimizzandola un po' di pi�...
* vengono scaricati i sorgenti del pacchetto;
* viene applicata la patch;
* inizia la compilazione del pacchetto:
* viene/vengono installato/i il/i pacchetto/i generato/i.


Bene, ora il pacchetto � installato nel vostro sistema!
http://debian-i586.sourceforge.net/
Interessante progetto di ricompilazione di Debian.
Ora sembrerebbe un po'...`smorto`...magari si potrebbe dargli una mano...




---- [[User:MaXeR|MaXeR]]
---- [[User:MaXeR|MaXeR]]
[[Categoria:Apt-Dev]]
1 487

contributi

Menu di navigazione