一开始使用交叉编译链完成了不同架构代码的编译,但使用dpkg工具打包时,需要在对应的架构上打包,无法在ubuntu环境(x86_64)上出arm64架构的deb安装包,在网上调研了一下,发现fpm工具可以实现跨平台打包,在此记录一下使用到的fpm命令参数
在终端可以执行fpm --help或fpm -h
查看各参数用法,也可以在fpm官方资料查看命令行参数含义
fpm打包
下面是一个最简单的打包例子,其他参数可以参考文档自行添加
fpm -s dir -t deb -n packageName -C ./package/ -v version --architecture arm64
参数 | 含义 |
---|---|
-s dir | 指定打包的对象是一个目录 |
-t deb | 指定想要创建的安装包类型 (deb, rpm, solaris, etc) |
-n packageName | 安装包名称 |
-C ./package/ | 在搜索文件前,把目录更改到这里,需要打包的目录 |
-v version | 安装包版本号(default: 1.0) |
--architecture arm64 | 指定架构名称 |
-f | 强制覆盖已存在文件(default: false) |
–architecture官方给出解释是在目标机器上使用uname -m
命令进行查询,该命令与dpkg --print-architecture
获取到的结果不同,以下是两个命令在一些常用机器上获取到的结果,在测试时,其他环境使用两个结果都没有问题,只有mips64
有差异,使用mips64
创建的包无法在机器上正常安装,架构需要指定mips64el
才可以正常安装,该差异仅供参考,我使用的架构名称均是dpkg --print-architecture
的结果,出包后测试正常
uname -m/dpkg --print-architecture
aarch64/arm64 mips64/mips64el x86_64/amd64 sw_64/sw_64 loongarch64/loongarch64
deb安装包使用到的特殊参数
- 指定安装/卸载前后脚本
参数 | 含义 |
---|---|
--post-install FILE | 包安装后调用的脚本文件 |
--pre-install FILE | 包安装前调用的脚本文件 |
--post-uninstall FILE | 包删除后调用的脚本文件 |
--pre-uninstall FILE | 包删除前调用的脚本文件 |
--after-install FILE | 同--post-install FILE |
--before-install FILE | 同 --pre-install FILE |
--after-remove FILE | 同 --post-uninstall FILE |
--before-remove FILE | 同--pre-uninstall FILE |
- 指定压缩方式
参数 | 含义 |
---|---|
(deb only) --deb-compression COMPRESSION | 指定安装包的压缩方式 (只能是gz, bzip2, xz, none) |
- 使用自定义的
control
文件
在不指定control文件时,fpm工具会生成默认的control文件,保存安装包的基本信息
参数 | 含义 |
---|---|
(deb only) --deb-custom-control FILEPATH | 指定自定义control文件 |
- 使用自定义的
conffiles
文件
在不指定conffiles文件时,fpm工具默认将所有需要放到/etc
目录下的文件添加至conffiles文件中,如果需要自定义一些目录,则在禁用默认行为后,自己单独添加
参数 | 含义 |
---|---|
(deb only) --deb-no-default-config-files | 禁用该默认行为,不把/etc文件目录添加至conffiles文件中 |
--config-files | 自行标记一个目录添加至conffiles文件中,可以多次追加文件 |