Я установил рабочий pbuilder
набор инструментов для сборки пакетов Debian в i386
и amd64
разновидностях для Ubuntu. Я использую reprepro
для управления своим собственным репозиторием apt и dupload
для загрузки в него файлов .changes
, .dsc
, .deb
, .orig.tar.gz
и .debian.tar.gz
. Все это хорошо задокументировано и работает.
Но я не могу загрузить версию i386
одного пакета вместе с версией amd64
того же пакета. Представитель жалуется следующим сообщением:
File "pool/main/p/package/package_1.0.dsc" is already registered with different checksums!
Источник сгенерированных двоичных пакетов i368
и amd64
точно такой же и не был изменен мной. Как может быть, что существует другая контрольная сумма?
Я исследовал и обнаружил, что разница контрольной суммы файла .dsc
заключается в том, что он содержит различную контрольную сумму файла package_1.0.debian.tar.gz
.
Дальнейшие исследования показали, что файл package_1.0.debian.tar.gz
действительно имеет разные контрольные суммы каждый раз, когда dpkg-buildpackage
вызывается набором инструментов сборки Debian. Причина в том, что он изменяет время модификации подкаталога /debian
пакета Debian. К сожалению, программа tar
включает время модификации в результирующий архив, что приводит к различным контрольным суммам при каждом запуске цепочки инструментов.
Итак, мой вопрос: как я могу запретить dpkg-buildpackage
изменять дату модификации каталога /debian
при сборке пакета Debian?
Если бы я мог это сделать, то контрольная сумма файлов package_1.0.debian.tar.gz
и package_1.0.dsc
останутся постоянными, и я могу безболезненно загрузить в reprepro
.
Я не совсем в той же ситуации, что и вы, но, надеюсь, мой ответ может указать на то, что вам нужно.
Вместо того, чтобы использовать pbuilder
, я в настоящее время использую несколько chroot для сборки пакетов на amd64
и i386
. Я генерирую .dsc вне chroot, используя debuild -S
, затем копирую соответствующие файлы в chroots. Я понимаю, что это не лучший способ сделать это.
Внутри первого chroot я запускаю dpkg-buildpackage -b
для сборки бинарных пакетов. Во втором chroot я запускаю dpkg-buildpackage -B
, чтобы собирать только пакеты, зависящие от архитектуры - то есть те, которые не дублируются.
Когда я использую reprepro
для отправки пакетов в репозиторий, .debs из первого chroot (i386) с целевым «all» копируются во все архитектуры, а также i386
, копируемые в i386
. ]. Когда я выталкиваю пакеты из второго chroot (amd64), остальные зависимые от архитектуры debs или amd64
копируются.
Вы можете попробовать переопределить команду tar и добавить к ней аргумент --mtime=some_fixed_time
.
Afaict Вы не можете действительно.
debian упаковочная система использует "debian" каталог и в качестве места для хранения длительного срока метаданных пакета и в качестве места для хранения различных артефактов сборки временно во время процесса сборки. Был набор работы над созданием здания Двоичных восстанавливаемых пакетов, но я не услышал ни о каких подобных усилиях для исходных пакетов.
надлежащее решение Ваших ошибок состоит в том, чтобы только создать исходный пакет и дугу все двоичные пакеты однажды. Для pbuilder Вы хотите "-двоичная дуга" опция.