您好,登錄后才能下訂單哦!
1.安裝FPM
yum -y install ruby-devel gcc make ruby rubygems
gem install fpm
注意,如果安裝fpm的過程中報(bào)ruby版本錯(cuò)誤,那么需要重新安裝ruby版本和對(duì)應(yīng)的依賴軟件。相當(dāng)麻煩。CentOS6默認(rèn)的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的各種依賴關(guān)系麻煩,可以使用Docker來部署fpm
準(zhǔn)備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 <source type> -t <target type> [list of sources]...
-s 表示制作包的來源,可以是dir目錄,也可以是rpm包,或者deb包等等,通常我們會(huì)用dir目錄自定義編譯
-t 表示制作包的類型,可以是rpm包或者deb包等等
-d 指定依賴包名稱,如 -d "libevent"
--force 如果生成的包已經(jīng)存在,則強(qiáng)制覆蓋
-C 指定源文件目錄
--verbose 詳細(xì)模式
--category 指定軟件包的類別,例如 Applications/Databases
--license 指定license名稱,例如GPL
--rpm-summary 指定rpm包的summary
--description 指定描述信息
--url 指定軟件的url信息
--iteration 指定迭代版本號(hào),rpm包就做release
--after-install 包安裝完后需要執(zhí)行的腳本
--before-install 包安裝之前需要執(zhí)行的腳本
--after-remove 包刪除之后需要執(zhí)行的腳本
--before-remove 包刪除之前需要執(zhí)行的腳本
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/
先按照正常的編譯安裝步驟將源碼包安裝在一個(gè)臨時(shí)目錄,等下再?gòu)倪@個(gè)臨時(shí)目錄制作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
這樣就簡(jiǎn)單制作了一個(gè)memcached的rpm包
然后找一臺(tái)沒有安裝過memcached的機(jī)子測(cè)試
# 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再測(cè)試下
# 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安裝后是可以正常工作的
以上只是簡(jiǎn)單地制作了一個(gè)RPM包,但是要投入使用的話還需要增加一些步驟,比如安裝rpm包的時(shí)候需要?jiǎng)?chuàng)建用戶,添加日志輪轉(zhuǎn),添加啟動(dòng)腳本,刪除rpm包的時(shí)候需要?jiǎng)h除用戶,刪除安裝目錄等
制作rpm或者deb包等是有技巧的,比如要制作memcached的rpm包,可以先用yum -y install memcached
安裝完memcached然后再通過rpm命令查看這個(gè)rpm包的各種信息,然后再根據(jù)自己的需求從新用源碼包制作rpm包
如果rpm還沒有安裝:
可以使用rpm -qpi 查看rpm包的信息
可以使用rpm -qpl 查看rpm包的文件
可以使用rpm -qp --scripts 查看rpm包的腳本信息
可以使用rpm -qpR 查看軟件包依賴關(guān)系
如果rpm包已經(jīng)安裝了:
# 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/
相關(guān)的啟動(dòng)文件自己進(jìn)行修改,例如memcached的安裝目錄等
再為安裝包添加相關(guān)腳本
# 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
生成一個(gè)rpm包memcached-1.4.7-0.x86_64.rpm
再到另外一臺(tái)服務(wù)器上測(cè)試能否正常安裝和使用
# 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手冊(cè)導(dǎo)入時(shí)修改/etc/man.conf文件然后根據(jù)安裝后的路徑指定MANPATH即可
OK,整個(gè)如何使用fpm用源碼包制作rpm包的教程結(jié)束
參考文檔:
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/
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。