fpm做rpm打包

1、安装

首次安装
yum -y install ruby rubygems ruby-devel

添加淘宝sources
gem sources -a https://ruby.taobao.org/

移除国外sources
gem sources--remove http://rubygems.org/

安装fpm
gem install fpm -v 1.4.0

2、FPM常用参数:

-s:指定源类型

-t:指定目标类型,即想要制作为什么包

-n:指定包的名字

-v:指定包的版本号

-C:指定打包的相对路径

-d:指定依赖于哪些包

-f:第二次包时目录下如果有同名安装包存在,则覆盖它

-p:输出的安装包的目录,不想放在当前目录下就需要指定

–post-install:软件包安装完成之后所要运行的脚本;同–offer-install

–pre-install:软件包安装完成之前所要运行的脚本;同–before-install

–post-uninstall:软件包卸载完成之后所要运行的脚本;同–offer-remove

–pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove

支持的源类型包:

dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包
rpm: 对rpm进行转换
gem: 对rubygem包进行转换
Python: 将python模块打包成相应的类型
支持的目标类型包:

rpm: 转换为rpm包
deb: 转换为deb包
solaris: 转换为solaris包
puppet: 转换为puppet包


3、实战

通常在安装开源软件时,都会通过 --prefix 的指定安装路径,我们以安装tcpcopy为例来讨论fpm的用法。
$ ./configure --prefix=/tmp/tcpcopy &&make && make install
3.1 安装完后我们在 /tmp/tcpcopy目录下得到了所有的可执行文件,把它们打成rpm包,如下:
[cpp] view plain copy
  1. $ fpm -s dir -t rpm -n tcpcopy -v 0.8.0 /tmp/tcpcopy  
  2. $ Created rpm {:path=>"tcpcopy-0.8.0-1.x86_64.rpm"}  
查看rpm包中文件信息
[c] view plain copy
  1. $ rpm -qpl tcpcopy-0.8.0-1.x86_64.rpm  
  2. $ /tmp/tcpcopy/bin/intercept  
  3. $ /tmp/tcpcopy/tmp/tcpcopy/bin/tcpcopy  
3.2 我们可以看到路径前面多了/tmp/tcpcopy,这不是我们想要安装的目标路径,所有需要进行改进。如下:
[c] view plain copy
  1. $ fpm -s dir -t rpm -n tcpcopy -v 0.8.0 -C /tmp/tcpcopy bin   # -C表示在打包前转到/tmp/tcpcopy  
  2. $ /bin/intercept  
  3. $ /bin/tcpcopy   
这样就满足了我们的要求。
3.3 假设tcpcopy依赖一个通用的so文件,我们希望这个so文件在目标机上的路径为/usr/lib64,这样就有了第三版fpm:
[c] view plain copy
  1. $ fpm -s dir -t rpm -n tcpcopy -v 0.8.0 -C /tmp/tcpcopy bin  /usr/lib64/libsoftokn3.so   
  2. $ /bin/intercept  
  3. $ /bin/tcpcopy  
  4. $ /usr/lib64/libsoftokn3.so  
完成!
本文只起个抛砖引玉的作用,更高级的应用fpm --help。

4、问题

在打包过程中遇到的两个问题:
1、gem install fpm 过程中提示需要ruby版本大于1.8.7,因为对ruby还不是很了解,只有下源码包安装了。
http://ruby.taobao.org/ 上下载,安装完成继续安装rubygems http://rubygems.org/ 下载最新版安装成功。

2、 再次gem install fpm,报cannot load such file --openssl错误,
这是由于openssl开发包不存在,导致安装ruby时没安装openssl,
安装openssl-devel.x86_64  进入ruby源码目录ext/openssl ruby extconf.rb &&make && make install。


你可能感兴趣的:(rpm,ruby)