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

Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
mNessun oggetto della modifica
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.
==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, penste 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.
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...


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


Assicuriamoci di essere l' utente root e procediamo.


Per prima cosa editiamo il file '''/etc/apt/sources.list''' ed inseriamo gli archivi dei pacchetti Debian che utilizzeremo:
==Installazione==
 
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>


### Debian Ufficiale -- Testing Sicurezza
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...
deb http://security.debian.org/ testing/updates main contrib non-free
L'indirizzo � http://www.debtoo.org/ .


### Debian Ufficiale -- Sid
Analizziamo le domande del processo di configurazione che viene lanciato durante l'installazione:
deb http://ftp.it.debian.org/debian/ unstable main non-free contrib


###  Debian Ufficiale -- Experimental
'''Where should apt-build download and build packages?'''
deb http://ftp.debian.org/debian/ ../project/experimental main


### Multimedia -- Audio -- Rarewares
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.
deb http://www.rarewares.org/debian/packages/unstable ./


### Multimedia -- Video -- Marillat
deb ftp://ftp.nerim.net/debian-marillat/ etch main
deb ftp://ftp.nerim.net/debian-marillat/ sid main
</pre>


A questo punto dobbiamo preparare due files normalmente non presenti sulla nostra debianbox: si tratta dei file '''preferences''' e '''apt.conf'''.
'''Where must apt-build store built packages?'''
Questi due file istruiranno APT su come gestire le dipendenze dei pacchetti, informandolo su come comportarsi in caso di conflitti e altri problemi.
 
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)
 
 
 
Siamo giunti al termine della configurazione!
Ancora un passaggio e saremo pronti a conoscere apt-build!
 


Creiamo il file preferences:
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>
# 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>
 
'''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 � 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


Package: *
Pin: release o=xmixahlx
Pin-Priority: 900


Package: *
Le opzioni, invece, sono le seguenti:
Pin: release a=testing
Pin-Priority: 850


Package: *
'''--reinstall''' Ricompila e reinstalla il paccheto gi� installato...ci torner� comodo...
Pin: release a=unstable
Pin-Priority: 800


Package: *
'''--rebuild''' Ricompila il pacchetto indicato
Pin: release a=experimental
 
Pin-Priority: 750
'''--remove-builddep''' Rimuove le dipendenze di compilazione (librerie -dev) installate da apt-build per la compilazione
</pre>
 
'''--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


Il pinning pu� essere orientato ad un archivio, un'origine, la versione di un pacchetto, un componente, ecc...
'''--sources-list''' Specifica un sources.list alternativo


Con '''"o="''' si specifica l' origine (la distribuzione) del pacchetto, con '''"a="''' l'archivio (sarge,sid, stable, ecc...).


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).
Le opzioni che useremo spesso saranno '''--reinstall --noupdate'''.


Vediamo alcuni esempi:


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


Dove:
ad esempio...
* '''Archive''' = � l' archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc...);
l'opzione '''--reinstall''' ci permetter� di installare il pacchetto anche se nel sistema � gi� presente un pacchetto con la medesima versione.
* '''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.
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.


Ora creiamo il file apt-conf
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>
# touch /etc/apt/apt.conf
# apt-build install nomepacchetto
</pre>
</pre>


editiamolo inserendo quanto segue:
Comando 'strano', che non ho ancora avuto modo di sperimentare �:
 
<pre>
<pre>
APT::Default-Release "testing";
# apt-build world
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:
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-get update
# apt-build upgrade
</pre>
</pre>


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


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


che utilizzer pacchetti proveniente dalla versione impostata come '''Default-Release''' in '''apt.conf''', oppure il comando


'''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>
# 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?'''
'''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.
 
 
 
==Bookmark==


----
http://www.debtoo.org/
Debian, con in pi� la possibilit� di eseguire compilazioni in stile gentoo!
Da tenere d'occhio! Qui � presente un po' di documentazione su apt-build.


Autore: [[User:Keltik|Keltik]]<br>
http://www.debianplanet.org/node.php?id=210
Revisione: [[User:Nest|Nest]] <br>
Why isn't Debian 'ported' to the higher x86 machines?
Verificato: [[Utente:TheNoise|~ The Noise]]
Interessante discussione sul perch� non si � deciso di compilare debian ottimizzandola un po' di pi�...


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