[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ successivo ]
È cosa comune nel mondo del software libero studiare il codice sorgente e fare correzioni al codice che contiene dei bug. Compilare i sorgenti può essere utile anche per attivare delle funzionalità che sono disattivate nel pacchetto ufficiale o per disattivare qualcosa che è stata attivata. APT fornisce un modo semplice per scaricare i sorgenti dei programmi che fanno parte della distribuzione, compresi i file necessari per creare il pacchetto .deb.
Un altro uso comune dei sorgenti è compilare su una distribuzione stable i pacchetti di testing o di unstable dato che quelli presenti in quest'ultime sono più recenti. Infatti, compilando un pacchetto su stable, sarà creato un .deb le cui dipendenze sono automaticamente aggiustate per operare in questa distribuzione.
Per poter fare questo dev'essere specificata almeno una riga deb-src in /etc/apt/sources.list che punti ai pacchetti di testing o di unstable. Vedere Il file /etc/apt/sources.list, Sezione 2.1.
Aptitude, il gestore di pacchetti Debian, è ottimizzato per i pacchetti binari.
Per maneggiare i pacchetti sorgente si deve usare apt-get
al suo
posto. Per scaricare un pacchetto sorgente si può usare il seguente comando:
$ apt-get source nomepacchetto
Questo scaricherà tre file: un .orig.tar.gz, un .dsc e un .diff.gz. Nel caso di un pacchetto nativo per Debian, l'ultimo fra quelli elencati non è scaricato e al primo della lista mancherà ".orig" nel nome.
Il file .dsc è usato da dpkg-source per decomprimere il pacchetto sorgente nella directory nomepacchetto-versione. Dentro tutti i pacchetti sorgente, una volta scompattati, c'è dentro una directory debian/ che contiene i file necessari per la costruzione del pacchetto .deb.
Per automatizzare la costruzione del pacchetto, dopo aver scaricato i sorgenti, è sufficiente aggiungere l'opzione -b nella riga di comando:
$ apt-get -b source nomepacchetto
Se dopo aver scaricato il pacchetto non si vuole creare il .deb ma lo si può fare successivamente con il seguente comando eseguito all'interno della directory che è stata creata per il pacchetto dopo averlo scaricato:
$ dpkg-buildpackage -rfakeroot -uc -b
Notare che per creare dei pacchetti sono necessari almeno i seguenti pacchetti:
devscripts
, dpkg-dev
, debhelper
e
fakeroot
; controllare Installazione e reinstallazione dei
pacchetti, Sezione 3.4 e installarli prima di andare avanti. Molti
pacchetti dipendono anche dagli strumenti di compilazione, quindi può essere
utile installare anche il pacchetto build-essential
. Altri
pacchetti possono necessari, vedere Soddisfare le
dipendenze per compilare un pacchetto sorgente, Sezione 4.2 per maggiori
informazioni.
Per installare il pacchetto compilato con i comandi precedenti si può usare direttamente il gestore dei pacchetti. Vedere Installazione di pacchetti scaricati manualmente o creati in locale, Sezione 3.5.
C'è una differenza fra il metodo source e gli altri messi a
disposizione da apt-get
: tale metodo può essere usato da tutti gli
utenti senza che questi abbiano i privilegi di root. I file sono scaricati
nella directory dalla quale è stato lanciato il comando apt-get source
pacchetto.
Normalmente per compilare un pacchetto sorgente è necessario aver installato header e librerie appropriate. Tutti i pacchetti sorgente hanno nei loro file di controllo un campo chiamato "Build-Depends:" che indica quali pacchetti devono essere installati per poter costruire il pacchetto dai sorgenti. Inoltre sono necessari altri pacchetti di base, vedere Scaricare i pacchetti sorgente, Sezione 4.1 prima di continuare.
APT possiede un metodo veramente semplice per scaricare questi pacchetti. È sufficiente lanciare apt-get build-dep pacchetto, dove "pacchetto" è il nome del pacchetto che si vuole compilare. Per esempio:
# apt-get build-dep gmc Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev libgpmg1-dev 0 packages upgraded, 7 newly installed, 0 to remove and 1 not upgraded. Need to get 1069kB of archives. After unpacking 3514kB will be used. Do you want to continue? [Y/n]
Saranno installati i pacchetti necessari per la corretta compilazione del
pacchetto gmc
. È importante notare che questo comando non
recupera il pacchetto sorgente che si vuole compilare, per scaricarlo va
eseguito prima apt-get source.
Se invece si è interessati solo a controllare quali pacchetti sono necessari per compilare un certo pacchetto c'è una variante del comando apt-cache show (vedere Ottenere informazioni sui pacchetti, Capitolo 5), che mostra fra le varie informazioni la riga Build-Depends in cui sono elencati questi pacchetti.
# apt-cache showsrc pacchetto
Se si vuole creare un pacchetto con lo scopo di fare del debug, per esempio per segnalare un bug o per correggerne uno, si possono usare delle semplici variabili di ambiente supportate dalla maggioranza dei pacchetti Debian.
Per compilare un pacchetto che contiene dei binari completi[6] tutto ciò che si deve fare è usare il prefisso DEB_BUILD_OPTIONS=nostrip. Le ottimizzazioni possono anche complicare il debug, si possono disattivare aggiungendo la stringa noopt sempre alla variabile DEB_BUILD_OPTIONS. Per esempio:
$ DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -rfakeroot -uc -b
Se si vuole personalizzare il modo con cui viene compilato un pacchetto è
necessario modificare il file debian/rules
. Questo significa che
dentro la directory principale creata quando sono stati estratti i sorgenti del
pacchetto c'è una directory debian che contiene molti file, uno di
questi è speciale: il file rules
.
Questo file è solitamente un Makefile con target per configurare, compilare,
installare e creare il pacchetto. Per esempio, per avere luola
[7] compilato senza suono si può,
dopo aver scaricato e estratto i sorgenti, modificare il file
debian/rules
:
[...] configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. ./configure $(confflags) \ \t--prefix=/usr \ \t--mandir=share/man \ \t--infodir=share/info \ \t--datadir=share/games \ \t--bindir=games \ \t--enable-sound # \t --enable-sdl-gfx touch configure-stamp [...]
Notare l'opzione --enable-sound, se la si rimuove o la si sostituisce con --disable-sound e poi si ricompila il pacchetto con la tecnica descritta in Scaricare i pacchetti sorgente, Sezione 4.1 si ottiene il pacchetto luola senza suoni.
Se veramente si vuole maneggiare pacchetti sorgente quotidianamente si
suggerisce la lettura di Debian New Maintainers
Guide
e di Debian Policy
. Può
essere utile anche la documentazione disponibile dall'Angolo degli Sviluppatori
Debian
.
Qualche volta si vuole usare una specifica versione di un programma disponibile solo tramite i sorgenti, senza alcun pacchetto Debian. Ma per il sistema di gestione dei pacchetti questo può essere un problema. Supponiamo che si voglia compilare una nuova versione del server e-mail. Non ci sarebbero problemi, ma molti pacchetti di Debian dipendono da un MTA (Mail Transport Agent) e, quando si installa qualcosa che abbiamo compilato in proprio, il sistema di gestione dei pacchetti non può sapere nulla del nuovo software.
Qui entra in scena equivs
. Per usarlo installare il pacchetto
omonimo. Equivs crea un pacchetto vuoto che è capace di soddisfare qualunque
dipendenza, facendo credere al sistema di gestione dei pacchetti che le
dipendenze sono soddisfatte.
Prima di iniziare è bene ricordare che esistono modi più sicuri per compilare un programma già impacchettato per Debian con opzioni differenti e che non si dovrebbe usare equivs per rimpiazzare le dipendenze se non si sa quali possono essere le conseguenze sul sistema. Vedere Scaricare i pacchetti sorgente, Sezione 4.1 per ulteriori informazioni.
Continuando con l'esempio del MTA: si è appena installato il neo-compilato
postfix
e ora si vuole installare mutt
, però
mutt
richiede di installare un altro MTA. Ma ce ne già uno
installato!
Cambiare directory (/tmp
, per esempio) ed eseguire:
# equivs-control nome
Mettere al posto di name il nome del file di controllo da creare. Il file che sarà creato è come quello che segue:
Section: misc Priority: optional Standards-Version: 3.5.10 Package: <enter package name; defaults to equivs-dummy> Version: <enter version here; defaults to 1.0> Maintainer: Your Name <yourname@foo.com> Pre-Depends: <packages> Depends: <packages> Recommends: <packages> Suggests: <package> Provides: <(virtual)package> Architecture: all Copyright: <copyright file; defaults to GPL2> Changelog: <changelog file; defaults to a generic changelog> Readme: <README.Debian file; defaults to a generic one> Extra-Files: <additional files for the doc directory, commaseparated> Description: <short description; defaults to some wise words> long description and info . second paragraph
Ora è necessario modificarlo in modo che faccia quello che si vuole. Qui verrà mostrato il formato dei soli campi necessari:
Section: misc Priority: optional Standards-Version: 3.0.1 Package: mta-local Provides: mail-transport-agent
È tutto. mutt
dipende da
mail-transport-agent
, che è un pacchetto virtuale fornito da tutti
i MTA, mta-local si "registra" da solo come un mail-transport-agent
tramite il campo "Provides".
Ora serve solo creare il pacchetto:
# equivs-build name dh_tstdir touch build-stamp dh_testdir dh_testroot dh_clean -k # Add here commands to install the package into debian/tmp. touch install-stamp dh_testdir dh_testroot dh_installdocs dh_installchangelogs dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package `name' in `../name_1.0_all.deb'. The package has been created. Attention, the package has been created in the current directory,
e installare il .deb risultante. Vedere Installazione di pacchetti scaricati manualmente o creati in locale, Sezione 3.5.
Come si può intuire ci sono diversi usi di equivs
. Si può creare
un pacchetto my-fovorites, che dipende dai programmi che
abitualmente si installano, per esempio. Liberate la vostra immaginazione, ma
con cautela.
Infine notare che ci sono vari esempi di file di controllo in
/usr/share/doc/equivs/example
.
[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ successivo ]
APT HOWTO
1.9.3 - Novembre 2004kov@debian.org