По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Knoppix

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

Аватара пользователя
жучара
Сообщения: 1060
ОС: астралинукс

По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Сообщение жучара »

Друзья! Ели у нас есть исходники пакета, например, foo, и мы из них собрали файл
foo_1-1_amd64.deb

А потом вдруг задумаем повторить сборку несколько раз подряд, а инкремент решим доверить умной утилите dch, то у нас такие вот файлы получатся:

Shell

$ ls -1tr *.deb
foo_1-1_amd64.deb
foo_1-1.1_amd64.deb
foo_1-2_amd64.deb
foo_1-3_amd64.deb
foo_1-4_amd64.deb
foo_1-5_amd64.deb
foo_1-6_amd64.deb
foo_1-7_amd64.deb
foo_1-8_amd64.deb
foo_1-9_amd64.deb
foo_1-10_amd64.deb
foo_1-11_amd64.deb
$
То есть сперва 1-1, потом 1-1.1 (ну допустим), а потом 1-2, 1-3 и так далее. В чём прикол вставляния в это аккуратный ряд цифр 1-1.1, я не пойму?

Подробнее. Нужно, конечно эксперементировать с пакетом hello, но он не так прост. Поэтому кропать будем свой пакет foo. Тезисно:
1) Кропаем исходники пакета foo
2) Потом переделываем эти исходники под debian с помощью утилиты debmake (она приводит их к стандарту debian, что ли, не знаю, как сказать)
3) Потом кропаем из исходников файл *.deb. Естественно, он будет иметь определённую версию
4) А потом пересобирываем пакет, а версию увеличиваем с помощью dch -i и смотрим, как она работает.

Команды такие:

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

rm -rf *
mkdir foo-1
tar -czf foo-1.tar.gz foo-1
cd foo-1
debmake
debuild
То есть в папке foo-1 у нас будут хранятся исходники пакета и она пустая для простоты. И надо чтобы такой формат имела. mkdir foo не сканает. Смотрим, что получилось:

Shell

$ ls ../*.deb
../foo_1-1_amd64.deb
$
foo_1-1_amd64.deb целевой файл, умный сборщик добавил к нему редакцию. Пересоберём пакет (предложит написать коммент, напишем):

Shell

$ dch -i
dch warning: neither DEBEMAIL nor EMAIL environment variable is set
dch warning: building email address from username and mailname
dch: Did you see those 2 warnings? Press RETURN to continue...

$
$ debuild
...
$
Смотрим, что получилось:

Shell

$ ls -1rt ../*.deb
../foo_1-1_amd64.deb
../foo_1-1.1_amd64.deb
$
Ну и несколько раз так если пересоберём пакет, начиная с команды dch -i, то получим такую картину; ещё раз:

Shell

$ ls -1tr ../*.deb
../foo_1-1_amd64.deb
../foo_1-1.1_amd64.deb
../foo_1-2_amd64.deb
../foo_1-3_amd64.deb
../foo_1-4_amd64.deb
../foo_1-5_amd64.deb
../foo_1-6_amd64.deb
../foo_1-7_amd64.deb
../foo_1-8_amd64.deb
../foo_1-9_amd64.deb
../foo_1-10_amd64.deb
../foo_1-11_amd64.deb
$
Вот, собсно и всё. 1-1.1 как аппендикс выглядит. Сабж. На всякий случай:

Shell

$ dch --help
Usage: dch [options] [changelog entry]
Options:
...
-i, --increment
Increase the Debian release number, adding a new changelog entry
...
$


Debian 12. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21180
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Сообщение Bizdelnick »

Как changelog-то в итоге выглядит?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1060
ОС: астралинукс

Re: По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Сообщение жучара »

Bizdelnick писал:
29.03.2025 14:18
Как changelog-то в итоге выглядит?
да как ему и положено, наверное. Если сделали файл foo_1-1.1_amd64.deb, то

Shell

cat debian/changelog
foo (1-1.1) UNRELEASED; urgency=low

* Initial release. Closes: #nnnn
<nnnn is the bug number of your ITP>
* qqq

-- user <user@debian> Sat, 29 Mar 2025 14:56:29 +0500
$
Нынешеняя ситуация: сделали файл foo_1-2_amd64.deb (а, напоминаю, файл foo_1-2_amd64.deb следующий за файлом foo_1-1.1_amd64.deb ПОЧЕМУ-ТО), тогда:

Shell

cat debian/changelog
foo (1-2) UNRELEASED; urgency=low

* Initial release. Closes: #nnnn
<nnnn is the bug number of your ITP>
* qqq
*

-- user <user@debian> Sat, 29 Mar 2025 15:00:49 +0500
$
и так далее.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21180
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Сообщение Bizdelnick »

А в самом начале, для 1-1?
Добавлено (15:21):
Вообще перед сборкой релизной версии пакета надо делать dch -r. Без этого дальнейший запуск dch -i — довольно бессмысленное действие.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1060
ОС: астралинукс

Re: По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Сообщение жучара »

Bizdelnick,
Отвечая на ваш вопрос, сразу после команд
rm -rf *
mkdir foo-1
tar -czf foo-1.tar.gz foo-1
cd foo-1
debmake
debuild
Вот содержание debian/changelog

Shell

$ cat debian/changelog
foo (1-1) UNRELEASED; urgency=low

* Initial release. Closes: #nnnn
<nnnn is the bug number of your ITP>

-- user <> Sun, 30 Mar 2025 13:14:59 +0500
$
Теперь далее. Если перед использовать команду dch -r, ну то есть: dch -r, dch -i, и далее debuild, то соберётся версия 1-2, то есть версия 1-1.1 будет минована. Ну и дальше 1-3, 1-4 и так далее (для простоты руками ничего не правим, просто сохраняем файлы и всё debian/changelog). Это то, что мне нужно, но это же и странно потому что, а какая разница, скомандуем мы dch -r или нет? А разница проявляется в содержании файла debian/changelog и она ничтожна.

-------------------------------------------------------

Итак, сделали первую сборку (набрали выше приведённый набор команд) затем dch -r. Смотрим debian/changelog:

Shell

$ cat debian/changelog
foo (1-1) unstable; urgency=low

* Initial release. Closes: #nnnn
<nnnn is the bug number of your ITP>

-- user <user@debian> Sun, 30 Mar 2025 13:33:39 +0500
$
В дальнейшем (dch -i, debuild) соберётся версия 1-2

Теперь делаем первую сборку, но не командуем dch -r. Смотрим debian/changelog:

Shell

$ cat debian/changelog
foo (1-1) UNRELEASED; urgency=low

* Initial release. Closes: #nnnn
<nnnn is the bug number of your ITP>

-- user <> Sun, 30 Mar 2025 13:38:24 +0500
$
Получается, всё, что делает dch -r это добавляет мыло. Если мыло есть, версия 1-1.1 будет пропущена. Если мыла нет, то будет версия 1-1.1

И да, если мыло добавить руками, то есть dch -r не командовать, а просто вручную дописать, тогда тоже после dch -i версия 1-1.1 будет минована.

Получается, всё определяет мыло и чтобы его вставить, надо скомандовать dch -r

Наверное, надо так.

Ну и да, использование dch -r после нескольких раз даёт правильный, что ли файл debian/changelog:
если использовать dch -r
foo (1-4) UNRELEASED; urgency=medium

*

-- user <user@debian> Sun, 30 Mar 2025 14:13:04 +0500

foo (1-3) unstable; urgency=medium

*

-- user <user@debian> Sun, 30 Mar 2025 14:12:57 +0500

foo (1-2) unstable; urgency=medium

*

-- user <user@debian> Sun, 30 Mar 2025 14:12:13 +0500

foo (1-1) unstable; urgency=low

* Initial release. Closes: #nnnn
<nnnn is the bug number of your ITP>

-- user <user@debian> Sun, 30 Mar 2025 14:11:34 +0500
если не использовать dch -r
foo (1-4) UNRELEASED; urgency=low

* Initial release. Closes: #nnnn
<nnnn is the bug number of your ITP>
*
*
*
*

-- user <user@debian> Sun, 30 Mar 2025 14:17:35 +0500
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21180
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Сообщение Bizdelnick »

жучара писал(а):
30.03.2025 12:22
Получается, всё, что делает dch -r это добавляет мыло.
Нет, не всё, читайте документацию. Эта команда также заменяет UNRELEASED на кодовое имя дистрибутива, в результате чего при последующих запусках dch будут добавляться новые записи в changelog, а не правиться последняя. То, что добавляется мыло, — это побочный эффект обновления строки с временной меткой, видимо. Чтобы туда подставлялось что-то разумное, нужно задать переменные окружения DEBFULLNAME и DEBEMAIL. Если бы они были заданы перед запуском debmake, по идее, строка сразу была бы сформирована корректно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1060
ОС: астралинукс

Re: По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Сообщение жучара »

Bizdelnick писал:
31.03.2025 14:10
жучара писал(а):
30.03.2025 12:22
Получается, всё, что делает dch -r это добавляет мыло.
Нет, не всё, читайте документацию. Эта команда также заменяет UNRELEASED на кодовое имя дистрибутива, в результате чего при последующих запусках dch будут добавляться новые записи в changelog, а не правиться последняя. То, что добавляется мыло, — это побочный эффект обновления строки с временной меткой, видимо. Чтобы туда подставлялось что-то разумное, нужно задать переменные окружения DEBFULLNAME и DEBEMAIL. Если бы они были заданы перед запуском debmake, по идее, строка сразу была бы сформирована корректно.
да, согласен, не заметил замены UNRELEASED на unstable.
...В общем, возвращаясь к вопросу- По какому принципу утилита dch инкременирует версию (редакцию) пакета?- (сейчас я бы тут написал dch -i, конечно)- принцип, такой. Вытекает из наблюдений.

Итак, файл debian/changelog. Применим к нему dch -i. Ничего не меняем, со всем соглашаемся:
Исходные значения в файле debian/changelog Итоговые значения в файле debian/changelog
Версия/редакция 23-40.18, мыло есть Версия/редакция 23-41, мыло есть
Версия/редакция 23-40.18, мыла нет Версия/редакция 23-40.19, мыло есть
Версия/редакция 23-40, мыло есть Версия/редакция 23-41, мыло есть
Версия/редакция 23-40, мыла нет Версия/редакция 23-40.1, мыло есть
Это может быть полезно если мы хотим управлять версией/редакцией пакета (есть точка или нет точки). Вручную надо будет удалять тогда мыло. В dch -i это не предусмотрено. И да, dch -i не добавляет пункт в debian/changelog, а изменяет самый верхний (самый последний), но это уже другая история.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21180
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: По какому принципу утилита dch инкременирует версию (редакцию) пакета?

Сообщение Bizdelnick »

жучара писал(а):
02.04.2025 11:15
Это может быть полезно если мы хотим управлять версией/редакцией пакета (есть точка или нет точки). Вручную надо будет удалять тогда мыло. В dch -i это не предусмотрено.
Не надо удалять мыло. Достаточно использовать опцию --nmu/-n. И ещё кучу интересных опций можно узнать из man debchange.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: