首頁 > 軟體

FPM客製化RPM包實踐

2020-06-16 17:03:31

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.linuxidc.com/Linux/2017-10/148154.htm

1.3 FPM打包工具

FPM的作者是jordansissel

FPMgithubhttps://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 安裝自動解決依賴關係

#簡易的搭建yum源的方法可以參考↓ http://www.linuxidc.com/Linux/2017-10/148153.htm

 

本博文中所使用的系統版本為: CentOS release 6.9 (Final) 核心版本為: 2.6.32-696.10.1.el6.x86_64 望讀者注意! 大家如果有什麼問題可以留言!我看到後會盡快回復!

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-10/148152.htm


IT145.com E-mail:sddin#qq.com