![在本地构建多架构软件包](https://linux22.com/image/1132441/%E5%9C%A8%E6%9C%AC%E5%9C%B0%E6%9E%84%E5%BB%BA%E5%A4%9A%E6%9E%B6%E6%9E%84%E8%BD%AF%E4%BB%B6%E5%8C%85.png)
这是我第一次尝试为不同的架构构建 debian/ubuntu 软件包。为此,我决定使用 pbuilder,使用来自的 .pbuilderrc 脚本https://jodal.no/2015/03/08/building-arm-debs-with-pbuilder/。然后,我使用dpkg-buildpackage -S
或dpkg-source -b
创建 .dsc 文件。使用此文件,我调用
sudo OS=ubuntu DIST=trusty ARCH=amd64 pbuilder --build $dscfile
sudo OS=ubuntu DIST=trusty ARCH=armhf pbuilder --build $dscfile
问题是 pbuilder 似乎重新打包了 .debian.tar.gz 文件(并更改为 .xz)并重新创建了 .dsc 文件。两个 tar 文件的内容相似,只有权限和时间戳发生了变化,在 .dsc 文件中我看到了细微的变化以及不同的校验和:
- libpj2 deb comm optional
+ libpj2 deb comm optional arch=any
- b42ddedc2d8b210ec10b4db4271997569aab448d 29942 pjproject_2.1.0.0.ast20130823-1.test20.debian.tar.gz
+ 11646618842914086b78ce0e191f6e2cfbe0965d 25548 pjproject_2.1.0.0.ast20130823-1.test20.debian.tar.xz
现在,问题是我无法将这两次构建的结果放入reprepro
存储库:
#reprepro -Vb . includedsc trusty $dscfile
reprepro -Vb . include trusty /var/cache/pbuilder/ubuntu-trusty-amd64/result/*.changes
reprepro -Vb . include trusty /var/cache/pbuilder/ubuntu-trusty-armhf/result/*.changes
因为它不接受.dsc 文件的不同校验和:
File "pool/test/p/pjproject/pjproject_2.1.0.0.ast20130823-1.test20.debian.tar.xz" is already registered with different checksums!
md5 expected: 2f5bcb162dedd309a9d9ecba733d1036, got: bc30e1f502f7b36c10e9709dfe75e60b
sha1 expected: 11646618842914086b78ce0e191f6e2cfbe0965d, got: 94c6ecebe07a93c7505058019b6f64a73a9625a5
sha256 expected: 0642aa4d78b1cc91d06cc6fe406380b76aa7de5fb26105ea052d447f36f65d19, got: cfa085ac5904eadc21a849958118ce597fe03d78fd8cc82f225c33cbcb663462
我现在的问题是:
- 我怎样才能避免重建源包?
- 对于构建这种多架构包来说,这是一个合理的工作流程吗?
- 有没有更好的方法,例如更好的交叉构建工具?
- 对于独立于架构的二进制包,我假设存在与源包类似的问题。我如何将它们集成到此工作流程中?
答案1
解决了。我的工作流程现在如下:
更新版本信息:
dch -i
构建源码包:
cd ulxmlrpcpp/
dpkg-buildpackage -S -sa
cd ../
构建。请注意,第一个调用有所不同,因为它还会生成与架构无关的二进制文件。我建议使用本机架构,因为它速度最快,而且如果出现错误,您不会浪费模拟时间:
sudo OS=debian DIST=jessie ARCH=amd64 pbuilder --build --pkgname-logfile --debbuildopts '-sa -b' ulxmlrpcpp_1.7.5-2.35.dsc
sudo OS=debian DIST=jessie ARCH=armhf pbuilder --build --pkgname-logfile --debbuildopts -B ulxmlrpcpp_1.7.5-2.35.dsc
添加到 repo(仅当以上所有步骤都成功时):
reprepro -Vb . include jessie ulxmlrpcpp_1.7.5-2.35_source.changes
reprepro -Vb . include jessie /var/cache/pbuilder/debian-jessie-armhf/result/ulxmlrpcpp_1.7.5-2.35_armhf.changes
reprepro -Vb . include jessie /var/cache/pbuilder/debian-jessie-amd64/result/ulxmlrpcpp_1.7.5-2.35_amd64.changes