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