使用FPM自定义打包
2016-06-10 16:23
477 查看
1.安装FPMyum -y install ruby-devel gcc make ruby rubygemsgem 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 image. 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 <source type> -t <target type> [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)directoriestar(.gz) archivesrpmdebnode packages (npm)pacman (ArchLinux) packagesTargets:debrpmsolaristardirectoriesMac OS X
.pkgfiles (
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 <num> TCP port number to listen on (default: 11211) -U <num> UDP port number to listen on (default: 11211, 0 is off) -s <file> UNIX socket path to listen on (disables network support) -a <mask> access mask for UNIX socket, in octal (default: 0700) -l <addr> interface to listen on (default: INADDR_ANY, all addresses) <addr> 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.shif [ "$1" -ge 1 ]; then/sbin/service memcached condrestart > /dev/null 2>&1fiexit 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包的教程结束参考文档:https://github.com/jordansissel/fpmhttp://dockerfile.github.io/http://dockerfile.github.io/#/fpmhttps://rvm.io/http://tecadmin.net/install-ruby-2-2-on-centos-rhel/#http://www.ducea.com/2011/08/31/build-your-own-packages-easily-with-fpm/本文出自 “Linux SA John” 博客,请务必保留此出处http://john88wang.blog.51cto.com/2165294/1787783
相关文章推荐
- windows 桌面/desktop 及 MessageBox(MB_TOPMOST)
- 统计学 入门基础PDF( Probability Density Function) 和PMF ( Probability Mass Function )
- JBPM实际web应用
- JBPM—web流程设计器
- JBPM高级里面的会签,回退,自有流
- JBPM高级(和业务系统整合)
- JBPM初级部署,发起,完成,查询流程
- JBPM的第一个hellow的实例
- JBPM的环境搭建(一)
- 16进制ascii码转化为对应的字符,付ipmitool查询硬件信息
- npm
- 【原】npm 常用命令详解
- rpm
- 将.rpm转换为.tar.gz
- JBPM4.4入门学习一:JBPM安装配置及构建数据库环境
- 浅析AM335x GPMC模块地址区域的划分–TI–Sitara AM335x系列
- npm使用介绍
- 产品经理应该先写需求文档还是先画原型?
- APMServ5.2.0设置rewrite开启使用.htaccess的方法
- 产品经理