Come si applicano le patch software?


Risposte:


21

Le patch sono generalmente contenute nei .difffile, perché le patch vengono create usando il diffcomando.

Una patch è una serie di inserimenti ed eliminazioni nel codice sorgente. Per questo motivo, al fine di utilizzare la patch, è necessario creare l'applicazione (ad esempio "foobar") dal sorgente dopo aver applicato la patch. Quindi, nei passaggi:

1. Ottieni il pacchetto sorgente per foobar .

La maggior parte delle distribuzioni di Linux (il patch nb non è univoco per Linux) hanno "pacchetti sorgente" che puoi usare a questo scopo, ma poiché questi sono eterogenei, qui farò solo riferimento al formato della fonte originale. La fonte originale non fa parte della distribuzione e potrebbe essere difficile da trovare. Un buon punto di partenza è Wikipedia, che contiene articoli per molte applicazioni popolari e l'articolo dovrebbe contenere un collegamento a una home page con un download di origine. Puoi anche google te stesso, ovviamente. Il pacchetto sorgente si chiamerà qualcosa del genere foobar.0.1.tar.bz2. Decomprimilo: ora hai una directory chiamata foobar.0.1.

2. Aggiungi la patch.

A volte le patch sono file singoli e altre volte sono un insieme di più file. Copia quelli in foobar.0.1e cd foobar.0.1. Successivamente, è necessario eseguire il patchcomando. Questo si legge dall'input standard, quindi vuoi reindirizzare il .difffile. La parte difficile è determinare cosa usare per l' -popzione (se non ci sono istruzioni con la patch). Per fare ciò è necessario guardare all'inizio del file patch. Per esempio:

--- old/comm.c  2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c  2006-07-07 02:39:24.000000000 +0000

In questo caso, comm.cè il nome del file di origine che verrà modificato. Tuttavia, si noti che è stata aggiunta una directory. Dal momento che queste non sono la stessa directory ("vecchio" vs. "nuovo"), questo è un grande indizio che questa parte del percorso è spazzatura (per i nostri scopi). Lo scopo -pdell'interruttore (vedi man patch) è di eliminare questo prefisso. Ci vuole un numero, che è il numero di barre ( /) da eliminare, con tutto in mezzo; in questo caso utilizzeremo -p1per ridurre il percorso a semplicemente comm.c.

Quel presupposto comm.cè in realtà nella stessa directory, che sarà un altro indizio sul fatto che la tua interpretazione sia corretta. Se entrambe le linee erano src/comm.c, ed comm.cè effettivamente nella srcsottodirectory del tuo albero di compilazione, allora devi usare -p0- stai attento che non usare -paffatto rimuoverà TUTTE le barre. Se il percorso è assoluto (cioè inizia con /), è probabilmente quello che vuoi. Ora applica la patch:

patch -p1 < patch.diff

La fonte è stata ora modificata. Se ci sono più .difffile, applicali allo stesso modo.

3. Compilare e installare.

Questo è il processo normale si dovrebbe passare attraverso di costruire qualcosa da fonte - prima ./configure, poi make, make check, make install. Prima di eseguire l'ultimo, se si dispone già di un'installazione esistente foobar, decidere se si desidera rimuovere o sovrascrivere quello o come affrontare il conflitto di denominazione. Probabilmente vuoi foobarfare riferimento alla tua nuova versione con patch e non a quella precedente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.