使用 fpm 打包 ruby(ree)

在没有出现 fpm 之前,打包是件比较麻烦的事,无意发现了 fpm 这个打包神器,后来发现 fpm 的作者 jordansissel 同时也是 logstash 的作者,然后 j 大的 resume 也比较传奇,曾经在 g 家做过 sre,可以膜拜一下。

先来看下如果要人肉的在一台机器上安装 ruby(ree) 是怎么样的一个流程。
首先是安装 rvm,这需要安装各种编译工具:
yum -y install zlib-devel readline-devel libxml2-devel libxslt-devel sqlite sqlite-devel openssl-devel
curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash

登出再登录。接着安装 ree-1.8.7-2012.02,在安装 ree 之前,需要先安装 libyaml:
# rvm pkg install libyaml
# rvm instal ree-1.8.7-2012.02

如果这两个的顺序弄错了,需要安装完 libyaml 之后重新安装 ruby:
# rvm reinstal ree-1.8.7-2012.02

到此结束。最后可以发现,跟上面相关的文件都在 /usr/local/rvm/ 目录下,除此之外需要增加一个 PATH 变量以及 rvm 这个 group。
要使用 fpm,需要通过 gem 安装,这个过程中会自动的解决依赖等问题:
# gem install fpm

安装完之后就可以开始打包了:
# fpm -s dir -t rpm -n rvm -v 1.20.13 –rpm-group rvm  –rpm-user root –before-install preinst  –after-install postinst  -a all -m jaseywang@gmail.com /usr/local/rvm/

当然需要加个 preinst 以及 postinst:

# cat postinst
chown -R root:rvm /usr/local/rvm

# cat preinst
groupadd –system –gid 502 rvm
usermod -aG rvm jaseywang

cat >> /etc/bashrc << EOF

type rvm >/dev/null 2>/dev/null || echo ${PATH} | GREP_OPTIONS="" \grep "/usr/local/rvm/bin" > /dev/null || export PATH="${PATH}:/usr/local/rvm/bin"
EOF

上面的 preinst/postinst 写的比较简略,实际使用的时候可以加些判断之类的,不过效果达到了。