FPM(Effing Package Management)是一款強大的跨平台打包工具,能將目錄、Gem、Python 包等來源轉換為 RPM、DEB 等原生安裝包,並支援安裝/卸載腳本鉤子,極大簡化了 Linux 軟體分發流程。本文以打包 LuaJIT 為例,詳細演示 FPM 的安裝、基本參數與完整構建流程。
| 參數 | 用途 |
|---|---|
--pre-install | 安裝前執行的腳本文件路徑 |
--post-install | 安裝後執行的腳本文件路徑 |
--pre-uninstall | 卸載前執行的腳本文件路徑 |
--post-uninstall | 卸載後執行的腳本文件路徑 |
# 安裝 Ruby 與構建依賴 (RHEL/CentOS)
yum -y install ruby rubygems ruby-devel rpm-build
# 更換 Gem 源為國內鏡像 (加速下載)
gem sources -a https://ruby.taobao.org/
gem sources -r https://rubygems.org/
# 安裝 FPM
gem install fpm
mkdir /tmp/luajitcd /usr/local/src
wget https://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar xvzf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make PREFIX=/usr
make install PREFIX=/usr DESTDIR=/tmp/luajit
此處 DESTDIR 將編譯產物重定向至臨時目錄,模擬安裝根目錄結構。
fpm -s dir -t rpm \
-n LuaJIT -v 2.0.4 --iteration 1.el7 \
-C /tmp/luajit/ \
-p /root \
--description 'luajit rpm package' \
--url 'https://luajit.org'
參數解析:
-s dir:來源類型為目錄樹-t rpm:目標包格式-n / -v:包名與版本--iteration:發布號(如 1.el7 表示針對 EL7 的第 1 次構建)-C:切換到打包根目錄-p:輸出包存放路徑rpm -qip /root/LuaJIT-2.0.4-1.el7.x86_64.rpm 查看元數據,rpm -qlp ... 列出文件清單。
ldd 分析二進制依賴,但建議顯式添加 -d "libc.so.6" 等運行時依賴。--post-install 等鉤子中,實現安裝後自動配置。-t rpm 改為 -t deb 即可產出 Debian 包,實現一次構建多平台分發。-v 與 --iteration,實現語義化版本發布。掌握 FPM 後,您將能以統一流程打包任何語言編寫的應用,消除手工編寫 Spec 文件的繁瑣,顯著提升交付效率與一致性。