RPM包快速制作工具fpm的安装和使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangjianno2/article/details/72799292
1.fpm简介
fpm工具用来快速构建安装包,例如rpm,deps以及OSX packages等等。例如我们已经在本机上编译并安装了某个软件,那么通过fpm工具,可以将安装文件达成一个rpm包。fpm支持的源文件的格式有gem、python module、pear、目录、rpm、deb、node packages等等。fpm支持的输出格式有deb、rpm、solaris、freebsd、tar、目录、Mac OS X .pkg files等等。
使用rpmbuild制作包时,需要编写SPEC文件,比较麻烦。尤其是当我们有一个已经编译好的软件,部署机器上可以直接启动的程序,非常适合使用fpm工具来快速制作rpm安装包。

2.fpm的安装
yum -y install ruby rubygems ruby-devel    #FPM依赖的ruby模块
gem sources -a http://ruby.taobao.org/   #添加淘宝的Ruby仓库,这里最好不要使用https://ruby.taobao.org/,会出现一些证书相关的问题  
gem sources --remove http://rubygems.org/  #移除原生的Ruby仓库
gem install fpm  #安装fpm

3.fpm的使用
举例来说,我们要打包flume-agent,首先在flume官网上下载二进制包,解压到/root/SOURCES目录下,这时目录结构变为/root/SOURCES/flume-agent,目录中包含了bin、conf等文件。假如我们希望将来使用rpm -ivh命令将flume-agent安装到/opt/soft/目录下,那么我们就需要在创建/root/SOURCES/opt/soft/目录结构,然后把flume-agent二进制源文件mv到该目录中,然后执行下面的命令:
fpm -f -s dir -t rpm -n flume-agent --epoch 0 -v 1.7.0 --iteration 1.el7 -C /root/SOURCES -p /root/RPMS/x86_64 --verbose --category 'Development/Languages' --description 'flume-agent' --url 'flume.apahce.com' --license 'Apache License 2.0' -m '_laotansuancai_' --no-rpm-sign

执行完成后会在/root/RPMS/x86_64目录下生成flume-agent-1.7.0-1.el7.x86_64.rpm,通过rpm -qpl flume-agent-1.7.0-1.el7.x86_64.rpm命令输出包的文件结构如下:


备注:如果打包目录/root/SOURCES中有很多文件,我们可以在rpm后制定需要打包的文件,格式如下,表示只打包opt和wahaha两个目录或文件:
fpm -f -s dir -t rpm -n flume-agent --epoch 0 -v 1.7.0 --iteration 1.el7 -C /root/SOURCES -p /root/RPMS/x86_64 --verbose --category 'Development/Languages' --directories=/opt/soft/flume-agent --description 'flume-agent' --url 'flume.apahce.com' --license 'Apache License 2.0' -m 'wangjianno1' --no-rpm-sign opt wahaha
备注:--directories=/opt/soft/flume-agent表示将/opt/soft/flume-agent目录以及其内部所有层级的目录作为输出rpm包的一部分,否则这些目录是不包括在rpm包中,在执行rpm -e的时候,所有的目录会删不掉。参见https://github.com/jordansissel/fpm/issues/199

fpm命令的常用选项:
-f  ——  force,强制覆盖已有的同名包
-s —— fpm的输入源类型,可以是dir、deb、rpm等
-t —— fpm的输出类型,可以是deb、rpm、solaris等
-n —— 指定输出包的名称
--epoch —— 应该是第几次构建的意思,待确认
-v —— 指定输出包的版本号
-iteration —— 输出包的迭代号
-C —— fpm输入源文件的路径
-p —— fpm输出包的存放位置
--verbose —— 显式输出打包过程
--category —— 指出包的类型,和SPEC文件中Group概念是差不多的
--description —— 包的描述信息,随便写
--url —— 随意写一个站点地址
--license —— 包所遵循的开源协议
-m —— 打包的作者
--no-rpm-sign —— 不给输出包做签名
-d —— 指定依赖于哪些包
--directories dirname —— 将目录dirname,以及递归dirname中所有的目录作为rpm包中的内容


学习资料参考于:
https://github.com/jordansissel/fpm

猜你喜欢

转载自blog.csdn.net/wangjianno2/article/details/72799292