2021-05-12 14:32:11
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包。這是中大型網際網路企業運維自動化的必要技能。
1.3 FPM打包工具
FPM的作者是jordansissel
FPM的github:https://github.com/jordansissel/fpm
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 安裝自動解決依賴關係
#簡易的搭建yum源的方法可以參考↓ http://www.linuxidc.com/Linux/2017-10/148153.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-10/148152.htm
相關文章