我已经建立了一个工作的pbuilder工具链,用于在Ubuntu中构建Debian软件包的i386和amd64版本。我正在使用reprepro来管理自己的私有apt仓库,并使用dupload将.changes、.dsc、.deb、.orig.tar.gz和.debian.tar.gz文件上传到其中。所有这些都有很好的文档记录,并且可以正常工作。
但是,我无法同时上传同一个软件包的i386版本和amd64版本。Reprepro报错并显示以下信息:
生成的i368和amd64二进制包的源代码完全相同,没有被我修改过。为什么会有不同的校验和呢?
经过调查,我发现.dsc文件的校验和差异是因为它包含了package_1.0.debian.tar.gz文件的不同校验和。
进一步的调查显示,每次通过debian构建工具链调用dpkg-buildpackage时,package_1.0.debian.tar.gz文件的校验和确实是不同的。原因是它会改变Debian软件包的/debian子目录的修改时间。不幸的是,tar程序将修改时间包含在生成的存档中,导致每次运行工具链时都会得到不同的校验和。
所以,我的问题是:在构建Debian软件包时,如何防止dpkg-buildpackage修改/debian目录的修改日期?
如果我能做到这一点,文件
但是,我无法同时上传同一个软件包的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文件的不同校验和。
进一步的调查显示,每次通过debian构建工具链调用dpkg-buildpackage时,package_1.0.debian.tar.gz文件的校验和确实是不同的。原因是它会改变Debian软件包的/debian子目录的修改时间。不幸的是,tar程序将修改时间包含在生成的存档中,导致每次运行工具链时都会得到不同的校验和。
所以,我的问题是:在构建Debian软件包时,如何防止dpkg-buildpackage修改/debian目录的修改日期?
如果我能做到这一点,文件
package_1.0.debian.tar.gz
和 package_1.0.dsc
的校验和将保持不变,我就可以轻松地上传到 reprepro
。