如何基于多架构二进制文件生成对应Deb包并适配Launchpad自动架构检测构建
如何基于多架构二进制文件生成对应Deb包并适配Launchpad自动架构检测构建
嗨,我完全get到你的需求——现在你给numbat维护PPA包,目前只适配了amd64架构的二进制,想在同一个仓库里存放多架构的二进制文件,让Launchpad在构建Deb包时自动识别当前架构,把对应版本的numbat拷贝到/usr/bin目录下对吧?这绝对可行,我给你分享两个实用的落地方案:
方案一:给debian/install脚本加架构判断逻辑
debian/install其实支持通过环境变量做分支判断,Launchpad在构建不同架构的包时,会自动设置DEB_HOST_ARCH这个环境变量,我们可以利用它来动态选择二进制文件:
先在项目根目录整理二进制文件的存放结构,比如建一个
binaries文件夹,把不同架构的二进制按架构名归类:binaries/amd64/numbatbinaries/arm64/numbat- 其他你需要适配的架构文件都按这个格式放
把原来的
debian/install换成带判断逻辑的脚本:
#!/bin/bash # 获取当前构建的架构 CURRENT_ARCH="$DEB_HOST_ARCH" # 检查对应架构的二进制是否存在,存在就复制到目标目录 if [ -f "binaries/$CURRENT_ARCH/numbat" ]; then binaries/$CURRENT_ARCH/numbat usr/bin/ else echo "错误:未找到适配当前架构 $CURRENT_ARCH 的numbat二进制文件" >&2 exit 1 fi # 图标和.desktop文件如果是跨架构通用的,直接按原来的方式复制即可 path/to/your/icon-file usr/share/icons/hicolor/48x48/apps/ path/to/your-app.desktop usr/share/applications/
- 最后别忘了给这个脚本加上可执行权限,在仓库里运行
chmod +x debian/install,然后把修改提交到你的deb-package-ppa分支就好。
方案二:用debian/rules的架构变量(更贴合Debian打包规范)
如果你想更贴合官方的Debian打包标准,可以在debian/rules里通过makefile的变量来实现:
同样先整理二进制文件的存放结构,比如在
debian目录下建对应架构的子文件夹:debian/binary-amd64/numbatdebian/binary-arm64/numbat
修改
debian/rules文件,添加override_dh_install的逻辑,用来动态复制对应架构的二进制:
override_dh_install: dh_install # 复制当前架构对应的二进制文件到安装目录 install -m 755 debian/binary-$(DEB_HOST_ARCH)/numbat $(CURDIR)/debian/numbat/usr/bin/
这里的$(DEB_HOST_ARCH)是makefile会自动获取的架构变量,Launchpad构建时会自动填充为当前正在构建的架构名称,完全不用手动干预。
几个要注意的细节
- 一定要提前测试每个架构的二进制文件能不能正常运行,可以用对应架构的虚拟机或者容器先验证一遍,避免Launchpad构建出的包无法使用
- 所有架构的二进制文件名要保持一致,这样脚本和rules里的逻辑不用频繁修改
- 如果某个架构你暂时不想支持,记得在判断逻辑里加容错,或者直接不在Launchpad的构建选项里勾选该架构,不然会触发构建失败
- 图标、.desktop这类跨架构通用的资源,直接按原来的方式复制就行,不用按架构拆分
备注:内容来源于stack exchange,提问作者Archisman Panigrahi
相关产品推荐
相关产品推荐

