日志管理(0) 用fpm制作scribe的rpm包

scribe一般采用源码编译安装,但是这种做法不利于批量安装或应用的快速部署,并且编译安装过程会出现许多幺蛾子。下面就扯扯怎样用fpm将scribe制作成rpm包。
1、安装fpm
FPM是Ruby模块,先装上ruby的一些环境依赖。

[root@saltstack ~]#yum install ruby rubygems ruby-devel

添加淘宝的Ruby仓库,稳定。

[root@saltstack ~]#gem sources -a http://ruby.taobao.org/

移除原生的Ruby仓库

[root@saltstack ~]#gem sources --remove http://rubygems.org/

最后安装fpm

[root@saltstack ~]#gem install fpm

2、编译安装scribe,并制作rpm包
首先安装scribe依赖的thrift

[root@saltstack ~]#yum install boost boost-devel autoconf libevent-devel ldconfig
[root@saltstack ~]#wget https://archive.apache.org/dist/thrift/0.9.0/thrift-0.9.0.tar.gz
[root@saltstack ~]#tar -zxvf thrift-0.9.0.tar.gz
[root@saltstack ~]#cd thrift-0.9.0
[root@saltstack ~]#./configure --prefix=/usr/local/thrift --with-qt4=no
[root@saltstack ~]#make
[root@saltstack ~]#make install
#再指定安装到临时目录/tmp/scribe,安装到临时目录这是fpm制作rpm包必要的步骤。
[root@saltstack ~]#make install DESTDIR=/tmp/scribe

再安装scribe依赖的thrift-fb303

[root@saltstack ~]#cd  /opt/src/thrift-0.9.0/contrib/fb303
[root@saltstack ~]#./bootstrap.sh --with-thriftpath=/usr/local/thrift
#
假如报错:“错误:thrift/TDispatchProcessor.h:没有那个文件或目录”
修改makefile.am文件
将该行AM_CPPFLAGS += -I$(thrift_home)/include/thrift
改成AM_CPPFLAGS += -I$(thrift_home)/include
#
[root@saltstack ~]#make
[root@saltstack ~]#make install
#再指定安装到临时目录/tmp/scribe
[root@saltstack ~]#make install DESTDIR=/tmp/scribe

编译安装scribe

[root@saltstack ~]#git clone https://github.com/facebook/scribe.git scribe
[root@saltstack ~]#cd scribe
[root@saltstack ~]#./bootstrap.sh --prefix=/usr/local/scribe --with-thriftpath=/usr/local/thrift/ --with-boost-filesystem=boost_filesystem
#
如果出现错误:/usr/local/include/thrift/transport/TTransport.h:34: error: expected constructor, destructor, or type conversion before ‘readAll’...后面的省略
解决办法:./configure中添加参数: CPPFLAGS="-DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H"
#
[root@saltstack ~]#./configure --prefix=/usr/local/scribe --with-thriftpath=/usr/local/thrift/ --with-boost-filesystem=boost_filesystem CPPFLAGS="-DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H"
#
如果报错(错误信息 /usr/bin/ld: cannot find -lthriftnb查看是否有libthriftnb.so库,如果没有需要重装thrift)
#
[root@saltstack ~]#make
[root@saltstack ~]#make install
#再指定安装到临时目录/tmp/scribe
[root@saltstack ~]#make install DESTDIR=/tmp/scribe

安装完成后创建必要的链接(这一步可以写在rpm包安装完成后执行的脚本里)

ln -s /usr/local/thrift/lib/libthrift-0.9.0.so /lib64/
ln -s /usr/local/thrift/lib/libthriftnb-0.9.0.so /lib64/

到目前为止,本机的scribe已经编译安装完成了,是时候用fpm将安装在临时目录/tmp/scribe中的文件制作成rpm包了。

3、将临时安装目录/tmp/scribe打成rpm包
编写安装rpm包完成后的脚本post-scribe.sh,脚本位置/root/sh/post-scribe.sh

[root@saltstack sh]#cat post-scribe.sh
ln -s /usr/local/thrift/lib/libthrift-0.9.0.so /lib64/
ln -s /usr/local/thrift/lib/libthriftnb-0.9.0.so /lib64/

题外话,rpm包分别可以在安装前、安装后、卸载前、卸载后这4个阶段执行不同的脚本。根据不同的需求编写不同的脚本,然后制作rpm包的时候将这些脚本包括进去。

将临时安装目录打包成rpm包

[root@saltstack ~]# fpm -s dir -t rpm --epoch 0 --iteration 1.el6 -v 2.0.0 -n scribe -d 'boost boost-devel autoconf libevent libevent-devel ldconfig' --post-install /root/sh/post_scribe.sh -C /tmp/scribe usr

fpm一些常用参数如下(用fpm –help可以才看所有参数详解)

-n 生成的package名字
-p 生成的package文件输出位置
-v 生成的package版本
-d 生成的package依赖于什么软件,通常为-d 'name' 或这 -d 'name > version'
-a 系统架构名称,如果是noarch则为'-a all' 或者 '-a native'
--description 软件包描述
--conflicts 与其他什么软件冲突
-C 打包的根路径,后面跟要打入rpm包文件的路径
--pre-install     rpm包安装前执行的脚本
--post-install     rpm包安装后执行的脚本
--pre-uninstall     rpm包卸载前执行的脚本
--post-uninstall     rpm包卸载后执行的脚本

把rpm包放到yum源中,先更新中心yum仓库的元数据,然后再更新需要安装该rpm包机器的yum元数据。

#提供yum源服务的机器
createrepo --update /mirros/centos/6.3/x86_64/   更新repo数据
createrepo /mirros/centos/6.3/x86_64/     创建repo数据
#享受yum源服务的机器
yum clean all
yum makecache

转载请注明文章出处:http://www.xiaomastack.com/2014/11/02/scribe-rpm/ 谢谢!

发表评论:

你的电子邮件地址将不会被公开.

72 − 69 =