1. 程式人生 > >FPM定制RPM包實踐

FPM定制RPM包實踐

module aps local border 當前 scrip -m linux hit

1.1 快速部署方案

? 問題:當領導給你 100 臺已經安裝好系統的服務器,然後讓優化,讓你提出一個快速部署方案。

解答:

  1.tar 打包 先編譯安裝 打包--》分發--》解包(比如 mysql 打包後直接就可以使用

  2.SaltStackpuppetansible

  3.定制 rpm yum 倉庫 yum 安裝

  4.openstack 虛擬機鏡像和 docker 容器分發

1.2 回顧下安裝軟件的三種方式:

1、編譯安裝軟件,優點是可以定制化安裝目錄、按需開啟功能等,缺點是需要查找並實驗出適合的編譯參數,諸如MySQL之類的軟件編譯耗時過長。

2yum安裝軟件,優點是全自動化安裝,不需要為依賴問題發愁了,缺點是自主性太差,軟件的功能、存放位置都已經固定好了,不易變更。

===>如果你現在還為是使用編譯安裝軟件還是使用yum安裝軟件發愁,那你就out了。

3、編譯源碼,根據自己的需求做成定制RPM包–>搭建內網yum倉庫–yum安裝。結合前兩者的優點,暫未發現什麽缺點。可能的缺點就是RPM包的通用性差,只能適用於本公司的環境。另外一般人不會定制RPM包。這是中大型互聯網企業運維自動化的必要技能。

這裏也不介紹rpm的概念,想了解的朋友可以查看http://www.ibm.com/developerworks/cn/linux/l-rpm/

1.3 FPM打包工具

FPM的作者是jordansissel

FPMgithub

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工具

fpmruby寫的,因此系統環境需要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/

# 安裝fpmgemrubygem倉庫安裝軟件類似yumyum倉庫安裝軟件。首先安裝低版本的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 【實例】定制nginxRPM

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包實踐