使用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-sSLhttps://rvm.io/mpapis.asc|gpg--import-
#curl-Lget.rvm.io|bash-sstable#source/etc/profile.d/rvm.sh#rvmreload#rvmrequirementsrun#rvminstall2.3.0#ruby--versionruby2.3.0p0(2015-12-25revision53290)[x86_64-linux]
如果觉得解决ruby的各种依赖关系麻烦,可以使用Docker来部署fpm
准备Dockerfile
##FPMDockerfile##Pullbasep_w_picpath.FROMdocker.io/ruby#InstallFPM.RUNgeminstallfpm#Defineworkingdirectory.WORKDIR/data#Definedefaultcommand.CMD["bash"]
dockerbuild-tfpm.
docker run -it --rm fpm fpm --help 查看帮助
2.FPM使用
fpm-s<sourcetype>-t<targettype>[listofsources]...
-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-yinstalllibstdc++libeventlibevent-develwgethttp://memcached.googlecode.com/files/memcached-1.4.7.tar.gztarzxvfmemcached-1.4.7.tar.gzcdmemcached-1.4.7./configure--prefix=/opt/app/memcached--with-libevent=/usr/lib64/makemakeinstallDESTDIR=~/john/tmp/installdir/
先按照正常的编译安装步骤将源码包安装在一个临时目录,等下再从这个临时目录制作rpm包
fpm-sdir-trpm-nmemcached-v1.4.7-C~/john/tmp/installdir-d"libevent"-d"libevent-devel"-d"libstdc++"--force
或者可以指定依赖包的最低版本
#fpm-sdir-trpm-nmemcached-v1.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-ivhmemcached-1.4.7-1.x86_64.rpmerror:Faileddependencies:libeventisneededbymemcached-1.4.7-1.x86_64libevent-develisneededbymemcached-1.4.7-1.x86_64
安装好libevent和libevent-devel再测试下
#rpm-ivhmemcached-1.4.7-1.x86_64.rpmPreparing...###########################################[100%]1:memcached###########################################[100%]
#/opt/app/memcached/bin/memcached-hmemcached1.4.7-p<num>TCPportnumbertolistenon(default:11211)-U<num>UDPportnumbertolistenon(default:11211,0isoff)-s<file>UNIXsocketpathtolistenon(disablesnetworksupport)-a<mask>accessmaskforUNIXsocket,inoctal(default:0700)-l<addr>interfacetolistenon(default:INADDR_ANY,alladdresses)<addr>maybespecifiedashost:port.Ifyoudon'tspecifyaportnumber,thevalueyouspecifiedwith-por-Uisused.Youmayspecifymultipleaddressesseparatedbycommaorbyusing-lmultipletimes-drunasadaemon...............................
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-yinstallmemcached#rpm-qa|grepmemcached#rpm-qimemcached-1.4.4-3.el6.x86_64#rpm-qlmemcached-1.4.4-3.el6.x86_64#rpm-q--scriptsmemcached-1.4.4-3.el6.x86_64preinstallscriptlet(using/bin/sh):getentgroupmemcached>/dev/null||groupadd-rmemcachedgetentpasswdmemcached>/dev/null||\useradd-r-gmemcached-d/var/run/memcached\-s/sbin/nologin-c"Memcacheddaemon"memcachedexit0postinstallscriptlet(using/bin/sh):/sbin/chkconfig--addmemcachedpreuninstallscriptlet(using/bin/sh):if["$1"=0];then/sbin/servicememcachedstop>/dev/null2>&1/sbin/chkconfig--delmemcachedfiexit0postuninstallscriptlet(using/bin/sh):if["$1"-ge1];then/sbin/servicememcachedcondrestart>/dev/null2>&1fiexit0
再重新制作下memcached的rpm包
#cd~/john/tmp/installdir#rsync-R/etc/rc.d/init.d/memcached.#rsync-R/etc/sysconfig/memcached.#mkdir-pvar/run/memcached/
相关的启动文件自己进行修改,例如memcached的安装目录等
再为安装包添加相关脚本
#cd~/john/tmp#touchbeforeinstall.sh#touchafterinstall.sh#touchbeforeremove.sh#touchafterremove.sh
#!/bin/bash#beforeinstall.shgetentgroupmemcached>/dev/null||groupadd-rmemcachedgetentpasswdmemcached>/dev/null||\useradd-r-gmemcached-d/var/run/memcached\-s/sbin/nologin-c"Memcacheddaemon"memcachedexit0
#!/bin/bash#afterinstall.sh/sbin/chkconfig--addmemcachedsed-i'/^MANPATH\/opt\/app\/memcached\/share\/man/d'/etc/man.configsed-i'$aMANPATH/opt/app/memcached/share/man'/etc/man.config
#!/bin/bash#beforeremove.shif["$1"=0];then/sbin/servicememcachedstop>/dev/null2>&1/sbin/chkconfig--delmemcachedfiexit0
#!/bin/bash#afterremove.shif["$1"-ge1];then/sbin/servicememcachedcondrestart>/dev/null2>&1fiexit0
重新使用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-yinstalllibeventlibevent-devel#rpm-ivhmemcached-1.4.7-0.x86_64.rpm#rpm-qa|grepmemcached#rpm-qimemcached-1.4.7-0.x86_64#rpm-qlmemcached-1.4.7-0.x86_64#manmemcached
编译安装的man手册导入时修改/etc/man.conf文件然后根据安装后的路径指定MANPATH即可
OK,整个如何使用fpm用源码包制作rpm包的教程结束
参考文档:
https://github.com/jordansissel/fpm
http://dockerfile.github.io/
http://dockerfile.github.io/#/fpm
https://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/
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。