fpm是一个用Ruby编写的开源工具,可将目录、源码、Python包等快速打包为deb、rpm等格式,简化Linux软件分发。

在Linux中打包软件,很多人第一反应是使用
dpkg或
rpm这类工具,但手动编写控制文件、处理依赖、组织目录结构非常繁琐。一个更高效的方式是使用fpm(Effing Package Manager),它可以快速将软件打包成多种格式(如deb、rpm、tar等),无需深入了解各发行版的打包规范。
什么是fpm?
fpm是一个用Ruby编写的开源工具,由Jordan Sissel开发,目标是“让打包变得简单”。它能将源码、目录、gem、python包等输入,转换为deb、rpm、tar.gz、apk等输出格式,极大简化了Linux软件分发流程。
安装fpm
确保系统已安装Ruby和gem(Ruby包管理器):
Ubuntu/Debian:sudo apt-get install ruby ruby-dev rubygems build-essential
sudo gem install fpmCentOS/RHEL/Rocky Linux:
sudo yum install ruby ruby-devel rubygems rpm-build
sudo gem install fpm
安装完成后,输入
fpm --version验证是否成功。
使用fpm打包示例
假设你有一个简单的程序放在
/opt/myapp/目录下,想打包为deb和rpm格式。
1. 打包目录为deb包
fpm -s dir -t deb -n myapp -v 1.0.0 --prefix /usr/local /opt/myapp
-s dir
:源类型是目录-t deb
:目标格式为deb-n myapp
:包名称-v 1.0.0
:版本号--prefix /usr/local
:安装路径前缀
生成的deb包可用于Ubuntu/Debian系统安装:
sudo dpkg -i myapp_1.0.0_amd64.deb
2. 打包为rpm包
fpm -s dir -t rpm -n myapp -v 1.0.0 --prefix /usr/local /opt/myapp
生成的rpm包可用于CentOS等系统:
sudo rpm -ivh myapp-1.0.0.x86_64.rpm
3. 添加依赖和描述
如果程序依赖
python3,可加入
--depends参数:
fpm -s dir -t deb -n myapp -v 1.0.0 --prefix /usr/local --depends python3 --description "My custom application" /opt/myapp
支持的源和目标类型
fpm支持多种输入和输出格式,灵活适配不同场景:
- 源类型(-s):dir(目录)、file(文件)、tar、zip、gem、python、rpm、deb等
- 目标类型(-t):deb、rpm、tar、tar.gz、zip、apk等
例如,将Python包打包为deb:
fpm -s python -t deb requests
基本上就这些。fpm不追求替代专业的打包体系,而是提供一种快速、实用的“临时打包”或“内部发布”方案,特别适合运维、DevOps和小型项目。掌握它,能让你在不同Linux发行版间更自由地分发软件。










