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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (Aggiornamento mirror default con il più efficiente httpredir)
(verificata, spostata sezione relativa ad apt-build in "Apt-build: ottimizzazione dei pacchetti")
 
Riga 1: Riga 1:
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
{{Versioni compatibili|Jessie|Stretch|Buster}}
== Introduzione ==
== 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]] ufficiale Debian. Bisogna sottolineare, tuttavia, che non sempre è possibile farlo: è necessario, infatti, che il pacchetto sia stato distribuito in forma di sorgenti.
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 ==
== 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.


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:
Di default sono già abilitate. In caso di dubbi, si rimanda alla lettura della guida: [[I repository ed il loro utilizzo]].
<pre>
# per stable
deb-src http://httpredir.debian.org/debian/ stable main
 
# per testing
deb-src http://httpredir.debian.org/debian/ testing main


# per unstable
In caso di modifiche, ricordarsi di aggiornare il contenuto del database dei pacchetti, con [[privilegi di amministrazione]]:
deb-src http://httpredir.debian.org/debian/ sid main
</pre>
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' ==
== Scaricare i sorgenti ==
 
Iniziamo, per avere tutto in ordine, a creare una cartella di lavoro:
Iniziamo, per avere tutto in ordine, a creare una cartella di lavoro:
<pre>
<pre>
Riga 34: 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:
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>
<pre>
Riga 44: Riga 34:
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').
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:
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>
Riga 49: Riga 40:
</pre>
</pre>


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/>
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:
Supponendo che la patch non sia compressa:
<pre>
<pre>
Riga 59: Riga 52:
</pre>
</pre>


== Compilazione ==
Una volta applicata la patch, se non riceviamo errori, siamo pronti a compilare il pacchetto.<br/>
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 -us -uc
# 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.
Una volta giunta a termine la compilazione, troveremo (nella directory ''nomepacchetto'' da noi creata) una serie di file .deb.


Una volta giunta a termine la compilazione, troveremo (nella directory ''nomepacchetto'' da noi creata) una serie di file .deb!<br/>
== Installazione del pacchetto ==
Ora possiamo installarli con [[dpkg]] o [[gdebi]]:
Ora possiamo installarli con [[dpkg]] o [[gdebi]]:
<pre>
<pre>
Riga 72: Riga 69:


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.<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
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.<br/>
Vediamo, ora, come fare.<br/>
Scarichiamo la patch:
<pre>
$ wget http://indirizzo/per/la/patch.patch
</pre>
e 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 <code>--noupdate</code> 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
{{Autori
|Autore = [[User:MaXeR|MaXeR]]
|Autore = [[User:MaXeR|MaXeR]]
|Verificata_da =
:[[Utente:HAL 9000|HAL 9000]] 10:20, 7 set 2019 (CEST)
|Numero_revisori = 1
}}
}}


[[Categoria:Apt]]
[[Categoria:Apt]]
[[Categoria:Creare e modificare pacchetti]]
[[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