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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (firma)
(verificata, spostata sezione relativa ad apt-build in "Apt-build: ottimizzazione dei pacchetti")
 
(17 versioni intermedie di 10 utenti non mostrate)
Riga 1: Riga 1:
==Introduzione==
{{Versioni compatibili|Jessie|Stretch|Buster}}
== Introduzione ==
In questo ''how-to'' vedremo come sia possibile applicare una [[patch]] a un [[pacchetto]] ufficiale Debian.


In questo howto vedremo come sia possibile applicare una patch ad un pacchetto
Bisogna sottolineare, tuttavia, che non sempre è possibile farlo: è necessario, infatti, che il pacchetto sia stato distribuito in forma di sorgenti. Ciò è sempre garantito se si utilizza la sola [[sezione]] '''main''' nei [[repository]].
ufficiale Debian.
Prima di proseguire, però, vedremo quando non è possibile farlo:
* il pacchetto non è stato distribuito anche in forma di sorgenti (capita per
qualche repository non ufficiale e per alcuni pecchetti uff. (una volta mi era
successo...).


== Preparazione del sistema ==
Per prima cosa bisogna assicurarsi di avere, in <code>/etc/apt/sources.list</code>, le sorgenti da cui scaricare i pacchetti, ossia le righe inizianti con '''deb-src''' relative alla versione di Debian che si sta utilizzando.


==Preparazione del sistema==
Di default sono già abilitate. In caso di dubbi, si rimanda alla lettura della guida: [[I repository ed il loro utilizzo]].


Per prima cosa bisogna assicurarsi di avere, in '''/etc/apt/sources.list''',
In caso di modifiche, ricordarsi di aggiornare il contenuto del database dei pacchetti, con [[privilegi di amministrazione]]:
le sorgenti per scaricare i pacchetti di tipo deb-src:
<pre>
#--CUT HERE--#
#per stable
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
deb-src http://ftp2.it.debian.org/debian/ testing main non-free contrib
deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib
non-free
 
#per unstable
deb-src http://ftp2.it.debian.org/debian/ sid main non-free contrib
deb-src http://non-us.debian.org/debian-non-US sid/non-US main contrib non-free
#--CUT HERE--#
</pre>
ora aggiorniamo il contenuto del database dei pacchetti:
<pre>
<pre>
# apt-get update
# apt-get update
</pre>
</pre>


 
== Scaricare i sorgenti ==
==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 50: Riga 25:
$ apt-get source nomepacchetto
$ apt-get source nomepacchetto
</pre>
</pre>
così facendo scaricheremo tre file. Sarà creata automaticamente anche una directory sulla base dei due file compressi .tar.gz . Il risultato sarà, ad esempio:
<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').


così facendo, scaricheremo 3 file, che verranno decompressi in una cartella
== Installare le dipendenze per la compilazione ==
(nomepacchetto-ver.sio.ne)
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:
 
Ora possiamo entrare in questa cartella, scaricare la patch e applicarla:
<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 <code>apt-get source</code> (nel nostro caso ''nomepacchetto-versione'') e copiare qui la [[patch]] (nell'esempio il suo nome sarà ''patch.patch'') e applicarla.
 
== Applicare la patch ==
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
== Compilazione ==
compilare il pacchetto.
Una volta applicata la patch, se non riceviamo errori, siamo pronti a compilare il pacchetto.<br/>
Per fare questo utilizzeremo un altro tool Debian: dpkg-buildpackage
Per fare questo utilizzeremo un altro tool Debian: <code>dpkg-buildpackage</code> (installato in automatico con <code>apt-get build-dep</code>); come segue:
<pre>
<pre>
# dpkg-buildpackage
# dpkg-buildpackage -us -uc
</pre>
</pre>
Con i parametri <code>-us</code> e <code>-uc</code> sarà generato un pacchetto senza firmare i sorgenti e i file generati dal comando (.changes e .buildinfo) rispettivamente.


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.
di sistemare le dipendenze (se l'errore è dovuto alla mancanza di alcune
librerie) elencando tutti i pacchetti necessari, installabili con un normale
<pre>
# apt-get buid-dep 'nomepacchetto_da_installare'
</pre>


una volta giunta a termine la compilazione, troveremo (nella cartella
== Installazione del pacchetto ==
nomepacchetto da noi creata) una serie di file .deb!
Ora possiamo installarli con [[dpkg]] o [[gdebi]]:
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`===
 
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.
 
Apt-build ci mette a disposizione una opzione, '''--patch''', che consente di applicare delle patch al pacchetto da installare.
Vediamo, ora, come fare.
Scarichiamo la patch:
<pre>
$ wget http://indirizzo/per/la/patch.patch
</pre>
 
ora diamo il semplice comando:
<pre>
# apt-build -p 0 --patch patch.patch install 'pacchetto'
</pre>
 
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;
* viene aggiornato l'elenco dei pacchetti dei vari repository (usare l'opzione '''--noupdate''' per evitarlo);
* vengono scaricati i sorgenti del pacchetto;
* viene applicata la patch;
* inizia la compilazione del pacchetto:
* viene/vengono installato/i il/i pacchetto/i generato/i.
 
Bene, ora il pacchetto è installato nel vostro sistema!


{{Autori
|Autore = [[User:MaXeR|MaXeR]]
|Verificata_da =
:[[Utente:HAL 9000|HAL 9000]] 10:20, 7 set 2019 (CEST)
|Numero_revisori = 1
}}


---- [[User:MaXeR|MaXeR]]
[[Categoria:Apt]]
[[Categoria:Creare e modificare pacchetti]]

Versione attuale delle 08:20, 7 set 2019

Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"
Debian 9 "stretch"
Debian 10 "buster"

Introduzione

In questo how-to vedremo come sia possibile applicare una patch a un pacchetto ufficiale Debian.

Bisogna sottolineare, tuttavia, che non sempre è possibile farlo: è necessario, infatti, che il pacchetto sia stato distribuito in forma di sorgenti. Ciò è sempre garantito se si utilizza la sola sezione main nei repository.

Preparazione del sistema

Per prima cosa bisogna assicurarsi di avere, in /etc/apt/sources.list, le sorgenti da cui scaricare i pacchetti, ossia le righe inizianti con deb-src relative alla versione di Debian che si sta utilizzando.

Di default sono già abilitate. In caso di dubbi, si rimanda alla lettura della guida: I repository ed il loro utilizzo.

In caso di modifiche, ricordarsi di aggiornare il contenuto del database dei pacchetti, con privilegi di amministrazione:

# apt-get update

Scaricare i sorgenti

Iniziamo, per avere tutto in ordine, a creare una cartella di lavoro:

$ mkdir sorgenti && cd sorgenti

Ora possiamo scaricare i sorgenti:

$ apt-get source nomepacchetto

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-versione
nomepacchetto_versione.debian.tar.gz
nomepacchetto_versione.orig.tar.gz
nomepacchetto_versione.dsc

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

Installare le dipendenze per la compilazione

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:

# apt-get build-dep nomepacchetto

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.

Applicare la patch

Supponendo che la patch non sia compressa:

$ patch -p1 < patch.patch

Se fosse compressa:

$ zcat patch.patch | patch -p1

Compilazione

Una volta applicata la patch, se non riceviamo errori, siamo pronti a compilare il pacchetto.
Per fare questo utilizzeremo un altro tool Debian: dpkg-buildpackage (installato in automatico con apt-get build-dep); come segue:

# dpkg-buildpackage -us -uc

Con i parametri -us e -uc sarà generato un pacchetto senza firmare i sorgenti e i file generati dal comando (.changes e .buildinfo) rispettivamente.

Una volta giunta a termine la compilazione, troveremo (nella directory nomepacchetto da noi creata) una serie di file .deb.

Installazione del pacchetto

Ora possiamo installarli con dpkg o gdebi:

# dpkg -i nomepacchetto_ver.sio.ne.deb

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




Guida scritta da: MaXeR Swirl-auth40.png Debianized 40%
Estesa da:
Verificata da:
HAL 9000 10:20, 7 set 2019 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized