如何在Linux中打包软件 Linux fpm快速打包工具

发布时间 - 2025-08-28 00:00:00    点击率:
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 fpm

CentOS/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发行版间更自由地分发软件。


# linux  # python  # centos  # ubuntu  # 工具  # amd  # 系统安装  # python包 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python进程池调度策略_任务分发说明【指导】  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  原生JS实现图片轮播切换效果  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  *服务器网站为何频现安全漏洞?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  java ZXing生成二维码及条码实例分享  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  ,交易猫的商品怎么发布到网站上去?  LinuxShell函数封装方法_脚本复用设计思路【教程】  如何快速搭建高效服务器建站系统?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  在线制作视频网站免费,都有哪些好的动漫网站?  魔方云NAT建站如何实现端口转发?  如何用wdcp快速搭建高效网站?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Linux网络带宽限制_tc配置实践解析【教程】  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  javascript基本数据类型及类型检测常用方法小结  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  香港服务器租用费用高吗?如何避免常见误区?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  昵图网官方站入口 昵图网素材图库官网入口  如何快速选择适合个人网站的云服务器配置?  Laravel如何实现文件上传和存储?(本地与S3配置)  简历没回改:利用AI润色让你的文字更专业  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Python文件异常处理策略_健壮性说明【指导】  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  香港服务器网站推广:SEO优化与外贸独立站搭建策略  教你用AI将一段旋律扩展成一首完整的曲子  移动端脚本框架Hammer.js  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  潮流网站制作头像软件下载,适合母子的网名有哪些?  jQuery 常见小例汇总  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  JavaScript数据类型有哪些_如何准确判断一个变量的类型  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?