PatchHowto: различия между версиями
Tora-bora (обсуждение | вклад) м (+ шаблоны Викифицировать и В разработке) |
мНет описания правки |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
[[Категория:Devel]] | [[Категория:Devel]] | ||
[[Категория:RPM spec]] | [[Категория:RPM spec]] | ||
== Как делать патчи == | == Как делать патчи == | ||
Краткая инструкция для «начинающих». | Краткая инструкция для «начинающих». | ||
Строка 8: | Строка 6: | ||
Распаковать апстримные исходники. Допустим, что они распакованы в каталог {{path|name-1.0/}} | Распаковать апстримные исходники. Допустим, что они распакованы в каталог {{path|name-1.0/}} | ||
Далее надо зайти | Далее надо туда зайти. Перед изменением каждого файла надо создать его копию с расширением {{path|.orig}}. | ||
То есть если собираешься менять {{path|Makefile.am}} — надо скопировать его как {{path|Makefile.am.orig}}, например, командой {{cmd|cp -a src/Makefile.am{,.orig}<i></i>}} | То есть если собираешься менять {{path|Makefile.am}} — надо скопировать его как {{path|Makefile.am.orig}}, например, командой {{cmd|cp -a src/Makefile.am{,.orig}<i></i>}} | ||
После чего надо внести | Если масштаб вторжения заранее неизвестен, лучше скопировать сразу весь каталог: {{cmd|cp -a name-1.0{,.orig}<i></i>}} | ||
После чего надо внести необходимые изменения. Можно даже собирать из этой директории, вносить дополнительные изменения по результатам пересборки и т.д., если вы не против отслеживать вручную список всех затронутых файлов<ref>...для чего вообще-то придуман [http://lists.altlinux.org/pipermail/devel/2012-October/195554.html git].</ref>. | |||
Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча. | Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча. | ||
[[ALT_Packaging_HOWTO#Наименование патчей.]] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча. | [[ALT_Packaging_HOWTO#Наименование патчей.|ALT Packaging HOWTO]] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча. | ||
Например, имя патча для нашего гипотетического пакета может быть {{path|name-1.0-alt-link-fixes.patch}} | Например, имя патча для нашего гипотетического пакета может быть {{path|name-1.0-alt-link-fixes.patch}} | ||
Тогда надо выйти в «родительскую» директорию (где находится каталог с исходниками {{path|name-1.0/}}) и сказать {{cmd|gendiff name-1.0 .orig}} | Тогда надо выйти в «родительскую» директорию (где находится каталог с исходниками {{path|name-1.0/}}) и сказать {{cmd|gendiff name-1.0 .orig}}; на экран будет выведен патч, сгенерированный как разница между | ||
сохраненными ранее файлами {{path|.orig}} и измененными файлами без {{path|.orig}}. | сохраненными ранее файлами {{path|.orig}} и измененными файлами без {{path|.orig}}. | ||
Строка 26: | Строка 26: | ||
gendiff name-1.0 .orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch | gendiff name-1.0 .orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch | ||
Для варианта с полной копией соответственно: | |||
diff -Naur name-1.0 name-1.0.orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch | |||
Затем в спеке надо будет подключить этот патч в двух местах. | Затем в спеке надо будет подключить этот патч в двух местах. | ||
Строка 31: | Строка 35: | ||
Первое из них — это запись о патче. Рекомендую положить ее рядом с тегом <tt>Source</tt>. Перед патчем желательно поместить какой-нибудь комментарий — для чего этот патч. | Первое из них — это запись о патче. Рекомендую положить ее рядом с тегом <tt>Source</tt>. Перед патчем желательно поместить какой-нибудь комментарий — для чего этот патч. | ||
# Name's | # Name's upstream doesn't want my patch, so I'll place it here. | ||
# It makes all plugins properly linked. | # It makes all plugins properly linked. | ||
Patch0: name-1.0-alt-link-fixes.patch | Patch0: name-1.0-alt-link-fixes.patch | ||
Вторая часть — собственно применение патча. Это надо делать в секции <tt>%prep</tt> после макроса <tt>%setup</tt>. Желательно | Вторая часть — собственно применение патча. Это надо делать в секции <tt>%prep</tt> после макроса <tt>%setup</tt>. Желательно использовать ключик <tt>-b</tt> ради той же понятности, он же будет использоваться для резервных копий исходных (непатченых) файлов при наложении. | ||
Для патча, созданного через {{cmd|gendiff}} — надо написать следующее: | Для патча, созданного через {{cmd|gendiff}} — надо написать следующее: | ||
# Name's | # Name's upstream doesn't want my patch, so I'll place it here. | ||
# It makes all plugins properly linked. | # It makes all plugins properly linked. | ||
%patch0 -p1 | %patch0 -p1 -b .link-fixes | ||
Где номер 0 соответствует патчу номер 0. | Где номер 0 соответствует патчу номер 0. | ||
Вот собственно и все. Если надо отключить патч, просто замените символ процента в <tt>%patch0</tt> на символ решетки (<tt>#</tt>). Тогда он станет комментарием. | Вот собственно и все. Если надо отключить патч, просто замените символ процента в <tt>%patch0</tt> на символ решетки (<tt>#</tt>). [[TypicalPackagingErrors/StrikeOutMacro|Тогда]] он станет комментарием. | ||
Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном {{path|/usr/local}}. | Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном {{path|/usr/local}}. | ||
Строка 54: | Строка 58: | ||
* [[ALT Packaging HOWTO]] | * [[ALT Packaging HOWTO]] | ||
=== Примечания === | |||
<references /> | <references /> |
Текущая версия от 14:54, 30 июня 2017
Как делать патчи
Краткая инструкция для «начинающих».
Распаковать апстримные исходники. Допустим, что они распакованы в каталог name-1.0/
Далее надо туда зайти. Перед изменением каждого файла надо создать его копию с расширением .orig.
То есть если собираешься менять Makefile.am — надо скопировать его как Makefile.am.orig, например, командой cp -a src/Makefile.am{,.orig}
Если масштаб вторжения заранее неизвестен, лучше скопировать сразу весь каталог: cp -a name-1.0{,.orig}
После чего надо внести необходимые изменения. Можно даже собирать из этой директории, вносить дополнительные изменения по результатам пересборки и т.д., если вы не против отслеживать вручную список всех затронутых файлов[1].
Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча.
ALT Packaging HOWTO рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.
Например, имя патча для нашего гипотетического пакета может быть name-1.0-alt-link-fixes.patch
Тогда надо выйти в «родительскую» директорию (где находится каталог с исходниками name-1.0/) и сказать gendiff name-1.0 .orig; на экран будет выведен патч, сгенерированный как разница между сохраненными ранее файлами .orig и измененными файлами без .orig.
Если нравится, что получилось — надо сохранить этот патч как отдельный файл:
gendiff name-1.0 .orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch
Для варианта с полной копией соответственно:
diff -Naur name-1.0 name-1.0.orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch
Затем в спеке надо будет подключить этот патч в двух местах.
Первое из них — это запись о патче. Рекомендую положить ее рядом с тегом Source. Перед патчем желательно поместить какой-нибудь комментарий — для чего этот патч.
# Name's upstream doesn't want my patch, so I'll place it here. # It makes all plugins properly linked. Patch0: name-1.0-alt-link-fixes.patch
Вторая часть — собственно применение патча. Это надо делать в секции %prep после макроса %setup. Желательно использовать ключик -b ради той же понятности, он же будет использоваться для резервных копий исходных (непатченых) файлов при наложении.
Для патча, созданного через gendiff — надо написать следующее:
# Name's upstream doesn't want my patch, so I'll place it here. # It makes all plugins properly linked. %patch0 -p1 -b .link-fixes
Где номер 0 соответствует патчу номер 0.
Вот собственно и все. Если надо отключить патч, просто замените символ процента в %patch0 на символ решетки (#). Тогда он станет комментарием.
Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном /usr/local.