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

Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
Riga 1: Riga 1:
==Introduzione==
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.


Come tutti sanno, o avranno notato, Debian compilata con opzioni di compilazione generiche, penste per processori i386.
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.
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...
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...


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.


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


Ovviamente, trattandosi di Debian, � sufficiente dare un semplice:
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:
<pre>
<pre>
# apt-get install apt-build
### Debian Ufficiale -- Testing
</pre>
deb http://ftp.it.debian.org/debian/ testing main non-free contrib


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


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


'''Where should apt-build download and build packages?'''
###  Debian Ufficiale -- Experimental
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://ftp.debian.org/debian/ ../project/experimental main


'''Where must apt-build store built packages?'''
### Multimedia -- Audio -- Rarewares
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...
deb http://www.rarewares.org/debian/packages/unstable ./


'''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?'''
### Multimedia -- Video -- Marillat
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.
deb ftp://ftp.nerim.net/debian-marillat/ etch main
deb ftp://ftp.nerim.net/debian-marillat/ sid main
</pre>


'''Add apt-build repository to sources.list?'''
A questo punto dobbiamo preparare due files normalmente non presenti sulla nostra debianbox: si tratta dei file '''preferences''' e '''apt.conf'''.
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)
Questi due file istruiranno APT su come gestire le dipendenze dei pacchetti, informandolo su come comportarsi in caso di conflitti e altri problemi.


'''Which options would you like to add to gcc?'''
Creiamo il file preferences:
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!
 
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>
deb http://ftp.it.debian.org/debian/ sid main
# touch /etc/apt/preferences
</pre>
</pre>
diventer�
editiamolo col nostro editor di fiducia e inseriamo queste direttive:
<pre>
<pre>
deb http://ftp.it.debian.org/debian/ sid main
Package: *
deb-src http://ftp.it.debian.org/debian/ sid main
Pin: release o=Unofficial Multimedia Packages
</pre>
Pin-Priority: 950
 
Package: *
Pin: release o=xmixahlx
Pin-Priority: 900
 
Package: *
Pin: release a=testing
Pin-Priority: 850


'''NB:''' le due righe possono coesistere tranquillamente.
Package: *
Ora siamo pronti ad iniziare!
Pin: release a=unstable
Pin-Priority: 800


Package: *
Pin: release a=experimental
Pin-Priority: 750
</pre>


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


Analizziamo un po' di opzioni, molto utili, che renderanno pi� comprensibili i comandi utilizzati in seguito.
Con '''"o="''' si specifica l' origine (la distribuzione) del pacchetto, con '''"a="''' l'archivio (sarge,sid, stable, ecc...).
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:
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).
'''--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'''.
Vediamo alcuni esempi:


Ora guardiamo come utilizzare apt-build per ricompilare pacchetti gi presenti nel sistema...
<pre>
<pre>
# apt-build --reinstall install kdebase
# cd /var/lib/apt/lists
# 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>


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


Se invece il pacchetto non stato precedentemente installato, possibile installarlo omettendo l'opzione --reinstall:
<pre>
<pre>
# apt-build install nomepacchetto
# touch /etc/apt/apt.conf
</pre>
</pre>


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


che permette la ricompilazione di tutti i pacchetti correntemente installati sul computer!
Facciamo l' update del database dei pacchetti:


Allo stesso modo possibile aggiornare il sistema direttamente, tramite un semplice
<pre>
<pre>
# apt-build upgrade
# apt-get update
</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>
# dpkg-reconfigure apt-build
# apt-get install nome_pacchetto
</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?'''
che utilizzer� pacchetti proveniente dalla versione impostata come '''Default-Release''' in '''apt.conf''', oppure il comando
'''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
<pre>
<pre>
# dpkg-reconfigure apt-build
# apt-get install -t versione_di_debian nome_pacchetto
</pre>
</pre>


'''Q: Ho notato che apt-build sostituisce gcc e g++ con uno script, cosa vuol dire?'''
che provveder� a installare il pacchetto da noi richiesto per la versione specificata (versione_debian), risolvendo automaticamente le dipendenze.
'''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==
Happy debian!


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.


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


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