fpm是linux下的一款开源打包工具,可以用非常简单的方式,帮助你快速构建rpm、deb、solaris等包,支持如下操作系统:
github地址:https://github.com/jordansissel/fpm
fpm官网帮助:https://fpm.readthedocs.io/en/latest/
fpm采用ruby语言开发,所以使用前,需要在你的机器上安装ruby环境。
以下以centos7.3为例,进行说明。在其他系统下的fpm安装,也可参考官网安装步骤:https://fpm.readthedocs.io/en/latest/installing.html#
安装ruby-devel、gcc、make、rpm-build、rubygems、ruby共6个包,安装过程遇到询问yes/no,自动选择yes。命令如下:
yum -y install ruby-devel gcc make rpm-build rubygems ruby
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的使用也很简单,只要输入相应的参数值,就可以完成打包,并且支持rpm和deb,这样可以在不同的平台下使用相同的方式来打包,一劳永逸。
fpm打包是在终端中使用命令来完成的,支持很多的参数,使用形式,类似如下:
fpm -x yyy -z bbb -a jjjj
接下来,了解下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包默认安装路径;
支持的源类型包:
支持的目标类型包:
网上基本都能查到fpm相关资料,有些参数可能新版的fpm中,变成了不推荐使用。想要了解最新的参数,可以使用命令查看帮助。
fpm -help
下面,我们举个例子,来对fpm的使用加以说明。
待打包的东西有2个:
我们想把它打成rpm包,并且安装到/opt/helloworldtest目录下,在安装完成后,自动将1.txt文件拷贝到根目录下;在卸载完成后,将根目录下的1.txt删除。
之所以在安装后,和卸载后,添加这个操作,是为了想在安装后添加桌面快捷方式,且在卸载后删除桌面快捷方式。为了简便,就直接用1.txt代替下吧,反正都是类似的,主要把fpm打的包,执行脚本原理解释清楚就行。
安装后的预期效果:
首先我们需要建立3个目录,如下:
具体文件存放情况,如下:
使用fpm打包后,安装的原理,就是将source下的所有东西释放到安装目录下。
比如安装目录为/opt/helloworldtest,则其安装路径文件情况,如下:
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个文件放到位后。就可以进行打包操作了。
进入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
以上参数虽多,但是很简单,请看如下解释:
最后,打包生成的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 :扩展名
测试,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版本。详细步骤如下:
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
查看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》
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。