定制rpm包
(一) ~ FPM打包工具
I.支持的源類型包
1.dir 將目錄打包成所需要的類型,可以用於源碼編譯安裝的軟件包
2.rpm 對rpm進行轉換
3.gem 對rubygem包進行轉換
4.python 將python模塊打包成相應的類型
II.支持的目標類型包
1.rpm 轉換為rpm包
2.deb 轉換為deb包
3.solaris 轉換為solaris包
4.puppet 轉換為puppet模塊
III.FPM安裝
1.fpm是ruby寫的,因此系統環境需要ruby,且ruby版本號大於1.8.5。
2.#安裝ruby模塊
yum -y install ruby rubygems ruby-devel
3.# 添加阿裏雲的Rubygems倉庫,國外資源會影響下載速度
gem sources -a http://mirrors.aliyun.com/rubygems/ http://mirrors.aliyun.com/rubygems/added to sources
4.移除原生的ruby倉庫
gem sources --remove http://rubygems.org/
5.#安裝fpm,gem從rubygem倉庫安裝軟件類似yum從yum倉庫安裝軟件。首先安裝低版本的json,高版本的json需要ruby2.0以上,然後安裝低版本的fpm,夠用。
gem install json -v 1.8.3
gem install fpm -v 1.3.3
#此處如果安裝不上,先安裝gem installfpm 然後在安裝gem install fpm -v 1.3.3
#上面的2步安裝僅適合CentOS6系統,CentOS7系統一步搞定,即gem install fpm
#如果fpm安裝不上先將fpm版本去掉安裝gem install fpm然後在進行安裝對應版本gem install fpm -v 1.3.3
(二) ~ FPM參數
詳細使用見fpm -help
常用參數
1.-s 指定源類型
2.-t 指定目標類型,即想要制作為什麽包
3.-n 指定包的名字
4.-v 指定包的版本號
5.-C 指定打包的相對路徑 Change directory to here before searchingforfiles
6.-d 指定依賴於哪些包
7.-f 第二次打包時目錄下如果有同名安裝包存在,則覆蓋它
8.-p 輸出的安裝包的目錄,不想放在當前目錄下就需要指定
9.--post-install 軟件包安裝完成之後所要運行的腳本;同--after-install
10.--pre-install 軟件包安裝完成之前所要運行的腳本;同--before-install
11.--post-uninstall 軟件包卸載完成之後所要運行的腳本;同--after-remove
12.--pre-uninstall 軟件包卸載完成之前所要運行的腳本;同--before-remove
(三) ~ RPM包常用命令組合
#查看rpm幫助
man rpm
#查看rpm包信息
rpm -qpi 包名
#查看rpm包內容
rpm -qpl 包名
#查看rpm包的依賴
rpm -qpR 包名
#查看rpm包帶的執行腳本,執行腳本不是以文件形式存在rpm包中
rpm -qp–scripts 包名
#安裝rpm包
rpm -ivh 包名
rpm -ivh --aid*.rpm
#--aid參數解決RPM包循環依賴的問題,及當前目錄有所有相互依賴的rpm包。就可以用這種方法
#查看文件屬於哪個軟件包
rpm -qf /etc/my.cnf
rpm -qf `which+命令`
註意:(一)要使用絕對路徑打包
1.# 相對路徑
[root@oldboynginx]# fpm -s dir -t rpm -n nginx -v 1.6.2 .
no valuefor epoch is set, defaulting to nil {:level=>:warn}
no valuefor epoch is set, defaulting to nil {:level=>:warn}
Createdpackage {:path=>"nginx-1.6.2-1.x86_64.rpm"}
[root@oldboynginx]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
/client_body_temp
/conf/extra/dynamic_pools
/conf/extra/static_pools
…………
3.# 絕對路徑
[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v1.6.2 /application/nginx-1.6.2/
no valuefor epoch is set, defaulting to nil {:level=>:warn}
no valuefor epoch is set, defaulting to nil {:level=>:warn}
Createdpackage {:path=>"nginx-1.6.2-1.x86_64.rpm"}
[root@oldboy~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
/application/nginx-1.6.2/client_body_temp
/application/nginx-1.6.2/conf/extra/dynamic_pools
/application/nginx-1.6.2/conf/extra/static_pools
/application/nginx-1.6.2/conf/fastcgi.conf
/application/nginx-1.6.2/conf/fastcgi.conf.default
…………
註:fpm類似tar打包一樣,只是fpm打的包能夠被yum命令識別而已。
註意:(二)軟鏈接問題 不能使用軟鏈接打包,使用安裝目錄打包
1.[root@oldboy~]# fpm -s dir -t rpm -n nginx -v 1.6.2 /application/nginx
no valuefor epoch is set, defaulting to nil {:level=>:warn}
Filealready exists, refusing to continue: nginx-1.6.2-1.x86_64.rpm{:level=>:fatal}
# 報錯是因為當前目錄存在同名的rpm包,可以使用-f參數強制覆蓋。
2.[root@oldboy~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -f /application/nginx
no valuefor epoch is set, defaulting to nil {:level=>:warn}
Force flaggiven. Overwriting package at nginx-1.6.2-1.x86_64.rpm {:level=>:warn}
no valuefor epoch is set, defaulting to nil {:level=>:warn}
Createdpackage {:path=>"nginx-1.6.2-1.x86_64.rpm"}
打包看似成功,但查看包的內容,只是這一個軟鏈接文件。
3.[root@oldboy~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
/application/nginx
原因:目錄結尾的/問題,類似rm刪除軟鏈接目錄
註意:(三)yum 安裝本地倉庫軟件時,yum不上,先清下本地緩存在進行安裝
安裝rpm包
命令安裝rpm包
yum localinstallnginx-1.10.2-1.x86_64.rpm
這個命令會自動先從網絡安裝rpm包的依賴,然後再安裝Nginx的rpm包
rpm 命令安裝 報沒有pcre-devel openssl-devel這兩個包
rpm -ivh nginx-1.10.2-1.x86_64.rpm
會發現報如下錯誤
[root@m01tools]# rpm -ivh nginx-1.10.2-1.x86_64.rpm
error:Failed dependencies:
pcre-devel is needed by nginx-1.10.2-1.x86_64
openssl-devel is needed by nginx-1.10.2-1.x86_64
解決方法:
1、yum安裝依賴包
2、rpm -ivh openssl-devel1.0.1e-42.e16.x86_64.rpm
rpm -ivh pcre-devel-7.8.7.e16.x86_64.rpm
3、如果本機已有所有的依賴包,就可以用下面的方法
tar xfnginx_yum.tar.gz
#將所有的rpm包放在一個目錄
rpm -ivh--aid *.rpm
(四) ~ 打包實例
nginx打包
(1).編寫腳本
#cat /server/scripts/nginx_rpm.sh #這是安裝完rpm包要執行的腳本
#!/bin/sh
#Custom rpmpackage to be implemented by YH
NGINXversion=1.10.2
##Judge wwwusers do not exist ##判斷www用戶存在不存在
id www >/dev/null2>&1
if [ $? -eq0 ];then
echo "OK"
else
useradd -s /sbin/nologin -M www -u 1003
fi
#Judgenginx and no soft links ##判斷nginx又沒有軟鏈接
ls -l/application/nginx &>/dev/null
if [ $? -eq0 ];then
echo "OK"
else
/bin/ln-s /application/nginx-$NGINXversion /application/nginx
fi
#echo -e ‘\n#NginxServer\n/etc/init.d/nginx start’ >>/etc/rc.local
(2) 打包
#fpm -s dir -t rpm -nnginx -v 1.10.2 -d ‘pcre-devel,openssl-devel‘ --post-install/server/scripts/nginx_rpm.sh -f /application/nginx-1.10.2/
2.php打包
(1) 編寫腳本
#cat /server/scripts/php-install.sh
#!/bin/sh
id www&>/dev/null
[ $? -eq 0] || /usr/sbin/useradd -M -s /sbin/nologin -u 1003 www
ln -s/application/php-5.5.32/ /application/php
/application/php/sbin/php-fpm
grep"/application/php/sbin/php-fpm" /etc/rc.local &>/dev/null
[ $? -eq 0] || \
echo -e"\n#php-fpm start from the boot\n/application/php/sbin/php-fpm">> /etc/rc.local
(2) 打包
#fpm -s dir-t rpm -n php -v 5.5.32 -d‘zlib-devel,libxml2-devel,libjpeg-devel,libjpeg-turbo-devel,libiconv,freetype-devel,libpng-devel,gd-devel,libcurl-devel,libxslt-devel,libmcrypt-devel,mhash,mcrypt‘--post-install /server/scripts/php-rpm.sh -f /application/php-5.5.32/ /usr/local/libiconv
3.mysql打包
(1)編寫腳本
#cat mysql_install.sh
#!/bin/sh
#Installmysql ready
id mysql&>/dev/null
if [ $? -eq0 ];then
echo "OK" &>/dev/null
else
useradd -s /sbin/nologin -M mysql
fi
ln -s/application/mysql-5.6.34/ /application/mysql
#Modifypermissions
chown -Rmysql.mysql /application/mysql/
#Configurethe self-starting program
/bin/cp/application/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x/etc/init.d/mysqld
chkconfig--add mysqld
chkconfigmysqld on
sed -i‘s#/usr/local/mysql#/application/mysql#g‘ /application/mysql/bin/mysqld_safe/etc/init.d/mysqld
/bin/cp -a/application/mysql/bin/* /usr/local/sbin/
\cp/application/mysql/support-files/my-default.cnf /etc/my.cnf
/etc/init.d/mysqldstart
#Configureenvironment variables
grep"/application/mysql/bin" /etc/profile &>/dev/null
[ $? -eq 0] || echo ‘export PATH="/application/mysql/bin:$PATH"‘ >>/etc/profile
source/etc/profile
(2)打包
#fpm -s dir-t rpm -n mysql -v 5.6.34 -d ‘ncurses-devel‘ --post-install/server/scripts/mysql_rpm.sh -f /application/mysql-5.6.34/
本文出自 “丨Faith丶丨” 博客,請務必保留此出處http://13232152.blog.51cto.com/13222152/1981046
定制rpm包