LINUX.ORG.RU

применить patch в deb-пакете

 , ,


0

1

здравствуйте, есть deb-пакет с патчами для более ранней версии библиотеки... я исправил, что orig.tar.gz создается из новой версии, однако патчи в pathes/ я так понимаю, остались для старой версии... вот, допустим, патч 03_Makefile.in.patch:

Author: Jose Carlos Garcia Sogo <jsogo@debian.org>
Description: This patch removes the "samples/simple" subdir from the Makefile.in.
Index: h323plus/Makefile.in
===================================================================
--- h323plus.orig/Makefile.in
+++ h323plus/Makefile.in
@@ -54,7 +54,7 @@ include $(OPENH323DIR)/openh323u.mak
 # export NOAUDIOCODECS=true
 # export NOVIDEO=true
 
-SUBDIRS := samples/simple
+SUBDIRS :=
 
 ifneq (,$(wildcard dump323))
 SUBDIRS += dump323
@@ -99,6 +99,7 @@ docs:
 install:
        mkdir -p $(DESTDIR)$(LIBDIR)
        rm -f $(DESTDIR)$(LIBDIR)/libh323_*_r.so*
+       $(INSTALL) -m 444 lib/libh323_s.a $(DESTDIR)$(LIBDIR)
        $(INSTALL) -m 444 lib/$(OH323_FILE).@MAJOR_VERSION@.@MINOR_VERSION@.@BUILD_NUMBER@ $(DESTDIR)$(L$
        (cd $(DESTDIR)$(LIBDIR) ; \
                rm -f  $(OH323_FILE).@MAJOR_VERSION@.@MINOR_VERSION@ ; \

однако в новой версии Makefile такой: https://github.com/willamowius/h323plus/blob/master/Makefile.in

как применить патч для новой версии? если вообще его нужно применять...

 patch < 03_Makefile.patch.in
создает файл Makefile.orig.in, я так понимаю это не то

да и вообще как dpkg-buildpackage узнает конкретно какие патчи нужно применить? т.к. можно удалить файл из patches, а он все равно его будет требовать

★★

Последнее исправление: xperious (всего исправлений: 1)

В каталоге debian есть подкаталог patches. Туда надо складывать патчи, желательно с численным префиксом, который будет указывать на порядок наложения. В файле series приведён список активных патчей. Т.е. в каталоге patches можно держать и неактивные в данный момент.

gag ★★★★★
()
Ответ на: комментарий от gag

Как обновить патчи? Заходим в каталог с пакетом (в котором лежит каталог debian), дальше вызываем quilt push. Он накладывает очередной по списку патч. Если всё прошло удачно, повторяем. После накладывания quilt'ом патча, который надо изменить (03_Makefile.patch), вносим изменения в модифицируемый файл (не .patch) (при необходимости вызываем до внесения изменений quit add путь_к_файлу), а потом перед переходом к следующем патчу вызываем quilt refresh. Текущий патч обновляется, и можно идти дальше по цепочке, или ввести quilt pop -a, чтобы отменить все патчи в обратном порядке и приступить к сборке пакета dpkg-buildpackage.

gag ★★★★★
()
Последнее исправление: gag (всего исправлений: 2)
Ответ на: комментарий от gag

хм, вот у нас есть каталог debian/patches... относительно него где должны исходники лежать? а то

quilt push

выдает следующее:

Наложение патча ../patches/01_libname.patch
can't find file to patch at input line 7
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Author: Kilian Krause <kilian@debian.org>
|Description: Fixes the libraries' file names
|Index: h323plus/openh323u.mak.in
|===================================================================
|--- h323plus.orig/openh323u.mak.in
|+++ h323plus/openh323u.mak.in
--------------------------
No file to patch.  Skipping patch.
1 out of 1 hunk ignored
Патч ../patches/01_libname.patch не применяется (принудить с -f)

xperious ★★
() автор топика
Ответ на: комментарий от xperious

хм, вот у нас есть каталог debian/patches... относительно него где должны исходники лежать? а то

Как я уже написал:

Заходим в каталог с пакетом (в котором лежит каталог debian)

Т.е.: path_to_build_dir/top_src_extracted_package/debian/patches. Рабочий каталог - это top_src, который как правило имеет название PackageName-version.

gag ★★★★★
()
Последнее исправление: gag (всего исправлений: 1)
Ответ на: комментарий от gag

уж как только не пробовал... такая структура пакета:

path_to_file
    h323
       debian
           /...много чего еще.../
           patches
    tmp   <---здесь исходники
quilt push выдает то, что выше описал, я так понимаю, надо править сам файлик патча?

xperious ★★
() автор топика
Последнее исправление: xperious (всего исправлений: 1)
Ответ на: комментарий от xperious

tmp - это название пакета? Выше я упомянул:

Рабочий каталог - это top_src, который как правило имеет название PackageName-version.

Почему каталог debian лежит не в каталоге с исходниками пакета?

Заходим в каталог с пакетом (в котором лежит каталог debian)

На всякий случай, «каталог с пакетом» - это тот единственный каталог из архива с исходниками пакета orig.tar.xx.

gag ★★★★★
()

Иногда, когда совсем всё сложно и без патчинга никак (по крайней мере, мне - нубу в дистростроении, пересборке пакетов и прочем), то я пользуюсь таким вариантом:

1) sudo apt-get install build-essential fakeroot devscripts
2) sudo apt-get build-dep packagename (установить зависимости для сборки нужного пакета)
3) apt-get source packagename (стянуть сорцы нужного пакета)
4) cd packagename/
5) dpkg-checkbuilddeps (еще раз чекнуть зависимости)
6) пропатчить вручную нужные файлы, имея сам патч (да, тупо руками в коде)
7) debuild -b -uc -us (пересборка пакета)
8) sudo dpkg -i packagename.deb
9) PROFIT

Это конечно если правок не тысячи строк, а одна-две-три.

Gonzo ★★★★★
()

всем спасибо за ответы

xperious ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.