参考http://blog.oldboyedu.com/autodeploy-rpm/


一 FPM打包工具

FPM的github:https://github.com/jordansissel/fpm 

FPM功能简单说就是将一种类型的包转换成另一种类型。

1. 支持的源类型包

dir 将目录打包成所需要的类型,可以用于源码编译安装的软件包

rpm 对rpm进行转换

gem 对rubygem包进行转换

python 将python模块打包成相应的类型

二  FPM参数

详细使用见fpm –help

常用参数

  1. -s 指定源类型

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

  3. -n 指定包的名字

  4. -v 指定包的版本号

  5. -C 指定打包的相对路径 Change directory to here before searching forfiles

  6. -d 指定依赖于哪些包

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

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

  9. --post-install 软件包安装完成之后所要运行的脚本;同--after-install

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

  11. --post-uninstall 软件包卸载完成之后所要运行的脚本;同--after-remove

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


三  FPM安装

  1. fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。

  2. # 安装ruby模块

  3. yum -y install ruby rubygems ruby-devel gcc

  4. # 添加阿里云的Rubygems仓库,外国的源慢

  5. gem sources -a http://mirrors.aliyun.com/rubygems/ (如果第一个不能用,就添加第二个试试)

  6. gem source -a https://gems.ruby-china.org

  7. # 移除原生的Ruby仓库

  8. gem sources --remove http://rubygems.org/

  9. # 安装fpm

  10. gem install fpm


遇到的错误

[root@ops-rpmbuild01 ~]# gem install fpm
Building native extensions.  This could take a while...
Building native extensions.  This could take a while...
ERROR:  Error installing fpm:
ruby-xz requires Ruby version >= 1.9.3.


解决方法是:我用的是第二种

 1) 更新ruby

 

 2 )安装旧版本的fpm

[root@ops-rpmbuild01 ~]# gem install fpm -v 1.4.0

安装完成之后可以测试了


###########################################################################################

我测试的是定制nginx安装包

1 nginx软件包安装

yum -y install pcre-devel openssl-devel
useradd nginx -M -s /sbin/nologin
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar xf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure --prefix=/application/nginx-1.6.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /application/nginx-1.6.2/ /application/nginx


2. 编写脚本

mkdir -p /server/scripts/

[root@oldboy ~]# cd /server/scripts/

[root@oldboy scripts]# vim nginx_rpm.sh # 这是安装完rpm包要执行的脚本

#!/bin/bash

useradd nginx -M -s /sbin/nologin

ln -s /application/nginx-1.6.2/ /application/nginx

3. 打包

[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.2/

 运行这个的时候出现了一个错误 Need executable 'rpmbuild' to convert dir to rpm        {:level=>:error}

  解决办法是:yum install rpm-build  安装完成之后再次执行上面的命令出现下面这个即为正常

no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"nginx-1.6.2-1.x86_64.rpm"}
 ll -h nginx-1.6.2-1.x86_64.rpm
-rw-r--r-- 1 root root 6.7M Nov 1 10:02 nginx-1.6.2-1.x86_64.rpm

如果出现了这个软件包代表成功了!


4 测试


最后在新的机器上面安装这个定制的软件包,依赖关系自动解除

yum -y localinstall nginx-1.6.2-1.x86_64.rp