1. 程式人生 > >FPM定製RPM包

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: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模組

1 2 3 4 5 6 yum -y  install  ruby rubygems ruby-devel   [[email protected] 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倉庫

1 gem sources list

# 新增阿里雲的Rubygems倉庫,外國的源慢,移除原生的Ruby倉庫

1 2 gem sources -a http: //mirrors .aliyun.com /rubygems/ gem sources --remove http: //rubygems .org/

# 安裝fpm,gem從rubygem倉庫安裝軟體類似yum從yum倉庫安裝軟體。首先安裝低版本的json,高版本的json需要ruby2.0以上,然後安裝低版本的fpm,夠用。

1 2 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包

  關於nginx的安裝,可以參考:http://www.cnblogs.com/clsn/p/7750615.html

1.5.1 安裝nginx(一鍵化指令碼)

1 2 3 4 5 6 7 8 9 10 11 12 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=www --group=www --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/nginx

1.5.2 編寫指令碼(for --post-install)

1 2 3 4 5 6 [[email protected] test  ~] # cd /server/scripts/ [[email protected] 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
[[email protected] ~]#  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 安裝

1 yum -y localinstall  nginx-1.10.2-1.x86_64.rpm

作者:慘綠少年 
出處:http://clsn.io