ruby脚本打包 linux,使用FPM自定义打包

1.安装FPM

yum -y install ruby-devel gcc make  ruby rubygems

gem install fpm

注意,如果安装fpm的过程中报ruby版本错误,那么需要重新安装ruby版本和对应的依赖软件。相当麻烦。CentOS6默认的ruby版本是1.8.7,fpm需要1.9.3以上版本#curl -sSL https://rvm.io/mpapis.asc | gpg --import -#curl -L get.rvm.io | bash -s stable

# source /etc/profile.d/rvm.sh

# rvm reload

# rvm requirements run

# rvm install 2.3.0

# ruby --version

ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

如果觉得解决ruby的各种依赖关系麻烦,可以使用Docker来部署fpm

准备Dockerfile#

# FPM Dockerfile

#

# Pull base p_w_picpath.

FROM docker.io/ruby

# Install FPM.

RUN gem install fpm

# Define working directory.

WORKDIR /data

# Define default command.

CMD ["bash"]docker build -t fpm .

docker run -it --rm fpm fpm --help     查看帮助

2.FPM使用

fpm -s  -t  [list of sources]...

-s 表示制作包的来源,可以是dir目录,也可以是rpm包,或者deb包等等,通常我们会用dir目录自定义编译

-t 表示制作包的类型,可以是rpm包或者deb包等等

-d 指定依赖包名称,如 -d "libevent"

--force 如果生成的包已经存在,则强制覆盖

-C 指定源文件目录

--verbose 详细模式

--category 指定软件包的类别,例如 Applications/Databases

--license 指定license名称,例如GPL

--rpm-summary  指定rpm包的summary

--description 指定描述信息

--url 指定软件的url信息

--iteration 指定迭代版本号,rpm包就做release

--after-install   包安装完后需要执行的脚本

--before-install  包安装之前需要执行的脚本

--after-remove    包删除之后需要执行的脚本

--before-remove    包删除之前需要执行的脚本

Sources:gem (even autodownloaded for you)

python modules (autodownload for you)

pear (also downloads for you)

directories

tar(.gz) archives

rpm

deb

node packages (npm)

pacman (ArchLinux) packages

Targets:deb

rpm

solaris

tar

directories

Mac OS X .pkg files (osxpkg)

pacman (ArchLinux) packages

以安装memcached为例yum -y install libstdc++ libevent libevent-devel

wget http://memcached.googlecode.com/files/mem

cached-1.4.7.tar.gz

tar zxvf memcached-1.4.7.tar.gz

cd memcached-1.4.7

./configure --prefix=/opt/app/memcached  --wit

h-libevent=/usr/lib64/

make

make install DESTDIR=~/john/tmp/installdir/

先按照正常的编译安装步骤将源码包安装在一个临时目录,等下再从这个临时目录制作rpm包fpm -s dir -t rpm -n memcached -v 1.4.7 -C ~/john/tmp/installdir -d "libevent" -d "libevent-devel" -d "libstdc++"  --force

或者可以指定依赖包的最低版本# fpm -s dir -t rpm -n memcached -v 1.4.7 -C ~/john/tmp/installdir -d "libevent >= 1.4.3" -d "libevent-devel >= 1.4.3" -d "libstdc++ >= 4.4.5"  --force

这样就简单制作了一个memcached的rpm包

然后找一台没有安装过memcached的机子测试# rpm -ivh memcached-1.4.7-1.x86_64.rpm

error: Failed dependencies:

libevent is needed by memcached-1.4.7-1.x86_64

libevent-devel is needed by memcached-1.4.7-1.x86_64

安装好libevent和libevent-devel再测试下# rpm -ivh memcached-1.4.7-1.x86_64.rpm

Preparing...                ########################################### [100%]

1:memcached              ########################################### [100%]# /opt/app/memcached/bin/memcached -h

memcached 1.4.7

-p       TCP port number to listen on (default: 11211)

-U       UDP port number to listen on (default: 11211, 0 is off)

-s      UNIX socket path to listen on (disables network support)

-a      access mask for UNIX socket, in octal (default: 0700)

-l      interface to listen on (default: INADDR_ANY, all addresses)

 may be specified as host:port. If you don't specify

a port number, the value you specified with -p or -U is

used. You may specify multiple addresses separated by comma

or by using -l multiple times

-d            run as a daemon

...............................

rpm安装后是可以正常工作的

以上只是简单地制作了一个RPM包,但是要投入使用的话还需要增加一些步骤,比如安装rpm包的时候需要创建用户,添加日志轮转,添加启动脚本,删除rpm包的时候需要删除用户,删除安装目录等

制作rpm或者deb包等是有技巧的,比如要制作memcached的rpm包,可以先用yum -y install memcached

安装完memcached然后再通过rpm命令查看这个rpm包的各种信息,然后再根据自己的需求从新用源码包制作rpm包

如果rpm还没有安装:

可以使用rpm -qpi 查看rpm包的信息

可以使用rpm -qpl 查看rpm包的文件

可以使用rpm -qp --scripts 查看rpm包的脚本信息

可以使用rpm -qpR 查看软件包依赖关系

如果rpm包已经安装了:

# yum -y install memcached

# rpm -qa|grep memcached

# rpm -qi memcached-1.4.4-3.el6.x86_64

# rpm -ql memcached-1.4.4-3.el6.x86_64

# rpm -q --scripts memcached-1.4.4-3.el6.x86_64

preinstall scriptlet (using /bin/sh):

getent group memcached >/dev/null || groupadd -r memcached

getent passwd memcached >/dev/null || \

useradd -r -g memcached -d /var/run/memcached \

-s /sbin/nologin -c "Memcached daemon" memcached

exit 0

postinstall scriptlet (using /bin/sh):

/sbin/chkconfig --add memcached

preuninstall scriptlet (using /bin/sh):

if [ "$1" = 0 ] ; then

/sbin/service memcached stop > /dev/null 2>&1

/sbin/chkconfig --del memcached

fi

exit 0

postuninstall scriptlet (using /bin/sh):

if [ "$1" -ge 1 ]; then

/sbin/service memcached condrestart > /dev/null 2>&1

fi

exit 0

再重新制作下memcached的rpm包# cd ~/john/tmp/installdir

# rsync -R /etc/rc.d/init.d/memcached .

# rsync -R /etc/sysconfig/memcached .

# mkdir  -p var/run/memcached/

相关的启动文件自己进行修改,例如memcached的安装目录等

再为安装包添加相关脚本# cd ~/john/tmp

# touch beforeinstall.sh

# touch afterinstall.sh

# touch beforeremove.sh

# touch afterremove.sh#!/bin/bash

#beforeinstall.sh

getent group memcached >/dev/null || groupadd -r memcached

getent passwd memcached >/dev/null || \

useradd -r -g memcached -d /var/run/memcached \

-s /sbin/nologin -c "Memcached daemon" memcached

exit 0

#!/bin/bash

#afterinstall.sh

/sbin/chkconfig --add memcached

sed -i '/^MANPATH \/opt\/app\/memcached\/share\/man/d' /etc/man.config

sed -i '$a MANPATH /opt/app/memcached/share/man' /etc/man.config

#!/bin/bash

#beforeremove.sh

if [ "$1" = 0 ] ; then

/sbin/service memcached stop > /dev/null 2>&1

/sbin/chkconfig --del memcached

fi

exit 0

#!/bin/bash

#afterremove.sh

if [ "$1" -ge 1 ]; then

/sbin/service memcached condrestart > /dev/null 2>&1

fi

exit 0

重新使用fpm打包

# fpm -s dir -t rpm -n memcached  --epoch 0 -v 1.4.7   --iteration 0    -d "libevent >= 1.4.3" -d "libevent-devel >= 1.4.3" -d "libstdc++ >= 4.4.5"  --force   --category  "Applications/Databases"  --license "GPL" --description 'Memcached is an open-source cache software. It is high performance and widely used by throunds of companies'  --rpm-summary="Memcached cache" -a "x86_64"  --url "http://www.memcached.org/"    -C ~/john/tmp/installdir/    --before-install ~/john/tmp/beforeinstall.sh  --after-install ~/john/tmp/afterinstall.sh  --before-remove ~/john/tmp/beforeremove.sh   --after-remove ~/john/tmp/afterremove.sh

生成一个rpm包memcached-1.4.7-0.x86_64.rpm

再到另外一台服务器上测试能否正常安装和使用# yum -y install libevent libevent-devel

# rpm -ivh memcached-1.4.7-0.x86_64.rpm

# rpm -qa|grep memcached

# rpm -qi memcached-1.4.7-0.x86_64

# rpm -ql memcached-1.4.7-0.x86_64

# man memcached

编译安装的man手册导入时修改/etc/man.conf文件然后根据安装后的路径指定MANPATH即可

OK,整个如何使用fpm用源码包制作rpm包的教程结束

参考文档:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值