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

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


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


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


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...).
Di default sono già abilitate. In caso di dubbi, si rimanda alla lettura della guida: [[I repository ed il loro utilizzo]].


Assicuriamoci di essere l' utente root e procediamo.
In caso di modifiche, ricordarsi di aggiornare il contenuto del database dei pacchetti, con [[privilegi di amministrazione]]:
 
Per prima cosa editiamo il file '''/etc/apt/sources.list''' ed inseriamo gli archivi dei pacchetti Debian che utilizzeremo:
<pre>
<pre>
### Debian Ufficiale -- Testing
# apt-get update
deb http://ftp.it.debian.org/debian/ testing main non-free contrib
 
### Debian Ufficiale -- Testing Sicurezza
deb http://security.debian.org/ testing/updates main contrib non-free
 
### Debian Ufficiale -- Sid
deb http://ftp.it.debian.org/debian/ unstable main non-free contrib
 
###  Debian Ufficiale -- Experimental
deb http://ftp.debian.org/debian/ ../project/experimental main
 
### Multimedia -- Audio -- Rarewares
deb http://www.rarewares.org/debian/packages/unstable ./
 
### Multimedia -- Video -- Marillat
deb ftp://ftp.nerim.net/debian-marillat/ etch main
deb ftp://ftp.nerim.net/debian-marillat/ sid main
</pre>
</pre>


A questo punto dobbiamo preparare due files normalmente non presenti sulla nostra debianbox: si tratta dei file '''preferences''' e '''apt.conf'''.
== Scaricare i sorgenti ==
Questi due file istruiranno APT su come gestire le dipendenze dei pacchetti, informandolo su come comportarsi in caso di conflitti e altri problemi.
Iniziamo, per avere tutto in ordine, a creare una cartella di lavoro:
 
Creiamo il file preferences:
<pre>
<pre>
# touch /etc/apt/preferences
$ mkdir sorgenti && cd sorgenti
</pre>
</pre>
editiamolo col nostro editor di fiducia e inseriamo queste direttive:
 
Ora possiamo scaricare i sorgenti:
<pre>
<pre>
Package: *
$ apt-get source nomepacchetto
Pin: release o=Unofficial Multimedia Packages
Pin-Priority: 950
 
Package: *
Pin: release o=xmixahlx
Pin-Priority: 900
 
Package: *
Pin: release a=testing
Pin-Priority: 850
 
Package: *
Pin: release a=unstable
Pin-Priority: 800
 
Package: *
Pin: release a=experimental
Pin-Priority: 750
</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:
Il pinning pu� essere orientato ad un archivio, un'origine, la versione di un pacchetto, un componente, ecc...
 
Con '''"o="''' si specifica l' origine (la distribuzione) del pacchetto, con '''"a="''' l'archivio (sarge,sid, stable, ecc...).
 
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).
 
Vediamo alcuni esempi:
 
<pre>
<pre>
# cd /var/lib/apt/lists
nomepacchetto-versione
# cat www.rarewares.org_debian_packages_unstable_._Release
nomepacchetto_versione.debian.tar.gz
Archive: unstable
nomepacchetto_versione.orig.tar.gz
Origin: xmixahlx                    
nomepacchetto_versione.dsc
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>
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').


Dove:
== Installare le dipendenze per la compilazione ==
* '''Archive''' = � l' archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc...);
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:
* '''Component''' = indica il tipo di componente (ad es.: main, contrib, non-free);
* '''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
 
<pre>
<pre>
# touch /etc/apt/apt.conf
# apt-get build-dep nomepacchetto
</pre>
</pre>


editiamolo inserendo quanto segue:
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>
APT::Default-Release "testing";
$ patch -p1 < patch.patch
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>
 
Se fosse compressa:
Facciamo l' update del database dei pacchetti:
 
<pre>
<pre>
# apt-get update
$ zcat patch.patch | patch -p1
</pre>
</pre>


D'ora in avanti avremo due possibilit� per installare un nuovo pacchetto: il metodo che usiamo di solito e cio�:
== Compilazione ==
 
Una volta applicata la patch, se non riceviamo errori, siamo pronti a compilare il pacchetto.<br/>
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>
# apt-get install nome_pacchetto
# 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.


che utilizzer� pacchetti proveniente dalla versione impostata come '''Default-Release''' in '''apt.conf''', oppure il comando
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]]:
<pre>
<pre>
# apt-get install -t versione_di_debian nome_pacchetto
# dpkg -i nomepacchetto_ver.sio.ne.deb
</pre>
</pre>


che provveder� a installare il pacchetto da noi richiesto per la versione specificata (versione_debian), risolvendo automaticamente le dipendenze.
Bene, se non riceviamo errori, il pacchetto è installato.
 
Happy debian!
 
----


Autore: [[User:Keltik|Keltik]]<br>
{{Autori
Revisione: [[User:Nest|Nest]] <br>
|Autore = [[User:MaXeR|MaXeR]]
Verificato: [[Utente:TheNoise|~ The Noise]]
|Verificata_da =
:[[Utente:HAL 9000|HAL 9000]] 10:20, 7 set 2019 (CEST)
|Numero_revisori = 1
}}


[[Categoria:Apt]]
[[Categoria:Apt]]
[[Categoria:Apt-Dev]]
[[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