Как мне применить программные патчи?

15

У меня есть приложение, foobarдля которого кто-то написал патч для добавления функции, которая мне нравится. Как я могу использовать патч?

лютик золотистый
источник

Ответы:

21

Патчи обычно содержатся в .diffфайлах, потому что патчи создаются с помощью diffкоманды.

Патч - это серия вставок и удалений в исходный код. По этой причине, чтобы использовать патч, вы должны собрать приложение (например, «foobar») из исходного кода после применения патча. Итак, по шагам:

1. Получите исходный пакет для foobar .

В большинстве дистрибутивов linux (nb patching не является уникальным для linux) есть «исходные пакеты», которые вы можете использовать для этой цели, но, поскольку они неоднородны, здесь я буду ссылаться только на формат исходного кода. Первоначальный источник не является частью дистрибутива и может быть трудно найти. Хорошее место для начала - это Википедия, в которой есть статьи для многих популярных приложений, и статья должна содержать ссылку на домашнюю страницу с исходной загрузкой. Вы также можете гуглить себя, очевидно. Пакет с исходным кодом будет называться как-то так foobar.0.1.tar.bz2. Распакуйте это - теперь у вас есть каталог с именем foobar.0.1.

2. Добавьте патч.

Иногда исправления представляют собой отдельные файлы, а иногда они представляют собой набор из нескольких файлов. Скопируйте их в foobar.0.1и cd foobar.0.1. Далее вам нужно запустить patchкоманду. Это считывает из стандартного ввода, поэтому вы хотите передать .diffфайл в файл. Сложная часть - определить, что использовать для -pопции (если в патче нет инструкций). Для этого вам нужно взглянуть на начало файла патча. Например:

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

В данном случае comm.cэто имя исходного файла, который будет изменен. Однако обратите внимание, что к нему добавлен каталог. Поскольку это не один и тот же каталог («старый» и «новый»), это большой признак того, что эта часть пути является ненужной (для наших целей). Назначение -pпереключателя (см. man patch) Состоит в том, чтобы устранить этот префикс. Требуется число, которое является числом слешей ( /) для удаления, со всем между ними; в этом случае мы будем использовать, -p1чтобы уменьшить путь до простого comm.c.

Предполагается, comm.cчто на самом деле находится в том же каталоге, что будет еще одним ключом к правильности вашей интерпретации. Если обе эти строки были src/comm.cи comm.cнаходятся на самом деле в srcподкаталоге вашего дерева сборки, то вам нужно использовать -p0- будьте осторожны, если не использовать -pвообще, удалит ВСЕ косые черты. Если путь абсолютен (т. Е. Начинается с /), это, вероятно, то, что вы хотите. Теперь примените патч:

patch -p1 < patch.diff

Источник теперь был изменен. Если есть еще .diffфайлы, примените их таким же образом.

3. Сборка и установка.

Это нормальный процесс , вы бы пройти , чтобы построить что - то из источника - первый ./configure, то make, make check, make install. Перед тем, как сделать последний, если у вас уже есть существующая установка foobar, решите, хотите ли вы удалить или перезаписать это, или как вы собираетесь бороться с конфликтом имен. Вы, вероятно, хотите foobarсослаться на свою новую исправленную версию, а не на старую.

лютик золотистый
источник