利用fpm製作rpm包

支持的源類型包:

  •  dir: 將目錄打包成所需要的類型,可以用於源碼編譯安裝的軟件包

  •  rpm: 對rpm進行轉換

  •  gem: 對rubygem包進行轉換

  •  python: 將Python模塊打包成相應的類型

支持的目標類型包:


    • rpm: 轉換爲rpm包

    • deb: 轉換爲deb包

    • solaris: 轉換爲solaris包

    • puppet: 轉換爲puppet包

FPM常用參數:

-s:指定源類型

-t:指定目標類型,即想要製作爲什麼包

-n:指定包的名字

-v:指定包的版本號

-C:指定打包的相對路徑

-d:指定依賴於哪些包

-f:第二次包時目錄下如果有同名安裝包存在,則覆蓋它;

-p:製作的rpm安裝包存放路徑,不想放在當前目錄下就需要指定;

--post-install:軟件包安裝完成之後所要運行的腳本;同--offer-install

--pre-install:軟件包安裝完成之前所要運行的腳本;同--before-install

--post-uninstall:軟件包卸載完成之後所要運行的腳本;同--offer-remove

--pre-uninstall:軟件包卸載完成之前所要運行的腳本;同—before-remove
--prefix:製作好的rpm包默認安裝路徑;


安裝FPM:

 環境:centos7.2.1511

# fpm是由ruby完成,所以需要ruby環境
yum install -y ruby rubygems ruby-devel
# 添加淘寶ruby源
gem sources -a http://ruby.taobao.org/
# 刪除默認的ruby源
gem sources --remove 
# 安裝fpm  centos7爲默認有gem centos7系統的話可能沒有需要另行安裝,請自行補腦
gem install fpm


測試打包一個nginx的rpm包來練手

# 創建一個單獨的目錄,乾淨
mkdir fpm && cd fpm
# 下載一個nginx源碼包
wget http://nginx.org/download/nginx-1.11.12.tar.gz
# 正常的解壓安裝
tar zxf nginx-1.11.12.tar.gz
cd nginx-1.11.12
# 中間爲報錯,缺少兩個依賴包,這裏先直接安裝了
yum install -y pcre-devel openssl-devel
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
make && make install

# 創建必要的配置文件及nginx啓動文件腳本等
mkdir -p /usr/local/nginx/conf/vhosts
# 在 /usr/local/nginx/conf/vhosts 添加一個虛擬主機test.conf
echo /usr/local/nginx/conf/vhosts/test.conf 
# 在nginx.conf配置文件中的http段添加一行
include /usr/local/nginx/vhosts/*.conf


 創建rpm包的執行腳本

mkdir scripts
echo '
#!/bin/bash

useradd nginx -M -s /sbin/nologin
echo '
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
' > /usr/lib/systemd/system/nginx.service

ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
' > scripts/nginx_init.sh


打包生成rpm包

fpm -s dir -t rpm -n nginx -v 1.11.12 -d 'pcre-devel,openssl-devel' --post-install /root/fpm/scripts/nginx_init.sh -f /usr/local/nginx

-s  指定源的類型,此源爲一個目錄即/usr/local/nginx
-t  指定目錄類型,即想要製作什麼包,有這些類型(rpm,deb,solaris,puppet)
-n  指定生成的包的名字
-v  指定生成的包的版本號
-d  指定依賴於哪些包,在安裝的時候,會先安裝,注,需要有yum倉庫源
-C  指定打包的相對路徑(最好是絕對路徑,這個參數一般不要使用,費勁)
-p  指定生成後的rpm存放在的目錄路徑(不用會在執行fpm的本地生成)
--post-install    指定rpm包安裝之後所需要運行的腳本,最好是絕對路徑
--pre-install     指定rpm包安裝之前甩需要運行的腳本,最好是絕對路徑
--post-uninstall  指定rpm包卸載之後所需要運行的腳本,最好是絕對路徑
--pre-uninstall   指定rpm包卸載之前所需要運行的腳本,最好是絕對路徑


# 此時本地目錄下以生成一個rpm包
# 在別一外臺機器上測試
yum install -y nginx-1.11.12.x86_64.rpm
# 查看之前創建的文件是否還在
ls /usr/local/nginx/conf/vhosts 
test.conf
# 使用systemctl啓動  
# 啓動腳本是在打包腳本里配置的,安裝完rpm包就會執行此腳本
systemctl start nginx
systemctl status nginx



fpm打包相對比較簡單明瞭

製作rpm包安裝軟件即省事又安心,這是想要做標準化基礎的第一步;

自己維護安裝包源的倉庫,是運運維同學們的一個利器工具。

感謝製作者



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章