我正在为 Debian 构建一个自定义包,然后打算将其部署到其他机器上。为了简单起见,我只是.deb
直接使用dpkg -i
.
根据Debian 政策手册您可以使用特殊词all
来表示独立于体系结构的包,以及any
可以为任意数量的不同体系结构构建的依赖于体系结构的包。
因此,我已经Architecture: any
在控制文件中写入了内容,但是当我去安装该软件包时,出现以下错误:
package architecture (any) does not match system (amd64)
为什么要为架构创建包any
?这不是一个独立于体系结构的包(这就是我没有编写 的原因all
),因此它看起来dpkg
不会替换any
为编译包所针对的体系结构。
指定包是特定于平台的但可以为所有可用平台构建的正确方法是什么?我不想列出所有这些,有数百个!
更新:构建过程很简单configure && make && make install PREFIX=/xyz
,然后我用fakeroot dpkg -b /xyz /output
是否有一种标准方法可以自动用当前体系结构替换“任何”,或者我应该使用它sed
来修改控制文件?
答案1
问题是您正在创建原始包,而包中没有任何构建它们的工具dpkg-dev
。生成二进制包的常用方法是使用源包,其中包含主控制文件,其中any
是有效的体系结构,然后将其转换为正确的体系结构,dpkg-gencontrol
并从debian/rules
.
无论如何,我建议您阅读开发人员参考或类似文档中有关打包的内容,无论您决定进行标准打包还是决定从头开始重新实现它。