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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
(spostata sezione da guida "Applicare_una_patch_ad_un_pacchetto_Debian" relativa ad apt-build)
 
(16 versioni intermedie di 8 utenti non mostrate)
Riga 1: Riga 1:
Spesso abbiamo la necessit� di installare la nuova versione di un pacchetto di cui proprio non possiamo fare a meno, che per� non � disponibile per il rilascio di Debian che abbiamo installato.
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
==Introduzione==


Il caso pi� frequente � probabilmente quello di un' installazione di Testing (Etch) con la necessit� di installare anche pacchetti presenti solo in Unstable o in Experimental, oppure di voler usare un repository con pacchetti particolari, ma compilati per una release di Debian diversa dalla nostra.
Come tutti sanno, o avranno notato, Debian è compilata con opzioni di compilazione generiche, pensate per processori i386.
Questa scelta è stata fatta per questioni di stabilità, a quanto ho trovato sulla rete.


APT � nostro fido alleato anche in questi frangenti, permettendoci di utilizzare fonti per pacchetti di releases diverse (e soddisfarne le dipendenze) senza costringerci ad un upgrade dell' intera distribuzione e senza dover impazzire per risolvere conflitti e inconsistenze.
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.


In questo how-to mostrer� come utilizzare pacchetti Debian provenienti da Testing, Unstable, Experimental, Marillat (multimedia/video) e Rarewares.org (multimedia/audio), ma le istruzioni sono facilmente riportabili anche ad altre situazioni (unstable + experimental, stable + testing, stable + unstable, stable + testing + unstable, ecc...).
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.


Assicuriamoci di essere l' utente root e procediamo.
==Installazione e Configurazione==


Per prima cosa editiamo il file '''/etc/apt/sources.list''' ed inseriamo gli archivi dei pacchetti Debian che utilizzeremo:
Ovviamente, trattandosi di Debian, è sufficiente dare un semplice:
<pre>
<pre>
### Debian Ufficiale -- Testing
# apt-get install apt-build
deb http://ftp.it.debian.org/debian/ testing main non-free contrib
</pre>
 
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.
 
 
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. 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 '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)
 


### Debian Ufficiale -- Testing Sicurezza
'''Which options would you like to add to gcc?'''
deb http://security.debian.org/ testing/updates main contrib non-free


### Debian Ufficiale -- Sid
Qui possiamo passare delle opzioni aggiuntive a gcc.Eccone alcune:
deb http://ftp.it.debian.org/debian/ unstable main non-free contrib
;<code>-jX</code>: X indica il numero di compilazioni parallele consentite
;<code>-pipe</code>: Riduce l'accesso al disco (velocizzando l'operazione) utilizzando il pipe (|) invece dei file temporanei


###  Debian Ufficiale -- Experimental
deb http://ftp.debian.org/debian/ ../project/experimental main


### Multimedia -- Audio -- Rarewares
'''What is your architecture?'''
deb http://www.rarewares.org/debian/packages/unstable ./


### Multimedia -- Video -- Marillat
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: [https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#x86-Options lista] (nel mio caso, su un Compaq Presario 2100, athlon-xp).
deb ftp://ftp.nerim.net/debian-marillat/ etch main
 
deb ftp://ftp.nerim.net/debian-marillat/ sid main
 
</pre>
 
Siamo giunti al termine della configurazione!
Ancora un passaggio e saremo pronti a conoscere apt-build!


A questo punto dobbiamo preparare due files normalmente non presenti sulla nostra debianbox: si tratta dei file '''preferences''' e '''apt.conf'''.
Questi due file istruiranno APT su come gestire le dipendenze dei pacchetti, informandolo su come comportarsi in caso di conflitti e altri problemi.


Creiamo il file preferences:
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'.
Ad esempio, se il nostro <code>sources.list</code> contiene la riga:
<pre>
<pre>
# touch /etc/apt/preferences
deb http://ftp.it.debian.org/debian/ sid main
</pre>
</pre>
editiamolo col nostro editor di fiducia e inseriamo queste direttive:
diventerà:
<pre>
<pre>
Package: *
deb http://ftp.it.debian.org/debian/ sid main
Pin: release o=Unofficial Multimedia Packages
deb-src http://ftp.it.debian.org/debian/ sid main
Pin-Priority: 950
</pre>


Package: *
'''NB:''' le due righe possono coesistere tranquillamente.
Pin: release o=xmixahlx
Ora siamo pronti ad iniziare!
Pin-Priority: 900


Package: *
==Opzioni==
Pin: release a=testing
Pin-Priority: 850


Package: *
Analizziamo un po' di opzioni, molto utili, che renderanno più comprensibili i comandi utilizzati in seguito.
Pin: release a=unstable
La sintassi di apt-build è vicinissima a quella di apt-get, infatti troviamo, come comandi, i seguenti:
Pin-Priority: 800


Package: *
; <code>update</code>: aggiorna la lista dei pacchetti (come <code>apt-get update</code>);
Pin: release a=experimental
; <code>upgrade</code>: esegue un aggiornamento del sistema, scaricando i pacchetti e compilandoli;
Pin-Priority: 750
; <code>install</code>: scarica e compila il pacchetto indicato;
</pre>
; <code>source</code>: scarica e decomprime il pacchetto nella directory di compilazione (di solito <code>/var/cache/apt-build/build</code>);
; <code>remove</code>: come <code>apt-get remove</code>;
; <code>clean-sources</code>: esegue un debian/rules clean, che rimuove solamente i prodotti della compilazione;
; <code>clean-build</code>: rimuove il contenuto della directory <code>/var/cache/apt-build/build/</code> che contiene i sorgenti dei pacchetti ricompilati;
; <code>clean-repository</code>: rimuove il contenuto della directory <code>/var/cache/apt-build/repository/</code> che contiene i pacchetti ricompilati tramite apt-build;
; <code>world</code>: ricompila tutti i pacchetti correntemente installati;
; <code>info</code>: visualizza le informazioni relative al pacchetto compilato.


Il pinning pu essere orientato ad un archivio, un'origine, la versione di un pacchetto, un componente, ecc...


Con '''"o="''' si specifica l' origine (la distribuzione) del pacchetto, con '''"a="''' l'archivio (sarge,sid, stable, ecc...).
Le opzioni, invece, sono le seguenti:
; <code>--reinstall</code>: ricompila e reinstalla il pacchetto già installato, ci tornerà comodo;
; <code>--rebuild</code>: ricompila il pacchetto indicato;
; <code>--remove-builddep</code>: rimuove le dipendenze di compilazione (librerie -dev) installate da apt-build per la compilazione;
; <code>--nowrapper</code>: non usa il wrapper: compilazione senza le opzioni di ottimizzazione;
; <code>--purge </code>: durante la rimozione, verranno cancellati anche i file di configurazione presenti in <code>/etc</code>;
; <code>--noupdate</code>: non esegue <code>apt-get update</code> prima dell'installazione dei pacchetti;
; <code>--build-command cmd </code>: usa cmd per compilare il pacchetto;
; <code>--patch file </code>: applica la patch prima di compilare il pacchetto;
; <code>--patch-strip n</code>: indica lo striplevel per il file di patch (equivale al parametro <code>-pX</code> del comando patch);
; <code>--yes -y </code>: risponde 'Yes' a tutte le domande poste da apt (usare con prudenza);
; <code>--version -v </code>: mostra la versione di apt-build;
; <code>--source </code>: non scarica i sorgenti (indica che i sorgenti sono già stati scaricati);
; <code>--build-only</code> : non installa le dipendenze del pacchetto (usare con attenzione);
; <code>--build-dir dir </code>: specifica la directory in cui eseguire la compilazione;
; <code>--repository-dir dir</code> : specifica la directory dove mettere i file compilati;
; <code>--target-release </code>: indica da quale release (Stable, Testing, Unstable, Experimental) scaricare i sorgenti;
; <code>--sources-list </code>: specifica un <code>sources.list</code> alternativo.


Questo dato reperibile in modo inequivocabile attraverso APT, andando a sbirciare all'interno del file "Release" che contenuto in tutti i  repository ufficiali. Per archivi personali e/o non ufficiali, invece, non sempre e necessariamente presente (purtroppo).


Vediamo alcuni esempi:
Le opzioni che useremo spesso saranno <code>'''--reinstall --noupdate'''</code>.


==Utilizzo==
Ora guardiamo come utilizzare apt-build per ricompilare pacchetti già presenti nel sistema.
<pre>
<pre>
# cd /var/lib/apt/lists
# apt-build --reinstall install kdebase
# cat www.rarewares.org_debian_packages_unstable_._Release
</pre>
Archive: unstable
Origin: xmixahlx                    
Label: xmixahlx_rarewares-unstable
Architecture: i386


# cat ftp.nerim.net_debian-marillat_dists_testing_main_binary-i386_Release
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.
Archive: testing
Component: main
Origin: Unofficial Multimedia Packages
Label: Unofficial Multimedia Packages
Architecture: i386
</pre>


Dove:
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.
* '''Archive''' = � l' archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc...);
* '''Component''' = indica il tipo di componente (ad es.: main, contrib, non-free);
* '''Origin''' = specifica il proprietario del repository;
* '''Label''' = identifica il repository: potete inserire descrizioni, ecc...;
* '''Architecture''' = l'architettura dei pacchetti contenuti nel repository (ad es.: i386, sparc, source, ecc...).  


Possiamo vedere che nel file Release � contenuto proprio il dato che stavamo cercando: Origin.
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. =)


Ora creiamo il file apt-conf
Se invece il pacchetto non è stato precedentemente installato, è possibile installarlo omettendo l'opzione <code>--reinstall</code>:
<pre>
# apt-build install nomepacchetto
</pre>


Comando 'strano', che non ho ancora avuto modo di sperimentare è:
<pre>
<pre>
# touch /etc/apt/apt.conf
# apt-build world
</pre>
</pre>


editiamolo inserendo quanto segue:
che permette la ricompilazione di tutti i pacchetti correntemente installati sul computer!


Allo stesso modo è possibile aggiornare il sistema direttamente, tramite un semplice:
<pre>
<pre>
APT::Default-Release "testing";
# apt-build upgrade
APT::Cache-Limit 15000000;
Apt::Get::Purge;
APT::Clean-Installed;
APT::Get::Fix-Broken;
APT::Get::Fix-Missing;
APT::Get::Show-Upgraded "true";
</pre>
</pre>


Facciamo l' update del database dei pacchetti:


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.
=== Applicare una patch ===
Come abbiamo già visto '''apt-build''' ci mette a disposizione una opzione, <code>--patch</code>, che consente di applicare delle patch al pacchetto da installare.<br/>
Vediamo, ora, come fare.
Scarichiamo la patch:
<pre>
$ wget http://indirizzo/per/la/patch.patch
</pre>
e diamo il semplice comando:
<pre>
<pre>
# apt-get update
# apt-build -p 0 --patch patch.patch install 'pacchetto'
</pre>
</pre>
ora mettiamoci comodi, armati di tazzona di caffè (rigorosamente marchiata con un bel Tux) e controlliamo a video mentre:
* vengono scaricate i pacchetti *-dev per la compilazione;
* viene aggiornato l'elenco dei pacchetti dei vari [[repository]] (usare l'opzione <code>--noupdate</code> per evitarlo);
* 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 con la patch desiderata!
==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!


D'ora in avanti avremo due possibilit� per installare un nuovo pacchetto: il metodo che usiamo di solito e cio�:
==Faq==


'''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:
<pre>
<pre>
# apt-get install nome_pacchetto
# 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 <code>/etc/apt/apt-build.conf</code> e il <code>sources.list</code>, aggiornando i path relativi ad apt-build.


che utilizzer� pacchetti proveniente dalla versione impostata come '''Default-Release''' in '''apt.conf''', oppure il comando
'''Q: Come mai non vengono elencati tutte le famiglie di processori durante la configurazione?'''<br/>
'''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??'''<br/>
'''A:''' Certamente con il comando:
<pre>
<pre>
# apt-get install -t versione_di_debian nome_pacchetto
# dpkg-reconfigure apt-build
</pre>
</pre>


che provveder a installare il pacchetto da noi richiesto per la versione specificata (versione_debian), risolvendo automaticamente le dipendenze.


Happy debian!
'''Q: Ho notato che apt-build sostituisce gcc e g++ con uno script, cosa vuol dire?'''<br/>
'''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?'''<br/>
'''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.
 
==Link==


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


Autore: [[User:Keltik|Keltik]]<br>
{{Autori
Revisione: [[User:Nest|Nest]] <br>
|Autore=[[User:MaXeR|MaXeR]]
Verificato: [[Utente:TheNoise|~ The Noise]]
}}


[[Categoria:Apt]]
[[Categoria:Apt]]
[[Categoria:Creare e modificare pacchetti]]

Versione attuale delle 07:57, 7 set 2019

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"

Introduzione

Come tutti sanno, o avranno notato, Debian è compilata con opzioni di compilazione generiche, pensate per processori i386. Questa scelta è stata fatta per questioni di stabilità, a quanto ho trovato sulla rete.

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.

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 e Configurazione

Ovviamente, trattandosi di Debian, è sufficiente dare un semplice:

# apt-get install apt-build

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.


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


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 prendendo spunto da questa lista: lista (nel mio caso, su un Compaq Presario 2100, athlon-xp).


Siamo giunti al termine della configurazione! Ancora un passaggio e saremo pronti a conoscere apt-build!


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:

deb http://ftp.it.debian.org/debian/ sid main

diventerà:

deb http://ftp.it.debian.org/debian/ sid main
deb-src http://ftp.it.debian.org/debian/ sid main

NB: le due righe possono coesistere tranquillamente. 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 è vicinissima a quella di 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-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-repository
rimuove il contenuto della directory /var/cache/apt-build/repository/ che contiene i pacchetti ricompilati tramite apt-build;
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 pacchetto 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 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);
--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 installa 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.

Utilizzo

Ora guardiamo come utilizzare apt-build per ricompilare pacchetti già presenti nel sistema.

# apt-build --reinstall install kdebase

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:

# apt-build install nomepacchetto

Comando 'strano', che non ho ancora avuto modo di sperimentare è:

# apt-build world

che permette la ricompilazione di tutti i pacchetti correntemente installati sul computer!

Allo stesso modo è possibile aggiornare il sistema direttamente, tramite un semplice:

# apt-build upgrade


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.

Applicare una patch

Come abbiamo già visto apt-build ci mette a disposizione una opzione, --patch, che consente di applicare delle patch al pacchetto da installare.
Vediamo, ora, come fare.

Scarichiamo la patch:

$ wget http://indirizzo/per/la/patch.patch

e diamo il semplice comando:

# apt-build -p 0 --patch patch.patch install 'pacchetto'

ora mettiamoci comodi, armati di tazzona di caffè (rigorosamente marchiata con un bel Tux) e controlliamo a video mentre:

  • vengono scaricate i pacchetti *-dev per la compilazione;
  • viene aggiornato l'elenco dei pacchetti dei vari repository (usare l'opzione --noupdate per evitarlo);
  • 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 con la patch desiderata!

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 dà degli errori.
A: Beh...sarebbe stato utile, dopo lo spostamento, eseguire un:

# dpkg-reconfigure apt-build

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.


Q: Come mai non vengono elencati tutte le famiglie di processori durante la configurazione?
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??
A: Certamente con il comando:

# dpkg-reconfigure apt-build


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.

Link

  • [1]: interessante progetto di ricompilazione di Debian. Ora sembrerebbe un po'...`smorto`...magari si potrebbe dargli una mano...




Guida scritta da: MaXeR Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized