如何防止 dpkg-buildpackage 在构建 Debian 包时修改 /debian 目录的修改日期?

如何防止 dpkg-buildpackage 在构建 Debian 包时修改 /debian 目录的修改日期?

我已经设置了一个工作工具链,pbuilder用于在 Ubuntu 中构建 Debian 软件包i386amd64各种软件包。我用它reprepro来管理我自己的私人 apt 存储库,dupload并将 、 、 和 文件上传.changes.dsc其中.deb。所有这些都有据可查,而且很有效。.orig.tar.gz.debian.tar.gz

但我无法将i386一个软件包的版本与amd64同一个软件包的版本一起上传。Reprepro 发出以下抱怨:

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 build 工具链调用时确实有不同的校验和。原因是它更改了/debianDebian 软件包子目录的修改时间。tar不幸的是,该程序将修改时间包含在生成的存档中,导致每次运行工具链时都会产生不同的校验和。

所以,我的问题是:如何防止在构建 Debian 包时dpkg-buildpackage修改目录的修改日期?/debian

如果我能做到这一点,文件的校验package_1.0.debian.tar.gzpackage_1.0.dsc将保持不变,我可以轻松地上传到reprepro

答案1

我的情况和你不完全相同,但希望我的回答能够指出你的需要。

我目前使用多个 chroot 来构建和pbuilder上的软件包,而不是使用。我使用在 chroot 之外生成 .dsc ,然后将相应的文件复制到 chroot。我意识到这不是最好的方法。amd64i386debuild -S

在第一个 chroot 中,我运行dpkg-buildpackage -b来构建二进制包。在第二个 chroot 中,我运行dpkg-buildpackage -B,仅构建与体系结构相关的包 - 即那些没有重复的包。

当我使用reprepro将软件包推送到我的 repo 时,来自第一个 chroot (i386) 的 .debs 目标为“all”,以及i386复制到的 debs 将被复制到所有体系结构i386。当我从第二个 chroot (amd64) 推送软件包时,其余体系结构相关的 debs 或amd64将被复制。

答案2

您可以尝试覆盖 tar 命令并向--mtime=some_fixed_time其中添加参数。

答案3

据我所知你确实不能。

Debian 打包系统使用“debian”目录作为长期存储软件包元数据的地方,以及在构建过程中临时存储各种构建工件的地方。已经进行了大量工作来使二进制软件包的构建可重复,但我还没有听说任何针对源软件包的类似努力。

解决您错误的正确方法是仅构建源包和 arch 所有二进制包一次。然后对于第二个体系结构,您应该仅构建依赖于体系结构的二进制包。对于 pbuilder,您需要“--binary-arch”选项。

相关内容