apt-build: ottimizzazione dei pacchetti Debian

Lun, 01/11/2004 - 15:46

apt-build: ottimizzazione dei pacchetti Debian

Inviato da Anonimo 8 commenti

apt-build: Debian in stile gentoo

INTRODUZIONE

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

INSTALLAZIONE

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

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 DI UTILIZZO

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 Usa per compilarei il pacchetto
--patch Applica la prima di compilare il pacchetto
--patch-strip 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 Specifica la directory in cui eseguire la compilazione
--repository-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 guardiamo come utilizzare apt-build per ricompilare pacchetti già presenti nel sistema...

# apt-get --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...

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

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

WEB LINKS

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
Why isn't Debian 'ported' to the higher x86 machines?
Interessante discussione sul perchè non si è deciso di compilare debian ottimizzandola un po' di più...

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

---
MaXeR
maxer@knio.it
http://www.knio.it
---


In:



Commenti

Ritratto di Antonio
#1

Inviato da Antonio il Lun, 01/11/2004 - 22:54.

Re: apt-build

Bella guida!

Segnalo un banale errore tipografico, il secondo comando è

# apt-get --reinstall install kdebase
invece di

# apt-build --reinstall install kdebase



Ritratto di jordan83
#2

Inviato da jordan83 il Mar, 02/11/2004 - 10:48.

Re: apt-build

Ottimo articolo!

Questo tool è molto interessante, la guida aiuterà di certo molti (tra cui me ^_^) a scoprirlo.

"Se avessimo tutti le stesse opinioni non ci sarebbero le corse dei cavalli." G.B.Shaw



Ritratto di cmaffio
#3

Inviato da cmaffio il Gio, 17/03/2005 - 11:00.

Ottimo

Veramente un bell'articolo, sono gia' all'opera Laughing



Ritratto di cheis
#4

Inviato da cheis il Gio, 17/03/2005 - 11:39.

Re: Ottimo

Interessante e benfatto.. complimenti Big Grin

[=x-small]Knowledge is power: SHARE IT BABY!!![/]
_____________________________________________



Ritratto di gad79
#5

Inviato da gad79 il Gio, 31/03/2005 - 15:41.

apt-build world

Inanzitutto complimenti x la guida! poi visto che hai "tralasciato" la spiegazione di apt-build world , permettimi di aggiungere due parole in croce su questo commando che mi sembra un vera e propia chicca. Big Grin
Come detto questo commando compila il "world" cioè tutti i pacchetti sulla propia macchina installati attraverso apt-get, ma prima di usare questo commando bisogna generare un file apt-build.list. In questo file c'è la lista di tutti i package installati. Si puo generare questo file con questo semplice commando:

dpkg --getselections |awk '{if ($2=="install") print $1}' > /etc/apt/apt-build.list

Una volta generato lo si può anche modificare a piacimento.

Ciao



Ritratto di eraclito
#6

Inviato da eraclito il Ven, 02/09/2005 - 10:47.

Re: apt-build

ciao a tutti,

ho provato apt-build su ubuntu 5.10

l'installazione non ha dato problemi, con apt update scarica correttamente i source.list, ma mi da sempre (su qualisasi cosa) errori di compilazione o errore di certificati.

sapete se c'è qualche pacchetto che devo istallare? (ho visto che make, gcc li ha installati da solo...)

ps se ho un centrino 1.5 devo inserire pIV come mio processore?

eraclito