Applicare una patch ad un pacchetto Debian: differenze tra le versioni

aggiornata con contenuti di "Aggiungere una patch a un pacchetto Debian" (vedere task #48 della revisione Wiki)
(+ template autori)
(aggiornata con contenuti di "Aggiungere una patch a un pacchetto Debian" (vedere task #48 della revisione Wiki))
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili}}
==Introduzione==
== Introduzione ==


In questo howto vedremo come sia possibile applicare una patch ad un pacchetto
In questo howto vedremo come sia possibile applicare una [[patch]] ad un [[pacchetto]] ufficiale Debian. Bisogna sottolineare, tuttavia, che non sempre è possibile farlo: è necessario, infatti, che il pacchetto sia stato distribuito in forma di sorgenti.
ufficiale Debian. Bisogna sottolineare, tuttavia, che non sempre è possibile farlo: è necessario, infatti, che il pacchetto sia stato distribuito in forma di sorgenti.


==Preparazione del sistema==
== Preparazione del sistema ==


Per prima cosa bisogna assicurarsi di avere, in <code>/etc/apt/sources.list</code>,
Per prima cosa bisogna assicurarsi di avere, in <code>/etc/apt/sources.list</code>, le sorgenti da cui scaricare i pacchetti di tipo 'deb-src' relative alla versione di Debian che si sta utilizzando:
le sorgenti per scaricare i pacchetti di tipo deb-src:
<pre>
<pre>
#--CUT HERE--#
# per stable
#per stable
deb-src http://ftp.it.debian.org/debian/ stable main
deb-src http://ftp2.it.debian.org/debian/ stable main non-free contrib
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib
non-free


#per testing
# per testing
deb-src http://ftp2.it.debian.org/debian/ testing main non-free contrib
deb-src http://ftp.it.debian.org/debian/ testing main
deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib
non-free


#per unstable
# per unstable
deb-src http://ftp2.it.debian.org/debian/ sid main non-free contrib
deb-src http://ftp.it.debian.org/debian/ sid main
deb-src http://non-us.debian.org/debian-non-US sid/non-US main contrib non-free
#--CUT HERE--#
</pre>
</pre>
ora aggiorniamo il contenuto del database dei pacchetti:
adattare queste righe in base alle proprie esigenze, ad esempio [[mirror]] diverso, [[sezione|sezioni]] differenti o rimozione di una o più righe (se si utilizza solo [[stable]] allora le righe di ''testing'' e ''sid'' sono inutili).<br/>
Ora aggiorniamo il contenuto del database dei pacchetti:
<pre>
<pre>
# apt-get update
# apt-get update
</pre>
</pre>


== Metodo 1: 'apt-get source && dpkg-buildpackage' ==


==Procediamo==
Iniziamo, per avere tutto in ordine, a creare una cartella di lavoro:
 
===Metodo 1: `apt-get source && dpkg-buildpackage`===
 
Per scaricare i sorgenti, seguiamo questa procedura:
Per avere tutto in ordine, creiamo una cartella di lavoro
<pre>
<pre>
$ mkdir nomepacchetto && cd nomepacchetto
$ mkdir sorgenti && cd sorgenti
</pre>
</pre>


Riga 47: Riga 35:
</pre>
</pre>


così facendo, scaricheremo 3 file, che verranno decompressi in una cartella
così facendo scaricheremo tre file. Sarà creata automaticamente anche una directory sulla base dei due file compressi .tar.gz . Il risultato sarà, ad esempio:
(nomepacchetto-ver.sio.ne)
<pre>
nomepacchetto-versione
nomepacchetto_versione.debian.tar.gz
nomepacchetto_versione.orig.tar.gz
nomepacchetto_versione.dsc
</pre>
La prima voce è una directory contenente l'insieme dei due archivi sottostanti compattati, mentre il file .dsc è relativo al file di controllo tipico dei pacchetti Debian. I file .tar.gz contengono i sorgenti del pacchetto, ossia i sorgenti originali ('orig.tar.gz') e le modifiche ai sorgenti inserite dagli sviluppatori Debian ('debian.tar.gz').


Ora possiamo entrare in questa cartella, scaricare la patch e applicarla:
Successivamente bisognerà installare tutti pacchetti necessari per compilare i sorgenti. Per far questo, il mitico [[apt-get]] ci aiuterà a procurarci tutto quanto ci serve con il semplice comando:
<pre>
<pre>
$ cd nomepacchetto-ver.sio.ne
# apt-get build-dep nomepacchetto
$ wget http://indirizzo/per/la/patch.patch
</pre>
</pre>


supponendo che la patch non sia compressa:
Scaricati tutti i pacchetti necessari, possiamo entrare nella directory automaticamente creata da 'apt-get source' (nel nostro caso ''nomepacchetto-versione'') e copiare qui la [[patch]] (nell'esempio il suo nome sarà ''patch.patch'') e applicarla.<br/>
Supponendo che la patch non sia compressa:
<pre>
<pre>
$ patch -p1 < patch.patch
$ patch -p1 < patch.patch
</pre>
</pre>
 
Se fosse compressa:
se è compressa:
<pre>
<pre>
$ zcat patch.patch | patch -p1
$ zcat patch.patch | patch -p1
</pre>
</pre>


Una volta applicata la patch, se non riceviamo errori, siamo pronti a
Una volta applicata la patch, se non riceviamo errori, siamo pronti a compilare il pacchetto.<br/>
compilare il pacchetto.
Per fare questo utilizzeremo un altro tool Debian: ''dpkg-buildpackage'':
Per fare questo utilizzeremo un altro tool Debian: dpkg-buildpackage
<pre>
<pre>
# dpkg-buildpackage
# dpkg-buildpackage -us -uc
</pre>
</pre>


Il comando proverà a compilare il pacchetto, ed in caso di errori ci chiederà
Una volta giunta a termine la compilazione, troveremo (nella directory ''nomepacchetto'' da noi creata) una serie di file .deb!<br/>
di sistemare le dipendenze (se l'errore è dovuto alla mancanza di alcune
Ora possiamo installarli con [[dpkg]] o [[gdebi]]:
librerie) elencando tutti i pacchetti necessari, installabili con un normale
<pre>
# apt-get build-dep 'nomepacchetto_da_installare'
</pre>
 
una volta giunta a termine la compilazione, troveremo (nella cartella
nomepacchetto da noi creata) una serie di file .deb!
Ora possiamo installarli:
<pre>
<pre>
# dpkg -i nomepacchetto_ver.sio.ne.deb
# dpkg -i nomepacchetto_ver.sio.ne.deb
</pre>
</pre>


Bene, se non riceviamo errori...il pacchetto è installato.
Bene, se non riceviamo errori, il pacchetto è installato.


== Metodo 2: 'apt-build'==


===Metodo 2: `apt-build`===
Prima di iniziare, è d'obbligo una introduzione su apt-build.<br/>
 
Questo tool consente di compilare i pacchetti Debian ottimizzandoli per la propria macchina. Durante l'installazione vengono poste delle domande (tipo di processore, livello di ottimizzazione), e rispondendo nel modo opportuno, sarà possibile compilare i pacchetti ottimizzandoli per la
Prima di iniziare, è d'obbligo una introduzione su apt-build.
Questo tool è abbastanza giovane, e consente di compilare i pacchetti Debian
ottimizzandoli per la propria macchina. Durante l'installazione vengono poste
delle domande (tipo di processore, livello di ottimizzazione), e rispondendo
nel modo opportuno, sarà possibile compilare i pacchetti ottimizzandoli per la
propria macchina, cosa che, nel METODO 1 non avviene.
propria macchina, cosa che, nel METODO 1 non avviene.


Apt-build ci mette a disposizione una opzione, <code>--patch</code>, che consente di applicare delle patch al pacchetto da installare.
Apt-build ci mette a disposizione una opzione, <code>--patch</code>, che consente di applicare delle patch al pacchetto da installare.<br/>
Vediamo, ora, come fare.
Vediamo, ora, come fare.<br/>
Scarichiamo la patch:
Scarichiamo la patch:
<pre>
<pre>
$ wget http://indirizzo/per/la/patch.patch
$ wget http://indirizzo/per/la/patch.patch
</pre>
</pre>
 
e diamo il semplice comando:
ora diamo il semplice comando:
<pre>
<pre>
# apt-build -p 0 --patch patch.patch install 'pacchetto'
# apt-build -p 0 --patch patch.patch install 'pacchetto'
Riga 113: Riga 92:
ora mettiamoci comodi, armati di tazzona di caffè (rigorosamente marchiata con un bel Tux) e controlliamo a video mentre:
ora mettiamoci comodi, armati di tazzona di caffè (rigorosamente marchiata con un bel Tux) e controlliamo a video mentre:
* vengono scaricate i pacchetti *-dev per la compilazione;
* vengono scaricate i pacchetti *-dev per la compilazione;
* viene aggiornato l'elenco dei pacchetti dei vari repository (usare l'opzione <code>--noupdate</code> per evitarlo);
* viene aggiornato l'elenco dei pacchetti dei vari [[repository]] (usare l'opzione <code>--noupdate</code> per evitarlo);
* vengono scaricati i sorgenti del pacchetto;
* vengono scaricati i sorgenti del pacchetto;
* viene applicata la patch;
* viene applicata la patch;
6 999

contributi