fpm 是 Linux 运维中快速打包脚本或源码的实用工具,无需 spec 文件、不依赖 rpm-build 或 dpkg-deb,一条命令即可生成标准 rpm 或 deb 包,适用于内部工具、配置模板及自研小服务分发;需先配置 Ruby 环境并切换 gem 国内源(如 https://gems.ruby-china.com/),再通过 gem install fpm 安装;支持目录直打(-s dir -t rpm/deb)、添加依赖(-d)、描述(--description)和生命周期脚本(--post-install 等),也支持基于编译结果目录(-C)打包。

fpm 是 Linux 运维中快速打包脚本或源码的实用工具,不用写 spec 文件、不依赖 rpm-build 或 dpkg-deb,一条命令就能生成标准 rpm 或 deb 包,特别适合内部工具、配置模板、自研小服务的分发。
安装 fpm 并配置国内源
先确保系统已安装 Ruby 环境(CentOS/RHEL 用 yum,Ubuntu/Debian 用 apt),再用 gem 安装 fpm。因 rubygems.org 国内访问不稳定,建议切换为国内镜像:
- 执行 gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
- 验证源是否生效:gem sources -l,应只显示 https://gems.ruby-china.com/
- 安装 fpm:gem install fpm
用目录直接打包成 rpm 或 deb
这是最常用场景:你有一套脚本、配置、二进制文件放在某个目录(如 /tmp/mytool),想把它整体打包安装到目标机器的指定路径。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 打包为 rpm:fpm -s dir -t rpm -n mytool -v 1.2.0 -a x86_64 --prefix /usr/local/mytool /tmp/mytool/=.
- 打包为 deb:fpm -s dir -t deb -n mytool -v 1.2.0 -a all --prefix /usr/local/mytool /tmp/mytool/=.
- 说明:
/tmp/mytool/=.表示把该目录下所有内容映射到包内根路径;--prefix指定安装时默认前缀;-a all表示架构无关,适合脚本类包
添加依赖、描述和生命周期脚本
让包更规范,支持依赖检查和自动初始化:
- 声明运行依赖,例如需要 bash 和 curl:-d 'bash' -d 'curl'
- 写一段简明描述:--description "轻量日志清理工具,支持按天归档"
- 安装后自动执行初始化:--post-install ./post-install.sh(脚本需有可执行权限)
- 卸载前备份配置:--pre-uninstall ./pre-uninstall.sh
从源码编译结果打包(免编译环境)
若已有编译好的文件(如 make install DESTDIR=/tmp/staging 后的结果),可直接打包 staging 目录:
- 先构建临时安装树:make install DESTDIR=/tmp/pkg-root
- 再用 fpm 打包:fpm -s dir -t rpm -n nginx-custom -v 1.25.3 -C /tmp/pkg-root --prefix /usr
-
-C表示工作目录,fpm 会在其中查找文件;--prefix /usr让/tmp/pkg-root/usr/bin等路径映射为安装后的/usr/bin

















