Linux下开源打包工具fpm的安装与使用(超详细)
Linux下开源打包工具fpm的安装与使用
- 一、fpm概述
- 二、fpm的安装
- 1、安装ruby环境
- 2、安装fpm
- 三、fpm的使用
- 1、fpm常用参数
- 2、举例要求
- 3、准备目录
- 4、编写脚本文件
- 5、打成rpm包
- 6、安装与卸载
- 四、下载一键打包例子
- 五、报错解决
- 错误描述
- 原因
- 解决办法
- (1)离线安装rvm
- (2)升级2.6.3版ruby
一、fpm概述
fpm是linux下的一款开源打包工具,可以用非常简单的方式,帮助你快速构建rpm、deb、solaris等包,支持如下操作系统:
- OSX/macOS
- Red Hat systems (Fedora 22 or older, CentOS, etc)
- Oracle Linux 7.x systems
- Debian-derived systems (Debian, Ubuntu, etc)
github地址:https://github.com/jordansissel/fpm
fpm官网帮助:https://fpm.readthedocs.io/en/latest/
fpm采用ruby语言开发,所以使用前,需要在你的机器上安装ruby环境。
二、fpm的安装
以下以centos7.3为例,进行说明。在其他系统下的fpm安装,也可参考官网安装步骤:https://fpm.readthedocs.io/en/latest/installing.html#
1、安装ruby环境
安装ruby-devel、gcc、make、rpm-build、rubygems、ruby共6个包,安装过程遇到询问yes/no,自动选择yes。命令如下:
yum -y install ruby-devel gcc make rpm-build rubygems ruby
2、安装fpm
RubyGems是Ruby的一个包管理器,功能上类似于apt-get、yum等,所以我们需要通过RubyGems来安装fpm。
由于国外的源很慢,或者直接不能访问,需要将Ruby Gems源更换为国内的源。
添加阿里云的源:
gem sources --add http://mirrors.aliyun.com/rubygems/
删除官方的源:
gem sources --remove https://rubygems.org/
查看当前源列表:
gem sources -l
安装1.4.0版fpm:
gem install fpm -v 1.4.0
如果安装过程出现错误,可参考第五章解决办法;没出现报错,请跳过第五章。
安装完毕,应该是如下这样:
查看fpm帮助:
fpm -help
说明,已经安装成功。
三、fpm的使用
fpm的使用也很简单,只要输入相应的参数值,就可以完成打包,并且支持rpm和deb,这样可以在不同的平台下使用相同的方式来打包,一劳永逸。
fpm打包是在终端中使用命令来完成的,支持很多的参数,使用形式,类似如下:
fpm -x yyy -z bbb -a jjjj
接下来,了解下fpm支持的命令参数。
1、fpm常用参数
FPM常用参数:
-s:指定源类型
-t:指定目标类型,即想要制作为什么包
-n:指定包的名字
-v:指定包的版本号
-C:指定打包的相对路径
-d:指定依赖于哪些包
-f:第二次包时目录下如果有同名安装包存在,则覆盖它;
-p:制作的rpm安装包存放路径,不想放在当前目录下就需要指定;
–post-install:软件包安装完成之后所要运行的脚本;同–offer-install
–pre-install:软件包安装完成之前所要运行的脚本;同–before-install
–post-uninstall:软件包卸载完成之后所要运行的脚本;同–offer-remove
–pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove
–prefix:制作好的rpm包默认安装路径;
支持的源类型包:
- dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包
- rpm: 对rpm进行转换
- gem: 对rubygem包进行转换
- python: 将Python模块打包成相应的类型
支持的目标类型包:
- rpm: 转换为rpm包
- deb: 转换为deb包
- solaris: 转换为solaris包
- puppet: 转换为puppet包
网上基本都能查到fpm相关资料,有些参数可能新版的fpm中,变成了不推荐使用。想要了解最新的参数,可以使用命令查看帮助。
fpm -help
下面,我们举个例子,来对fpm的使用加以说明。
2、举例要求
待打包的东西有2个:
- 程序test,里面就是简单打印个hello world;
- 测试文件1.txt。
我们想把它打成rpm包,并且安装到/opt/helloworldtest目录下,在安装完成后,自动将1.txt文件拷贝到根目录下;在卸载完成后,将根目录下的1.txt删除。
之所以在安装后,和卸载后,添加这个操作,是为了想在安装后添加桌面快捷方式,且在卸载后删除桌面快捷方式。为了简便,就直接用1.txt代替下吧,反正都是类似的,主要把fpm打的包,执行脚本原理解释清楚就行。
安装后的预期效果:
3、准备目录
首先我们需要建立3个目录,如下:
- output,用于存放打好的包;
- source,用于存放我们的可执行程序,这里是test程序和一个测试文件1.txt;
- sh,用于存放安装完成后执行的脚步install_after.sh,以及卸载完成后执行的脚本uninstall_after.sh。
具体文件存放情况,如下:
使用fpm打包后,安装的原理,就是将source下的所有东西释放到安装目录下。
比如安装目录为/opt/helloworldtest,则其安装路径文件情况,如下:
4、编写脚本文件
install_after.sh内容如下:
#!/bin/sh
cp /opt/helloworldtest/1.txt /
uninstall_after.sh内容如下:
#!/bin/sh
rm /1.txt
把install_after.sh、uninstall_after.sh、test、1.txt这4个文件放到位后。就可以进行打包操作了。
5、打成rpm包
进入setupdir目录,即output、sh、source所在的目录:
输入如下命令,对source目录下进行打包rpm:
fpm -s dir -t rpm -n mytest -v 1.0.0 --iteration 1 -C source -f -p output --prefix /opt/helloworldtest --after-install sh/install_after.sh --after-remove sh/uninstall_after.sh
以上参数虽多,但是很简单,请看如下解释:
- -s dir,将目录进行打包;
- -t rpm,打成rpm包,也可以写deb,表示打成deb包;
- -n mytest,包名为mytest,记住这个名字,卸载时,需要使用mytest名称;
- -v 1.0.0,包的版本号为1.0.0;
- –iteration 1,发布号为1,发布号主要是对软件存在的bug或漏洞进行修补,在软件功能上并没有变化;
- -C source,打包的相对路径为source;
- -f,多次打包时,输出目录下如果有同名安装包存在,则覆盖它;
- -p output,输出的安装包的目录为output;
- –prefix /opt/helloworldtest,指定包的安装路径为/opt/helloworldtest目录下;
- –after-install sh/install_after.sh,软件包安装完成之后运行install_after.sh脚本;
- –after-remove sh/uninstall_after.sh,软件包卸载完成之后运行uninstall_after.sh脚本。
最后,打包生成的rpm文件在output目录下。如下:
RPM包的组成格式:
mytest-1.0.0-1.x86_64.rpm| | | | |
软件名称| | | |版本号 | | |发布号 | |硬件平台 |扩展名
例子备注:mytest :软件名称1.0.0 :软件版本号1 :发布号主要是对软件存在的bug或漏洞进行修补,在软件功能上并没有变化x86_64 :指64位的PC架构,另外还有'i386' 'i686' 等32位的PC架构rpm :扩展名
6、安装与卸载
测试,rpm安装:
rpm -i mytest-1.0.0-1.x86_64.rpm
测试,rpm卸载:
rpm -e mytest
此时使用的软件包名mytest,就是打包时,通过-n参数指定的名称。
经测试,安装、卸载均达到预期效果。
为了照顾不了解的小伙伴,所以尽可能的写的详细,似乎让人感觉反而复杂了。不过fpm的使用本来就很简单,其实就是一条命令的事儿。跟着做一遍,基本就很清楚了。
四、下载一键打包例子
为了最大简化操作,特意将打包命令写成脚本文件,实现一键打包(./make_rpm.sh)。
文章中打包的例子,提供压缩包下载:
链接: https://pan.baidu.com/s/1VPI5vBtPsjI6GsGC6cRdyg
提取码: tr8t
五、报错解决
错误描述
使用“gem install fpm -v 1.4.0”安装fpm时,报错“childprocess requires Ruby version >= 2.4.0”,如下:
原因
安装childprocess-4.0.0.gem包时,要求ruby版本必须>=2.4.0。我们使用命令“ruby -v”查看ruby版本,如下:
解决办法
升级ruby版本。详细步骤如下:
(1)离线安装rvm
rvm是用来管理ruby的,而ruby的其中一个“程序”叫rubygems,也就是我们用它装fpm的,手工装各种库用gem。
所以,我们首先安装rvm,这个在线速度很慢,我这里使用离线安装。
下载rvm包,大概一会,就可以下载完毕:
curl -sSL https://github.com/rvm/rvm/tarball/stable -o rvm-stable.tar.gz
解压rvm包:
tar -xzvf rvm-stable.tar.gz
进入解压目录:
cd rvm-rvm-cc69ed9
安装rvm:
./install --auto-dotfiles
加载rvm:
source /usr/local/rvm/scripts/rvm
(2)升级2.6.3版ruby
查看rvm可安装版本:
rvm list known
安装ruby 2.6.3:
rvm install 2.6.3
下载中,可能下载比较久,下载完毕,自动开始安装,如下:
设置默认使用ruby版本:
rvm use 2.6.3 --default
可以看到ruby已升级至2.6.3。
再次执行gem install fpm -v 1.4.0,就不会再报这个错误了,一会就安装完成了。
参考链接:
《用fpm来做rpm打包》
《fpm安装和使用fpm打包rpm》
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。
Linux下开源打包工具fpm的安装与使用(超详细)相关推荐
- Linux下的sniffer工具--Tcpdump的安装和使用
在如今众多的黑客技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一.用过windows平台上的sniffer工具(例如,netxray和sniffer pro软件)的朋友可能都知道,在共享 ...
- Linux如何安装iperf软件,Linux 下网络性能测试工具 iperf 的安装和使用
很久没写文章,iperf 也一直有用,感受不错就记录一下html 说明: OS :CentOS 6.4 x86_64 Server: 192.168.100.55 Client: 192.168.10 ...
- linux下qt的文件打包,【最详细最完整】在Linux 下如何打包免安装的QT程序?
版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! https://blog.csdn.net ...
- Linux下的parted工具的使用 GPT分区安装系统
安装系统是安装前时候ctrl+atl+F2 fdisk -l parted select /dev/sdb mklabel msdos # 将GPT磁盘格式化为MBR磁盘 对大硬盘进行分区 xfs 和 ...
- Linux 下的 pstack 工具安装及简单应用
作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu_IT) 转载请联系授权 | (微信ID:xxq1426321293) 大家好,我是 JiekeXu,很高兴又和大家见面了 ...
- Linux下C++开发工具介绍
概述 就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, an ...
- arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析
C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...
- linux下的bt工具bitorrent
linux下的bt工具很少,而且性能也都不怎么高,azureus虽然是图形界面的,但是很占内存和cup,很容易dang机,而且他的bt工具都是命 令行的,给许多linuxfans带来了很多不便,所以我 ...
- Linux 下ffmpeg的环境搭建与安装
Linux下ffmpeg的环境搭建与安装 背景 [FFmpeg是什么] 1· FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源软件.采用LGPL或GPL许可证,提供了录制.转 ...
最新文章
- C++深拷贝与浅拷贝
- 阿里巴巴领导抱怨家里有矿的应届生不好带!聪明效率高,但从不加班,也不做职业规划!画饼谈心也没用,怎么办?...
- 第一行冻结_EXCEL函数tips(4) 数据冻结和查找
- CSS之position
- (字符串)最长公共子序列(Longest-Common-Subsequence,LCS)
- 发现一个小坑的地方,unity的协程,想要停止,必须以字符串启动
- d3设置line长度_Graph Embedding之LINE算法解读
- Qt之模式、非模式、半模式对话框
- matplotlib: 有关 Backend 的说明
- 新浪微博API使用方法
- spring定时任务配置,以及不执行的解决办法
- Android__逆向__xpose使用
- 第三章 一元函数积分概念、计算及应用
- 13 个非常有用的 Python 代码片段,建议收藏!
- yolo3训练人脸检测模型
- 什么是NoSQL数据库
- npm安装electron时报Error: EPERM: operation not permitted, scandir.....
- 计算机磁盘管理找不到第二块硬盘,新加的硬盘没有显示怎么办?新加硬盘分区方法...
- 计算机英语感想1500,求助:求新概念计算机英语英文读书报告1500字,谢~
- Linux测试工具httpd-tools