3步用FPM一键打包跨平台deb/rpm安装包

43 次阅读 0 点赞 0 评论 6 分钟原创技术教程

告别手动部署烦恼,本教程手把手教你使用FPM工具,3步将脚本或应用打包成deb/rpm安装包。一键生成标准包,自动处理路径、权限与依赖,实现跨平台高效分发。

#运维自动化 #软件打包 #FPM #deb #rpm #Linux #DevOps
3步用FPM一键打包跨平台deb/rpm安装包

3步用FPM一键打包跨平台deb/rpm安装包

你遇到过这种场景吗?

上周给团队写了一个日志清理脚本,功能没问题,但分发的时候差点崩溃:

  • 给 Ubuntu 服务器的同事,得教他怎么放到 /usr/local/bin、怎么配 systemd 服务、怎么加环境变量
  • 给 CentOS 服务器的同事,又得重复一遍,路径和包管理命令还不一样
  • 测试环境的同事要装,预发环境的同事也要装……

每次部署都变成了「手把手教学」,效率极低,还容易遗漏步骤。

如果你也在用「拷贝文件 + 手动配环境」的方式分发内部工具或脚本,这篇教程就是为你写的。学完你只需要跑一条命令,就能把任意脚本或应用打包成标准的 deb/rpm 安装包,对方执行 apt install ./your-tool.deb 一行搞定,文件自动到位、权限自动设置、依赖自动声明。

一、安装 FPM

FPM 通过 RubyGems 分发,安装依赖简单。先用包管理器准备好 Ruby 和基础构建工具:

bash 复制代码
## Ubuntu / Debian
sudo apt update && sudo apt install -y ruby ruby-dev gcc make

## CentOS / RHEL / Rocky
sudo dnf install -y ruby ruby-devel gcc make

额外安装 gcc 和 make 是因为部分 Ruby gem 需要编译本地扩展,提前安装可避免后续报错。

接着通过 gem 安装 FPM:

bash 复制代码
sudo gem install fpm
fpm --version  # 验证安装,打印版本号即成功

选择 gem 而非系统包管理器是因为 FPM 更新频繁,gem 能提供较新稳定版且依赖冲突少。

二、准备文件目录结构

FPM 的打包逻辑是目录结构即安装路径。按目标路径创建文件树:

bash 复制代码
mkdir -p myapp/usr/local/bin myapp/etc/myapp
echo '#!/usr/bin/env python3\nprint("Health check OK")' > myapp/usr/local/bin/health-check
chmod +x myapp/usr/local/bin/health-check
echo '{"endpoint": "localhost:8080", "interval": 60}' > myapp/etc/myapp/health.conf

三、一键打包核心命令

打包为 deb(Debian/Ubuntu)

bash 复制代码
fpm -s dir -t deb \
  -n myapp-health \
  -v 1.0.0 \
  --description "Service health check tool" \
  -m "Your Name <you@example.com>" \
  -d "python3 >= 3.8" \
  --url "https://github.com/you/myapp" \
  --license "MIT" \
  -f \
  -C myapp \
  usr/local/bin/health-check etc/myapp/health.conf

关键参数说明:

  • -C myapp 切换工作目录,确保输出包内路径正确
  • -d 声明运行时依赖,安装时自动校验
  • --license 和 --url 写入包元数据便于溯源

执行后生成 myapp-health_1.0.0_amd64.deb。

打包为 rpm(CentOS/RHEL系)

仅需将 -t deb 改为 -t rpm,参数完全一致:

bash 复制代码
fpm -s dir -t rpm \
  -n myapp-health \
  -v 1.0.0 \
  --description "Service health check tool" \
  -m "Your Name <you@example.com>" \
  -d "python3 >= 3.8" \
  --license "MIT" \
  -f \
  -C myapp \
  usr/local/bin/health-check etc/myapp/health.conf

生成 myapp-health-1.0.0-1.x86_64.rpm。

四、安装验证与常见问题

安装验证

bash 复制代码
## Debian/Ubuntu
sudo dpkg -i myapp-health_1.0.0_amd64.deb

## CentOS/RHEL(推荐用 dnf 自动解依赖)
sudo dnf install -y ./myapp-health-1.0.0-1.x86_64.rpm

验证安装结果:

bash 复制代码
$ health-check
Health check OK
$ ls /etc/myapp/health.conf
/etc/myapp/health.conf

常见踩坑提醒

  1. rpmbuild: command not found
    缺 rpm-build 工具:sudo dnf install -y rpm-build 或 sudo apt install -y rpm

  2. 路径多出一层目录
    漏写 -C 参数导致路径嵌套,记住 -C 用于切换工作目录而非指定输出位置

  3. 脚本无执行权限
    FPM 保留原始权限,打包前务必 chmod +x,或通过 --after-install 脚本补权限

  4. 安装后自动启服务
    使用钩子脚本:--after-install ./post-install.sh,脚本内写 systemctl enable myapp && systemctl start myapp

五、总结

核心流程总结:

  1. 按实际路径组织文件目录
  2. 执行 fpm 命令指定源格式、目标格式、依赖声明
  3. 切换 -t 参数输出多平台包
  4. 用包管理器一键安装验证

FPM 官方文档 fpm.readthedocs.io 提供了更多进阶用法。建议立即尝试将手头的工具脚本打包,体验自动化分发的效率提升。熟练后可探索 --deb-systemd 自动生成服务配置,实现完整部署流水线自动化。

项目仓库:jordansissel/fpm

最后更新:2026-09-26T10:02:09

评论 (0)

发表评论

blog.comments.form.loading
0/500

暂无评论,快来发表第一条评论吧!