3步用FPM一键打包跨平台deb/rpm安装包
告别手动部署烦恼,本教程手把手教你使用FPM工具,3步将脚本或应用打包成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
常见踩坑提醒
-
rpmbuild: command not found
缺rpm-build工具:sudo dnf install -y rpm-build或sudo apt install -y rpm -
路径多出一层目录
漏写-C参数导致路径嵌套,记住-C用于切换工作目录而非指定输出位置 -
脚本无执行权限
FPM 保留原始权限,打包前务必chmod +x,或通过--after-install脚本补权限 -
安装后自动启服务
使用钩子脚本:--after-install ./post-install.sh,脚本内写systemctl enable myapp && systemctl start myapp
五、总结
核心流程总结:
- 按实际路径组织文件目录
- 执行 fpm 命令指定源格式、目标格式、依赖声明
- 切换
-t参数输出多平台包 - 用包管理器一键安装验证
FPM 官方文档 fpm.readthedocs.io 提供了更多进阶用法。建议立即尝试将手头的工具脚本打包,体验自动化分发的效率提升。熟练后可探索 --deb-systemd 自动生成服务配置,实现完整部署流水线自动化。
项目仓库:jordansissel/fpm