Как пересобрать изменённый пакет? (действуем строго по науке)

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
жучара
Сообщения: 208
ОС: minix 3.1.0

Как пересобрать изменённый пакет?

Сообщение жучара » 13.05.2019 22:19

Друзья! Наука это вот эта вот книга
https://www.debian.org/doc/manuals/maint-guide/index.ru.html

Собирать будем этот пакет
hello-2.1.1
(http://s.arboreus.com/2006/11/blog-post_16.html)

1) Распакуем архив *tar.gz и зачем-то выполним команду dh_make (пункт 2.8 книги)

Shell

user@debian:~/Desktop$
user@debian:~/Desktop$ cd hello
user@debian:~/Desktop/hello$ wget ftp://ftp.gnu.org/pub/gnu/hello/hello-2.1.1.tar.gz > /dev/null
--2019-05-14 00:06:43-- ftp://ftp.gnu.org/pub/gnu/hello/hello-2.1.1.tar.gz
=> «hello-2.1.1.tar.gz»
Распознаётся ftp.gnu.org (ftp.gnu.org)… 209.51.188.20, 2001:470:142:3::b
Подключение к ftp.gnu.org (ftp.gnu.org)|209.51.188.20|:21... соединение установлено.
Выполняется вход под именем anonymous ... Выполнен вход в систему!
==> SYST ... готово. ==> PWD ... готово.
==> TYPE I ... готово. ==> CWD (1) /pub/gnu/hello ... готово.
==> SIZE hello-2.1.1.tar.gz ... 389363
==> PASV ... готово. ==> RETR hello-2.1.1.tar.gz ... готово.
Размер (байт): 389363 (380K) (не достоверно)

hello-2.1.1.tar.gz 100%[============================================================>] 380,24K 362KB/s за 1,1s

2019-05-14 00:06:48 (362 KB/s) - «hello-2.1.1.tar.gz» сохранён [389363]

user@debian:~/Desktop/hello$ tar -xzf hello-2.1.1.tar.gz
user@debian:~/Desktop/hello$ cd hello-2.1.1/
user@debian:~/Desktop/hello/hello-2.1.1$ dh_make -f ../hello-2.1.1.tar.gz

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
[s/i/m/l/k/n] s

Maintainer name : user
Email-Address : user@debian
Date : Tue, 14 May 2019 00:07:34 +0500
Package Name : hello
Version : 2.1.1
License : blank
Type of Package : Single
Hit <enter> to confirm:
Done. Please edit the files in the debian/ subdirectory now. hello
uses a configure script, so you probably don't have to edit the Makefiles.
user@debian:~/Desktop/hello/hello-2.1.1$
dh_make, я так понял, зачем-то генерит папку debian, ну, видать, надо так.

2) Поправим исходники. В книге (пункт 3.2) правкой исходного кода называется почему-то правка Makefile. Мы же на самом деле будем править исходники.

Shell

user@debian:~/Desktop/hello/hello-2.1.1$ kate src/hello.c
Чё-нибудь допишем:

Код: Выделить всё

int main (argc, argv)
     int argc;
     char *argv[];
{
  printf ("cafebabe\n")
  ...	
Файл hello.c сохраняем

3) Теперь пересоберём пакет. (Пункт 6.1 книги.)
Сперва посмотрим, все ли сборочные завиимости удовлетворены:

Shell

user@debian:~/Desktop/hello/hello-2.1.1$
user@debian:~/Desktop/hello/hello-2.1.1$ cat debian/control | grep Build-Depends:
Build-Depends: debhelper (>= 9), autotools-dev
user@debian:~/Desktop/hello/hello-2.1.1$ dpkg -l | grep debhelper
ii debhelper 9.20150101+deb8u2 all helper programs for debian/rules
user@debian:~/Desktop/hello/hello-2.1.1$ dpkg -l | grep autotools-dev
ii autotools-dev 20140911.1 all Update infrastructure for config.{guess,sub} files
user@debian:~/Desktop/hello/hello-2.1.1$
user@debian:~/Desktop/hello/hello-2.1.1$ cat debian/control | grep Build-Depends-indep:
user@debian:~/Desktop/hello/hello-2.1.1$
Собственно пересборка:

Shell

user@debian:~/Desktop/hello/hello-2.1.1$
user@debian:~/Desktop/hello/hello-2.1.1$ dpkg-buildpackage -us -uc
dpkg-buildpackage: пакет исходного кода hello
dpkg-buildpackage: версия исходного кода 2.1.1-1
dpkg-buildpackage: дистрибутив исходного кода unstable
dpkg-buildpackage: исходный код изменён user <user@debian>
dpkg-buildpackage: архитектура узла amd64
dpkg-source --before-build hello-2.1.1
fakeroot debian/rules clean
dh clean --with autotools-dev
dh_testdir
dh_auto_clean
dh_autotools-dev_restoreconfig
dh_clean
dpkg-source -b hello-2.1.1
dpkg-source: инфо: используется формат исходника «3.0 (quilt)»
dpkg-source: инфо: сборка hello с использованием существующего ./hello_2.1.1.orig.tar.gz
dpkg-source: инфо: обнаружены локальные изменения, изменённые файлы:
hello-2.1.1/src/hello.c
dpkg-source: инфо: вы можете встроить локальные изменения в dpkg-source --commit
dpkg-source: ошибка: прерывание работы из-за неожиданных изменений авторского кода, смотрите /tmp/hello_2.1.1-1.diff.YzN34b
dpkg-buildpackage: ошибка: dpkg-source -b hello-2.1.1 возвратил код ошибки 2
user@debian:~/Desktop/hello/hello-2.1.1$
Пишут, что hello.c изменён, а то я не знал.
А если ничё не менять, то собирается нормально

Shell

user@debian:~/Desktop/hello/hello-2.1.1$ uname -a
Linux debian 3.16.0-6-amd64 #1 SMP Debian 3.16.57-2 (2018-07-14) x86_64 GNU/Linux
user@debian:~/Desktop/hello/hello-2.1.1$
Спасибо, кто откликнется.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15400
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Как пересобрать изменённый пакет?

Сообщение Bizdelnick » 13.05.2019 22:57

жучара писал(а):
13.05.2019 22:19
dh_make, я так понял, зачем-то генерит папку debian, ну, видать, надо так.
В руководстве подробно описано, зачем это надо.
жучара писал(а):
13.05.2019 22:19
Поправим исходники.
Вам надо не просто поправить исходники, а создать серию патчей (в данном случае — из одного-единственного патча) при помощи quilt. В руководстве это тоже подробно описано.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 208
ОС: minix 3.1.0

Re: Как пересобрать изменённый пакет?

Сообщение жучара » 19.05.2019 15:06

Bizdelnick писал:
13.05.2019 22:57
Вам надо не просто поправить исходники, а создать серию патчей (в данном случае — из одного-единственного патча) при помощи quilt. В руководстве это тоже подробно описано.
там написано, что нужно изучить man quilt
О том, как использовать quilt, читайте в quilt(1) и /usr/share/doc/quilt/quilt.pdf.gz
Ну ладно.
man quilt
quilt(1) quilt(1)

....
Patch files are located in the patches sub-directory of the source tree (see EXAMPLE OF WORKING TREE below). The QUILT_PATCHES environment variable can be used to override this location. The patches directory may contain sub-directories. It may also be a symbolic link instead of a directory.
Ну так-то всё понятно. Переменная QUILT_PATCHES, указывающая на сущестствующую папку, определяет, куда все эти патчи будут пихаться. Тем более и в книжке она определяется ( в приведённом скрипте)

Shell

# if in Debian packaging tree with unset $QUILT_PATCHES
QUILT_PATCHES="debian/patches"
А попробовать?

++++++++++++++++++++++++++++++++++++++++++++++++++++

Пакет тот же самый. Находимся в корне дерева или где там. Посмотрим, а папка pathes существует вообще?

Shell

user@debian:~/hello/hello-2.1.1$
user@debian:~/hello/hello-2.1.1$ find . | grep patches
user@debian:~/hello/hello-2.1.1$
Не существует. Создадим папку debian/patches (прямо как в книге)

Shell

user@debian:~/hello/hello-2.1.1$
user@debian:~/hello/hello-2.1.1$ mkdir -p debian/patches
user@debian:~/hello/hello-2.1.1$
Теперь так:

Shell

user@debian:~/hello/hello-2.1.1$
user@debian:~/hello/hello-2.1.1$ QUILT_PATCHES="debian/patches"
user@debian:~/hello/hello-2.1.1$
Ну и патч добавим:

Shell

user@debian:~/hello/hello-2.1.1$
user@debian:~/hello/hello-2.1.1$ quilt new patch1
Патч patch1 теперь наверху
user@debian:~/hello/hello-2.1.1$
А теперь ещё раз поищем папку patches

Shell

user@debian:~/hello/hello-2.1.1$
user@debian:~/hello/hello-2.1.1$ find . | grep patches
./.pc/.quilt_patches
./.pc/applied-patches
./patches
./patches/series
./debian/patches
user@debian:~/hello/hello-2.1.1$
Вот то-то и оно. Наша переменная QUILT_PATCHES вообще не имеет значения, оказывается, хотя в man-е написано обратное. В общем, quilt совсем не обращает на неё внимания и знай создаёт свою папку ./patches, куда в дальнейшем и пихает патчи (проверено). А должна их пихать в папку ./debian/patches

ЧЯДНТ?
Спасибо сказали: