FPM定制RPM包實踐
1.1 快速部署方案
? 問題:當領導給你 100 臺已經安裝好系統的服務器,然後讓優化,讓你提出一個快速部署方案。
解答:
1.tar 打包 先編譯安裝 打包--》分發--》解包(比如 mysql 打包後直接就可以使用
2.SaltStack,puppet,ansible
3.定制 rpm yum 倉庫 yum 安裝
4.openstack 虛擬機鏡像和 docker 容器分發
1.2 回顧下安裝軟件的三種方式:
1、編譯安裝軟件,優點是可以定制化安裝目錄、按需開啟功能等,缺點是需要查找並實驗出適合的編譯參數,諸如MySQL之類的軟件編譯耗時過長。
2、yum安裝軟件,優點是全自動化安裝,不需要為依賴問題發愁了,缺點是自主性太差,軟件的功能、存放位置都已經固定好了,不易變更。
===>如果你現在還為是使用編譯安裝軟件還是使用yum安裝軟件發愁,那你就out了。
3、編譯源碼,根據自己的需求做成定制RPM包–>搭建內網yum倉庫–yum安裝。結合前兩者的優點,暫未發現什麽缺點。可能的缺點就是RPM包的通用性差,只能適用於本公司的環境。另外一般人不會定制RPM包。這是中大型互聯網企業運維自動化的必要技能。
這裏也不介紹rpm的概念,想了解的朋友可以查看http://www.ibm.com/developerworks/cn/linux/l-rpm/。
1.3 FPM打包工具
FPM的作者是jordansissel
FPM的github:
FPM功能簡單說就是將一種類型的包轉換成另一種類型。
1.3.1 支持的源類型包
類型 |
說明 |
dir |
將目錄打包成所需要的類型,可以用於源碼編譯安裝的軟件包 |
rpm |
對rpm進行轉換 |
gem |
對rubygem包進行轉換 |
python |
將python模塊打包成相應的類型 |
1.3.2 支持的目標類型包
類型 |
說明 |
rpm |
轉換為rpm包 |
deb |
轉換為deb包 |
solaris |
轉換為solaris包 |
puppet |
轉換為puppet模塊 |
1.4 FPM的安裝與使用
1.4.1 安裝FPM工具
fpm是ruby寫的,因此系統環境需要ruby,且ruby版本號大於1.8.5。
# 安裝ruby模塊
yum -y install ruby rubygems ruby-devel [root@test ~]# rpm -qa ruby rubygems ruby-devel ruby-1.8.7.374-5.el6.x86_64 ruby-devel-1.8.7.374-5.el6.x86_64 rubygems-1.3.7-5.el6.noarch
# 查看當前使用的rubygems倉庫
gem sources list
# 添加阿裏雲的Rubygems倉庫,外國的源慢,移除原生的Ruby倉庫
gem sources -a http://mirrors.aliyun.com/rubygems/ gem sources --remove http://rubygems.org/
# 安裝fpm,gem從rubygem倉庫安裝軟件類似yum從yum倉庫安裝軟件。首先安裝低版本的json,高版本的json需要ruby2.0以上,然後安裝低版本的fpm,夠用。
gem install json -v 1.8.3 gem install fpm -v 1.3.3
# 上面的2步安裝僅適合CentOS6系統,CentOS7系統一步搞定,即gem install fpm
1.4.2 FPM工具常用參數
參數 |
參數說明 |
-s |
指定源類型 |
-t |
指定目標類型,即想要制作為什麽包 |
-n |
指定包的名字 |
-v |
指定包的版本號 |
-C |
指定打包的相對路徑 |
-d |
指定依賴於哪些包 |
-f |
第二次打包時目錄下如果有同名安裝包存在,則覆蓋它 |
-p |
輸出的安裝包的目錄,不想放在當前目錄下就需要指定 |
--post-install |
軟件包安裝完成之後所要運行的腳本;同--after-install |
--pre-install |
軟件包安裝完成之前所要運行的腳本;同--before-install |
--post-uninstall |
軟件包卸載完成之後所要運行的腳本;同--after-remove |
--pre-uninstall |
軟件包卸載完成之前所要運行的腳本;同--before-remove |
至此,FPM工具安裝完成。
1.5 【實例】定制nginx的RPM包
1.5.1 安裝nginx(一鍵化腳本)
yum install -y pcre-devel openssl-devel mkdir -p /server/tools cd /server/tools wget -q http://nginx.org/download/nginx-1.10.2.tar.gz ls -l nginx-1.10.2.tar.gz useradd www -s /sbin/nologin -M tar xf nginx-1.10.2.tar.gz cd nginx-1.10.2 ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.10.2 --with-http_stub_status_module --with-http_ssl_module make make install ln -s /application/nginx-1.10.2 /application/ngin
1.5.2 編寫腳本(for --post-install)
[root@test ~]# cd /server/scripts/ [root@test scripts]# vim nginx_install_devel.sh #!/bin/bash useradd -M -s /sbin/nologin www -u 666 ln -s /application/nginx/sbin/* /usr/local/sbin/ ln -sf /application/nginx-1.10.2 /application/nginx
1.5.3 打包-制作rpm包
註意:在進行打包的時候要將訪問停止
killall nginx
[root@test ~]# fpm -s dir -t rpm -n nginx -v 1.10.2 -d ‘pcre-devel,openssl-devel‘ --post-install /server/scripts/nginx_install_devel.sh -f /application/nginx-1.10.2/ no value for epoch is set, defaulting to nil {:level=>:warn} no value for epoch is set, defaulting to nil {:level=>:warn} Created package {:path=>"nginx-1.10.2-1.x86_64.rpm"}
1.5.4 安裝rpm包
推薦使用yum 安裝
yum -y localinstall nginx-1.10.2-1.x86_64.rpm
這個命令會自動先安裝rpm包的依賴,然後再安裝rpm包。
另:可以搭建本地yum倉庫實現yum 安裝自動解決依賴關系
FPM定制RPM包實踐