支持的源類型包:
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包安裝軟件即省事又安心,這是想要做標準化基礎的第一步;
自己維護安裝包源的倉庫,是運運維同學們的一個利器工具。
感謝製作者