使用fpm制作rpm包
-
工作中有如下情況的需要将檔案打包rpm: 1、避免重複工作,将源碼程式打包成rpm。
2、使用yum釋出項目,項目打包成rpm。
3、将自己寫好的程式打包成rpm,提供給使用者下載下傳。
4、其他。
-
支援的源類型包:dir: 将目錄打包成所需要的類型,可以用于源碼編譯安裝的軟體包。
rpm: 對rpm進行轉換。
gem: 對rubygem包進行轉換。
python: 将Python子產品打包成相應的類型。
-
支援的目标類型包:rpm: 轉換為rpm包。
deb: 轉換為deb包。
solaris: 轉換為solaris包。
puppet: 轉換為puppet包。
-
fpm常用的參數:-a: 指定使用的系統架構類型,如:x86_64
-s: 指定源類型
-t: 指定目标類型,即想要制作為什麼包
-n: 指定包的名字
-v: 指定包的釋出版本号
--iteration release值,釋出序列号
-C: 指定打包的相對路徑
-d: 指定依賴于哪些包。例:-d 'name' or -d 'name > version'
-f: 第二次包時目錄下如果有同名安裝包存在,則覆寫它;
-p: 制作的rpm安裝包存放路徑,不想放在目前目錄下就需要指定;
--description: 描述資訊
--url: 指定軟體的網址(可選)
--pre-install:表示安裝之前所要運作的腳本
--post-install: 軟體包安裝完成之後所要運作的腳本;同--offer-install
--post-uninstall: 軟體包解除安裝完成之後所要運作的腳本;同--offer-remove
--pre-uninstall: 軟體包解除安裝完成之前所要運作的腳本;同—before-remove
--prefix: 制作好的rpm包預設安裝路徑;
--category: 包屬于什麼類别category ‘類别名’
--vendor: 包的供應商 --vendor ‘名稱’
-m, --maintainer 包的維護者 郵箱帳号
--license 許可證的名稱
--rpm-compression 壓縮的方法
-
安裝fpm:fpm使用ruby寫的是以先安裝ruby
fuby官網下載下傳http://www.ruby-lang.org/en/downloads/ruby-2.3.1.tar.gz
編譯安裝
cd /opt/tools
tar xf ruby-2.3.1.tar.gz
cd ruby-2.3.1
./configure –prefix=/usr/local/ruby-2.3.1
make && make install
ln –s /usr/local/ruby-2.3.1 /usr/local/ruby
可以将/usr/local/ruby/bin/下的指令複制到/usr/bin/下
cp /usr/local/ruby/bin/* /usr/bin/
安裝fpm
gem install fpm
檢視fpm指令
ls /usr/local/ruby/bin/fpm
- 将剛剛安裝的ruby源碼包制作成rpm包:
# 建立一個目錄
mkdir /fpm
cd /fpm
# 編寫安裝之後執行的腳本
cat ruby_post_in.sh
#!/bin/bash
ln -s /usr/local/ruby-2.3.1 /usr/local/ruby
cp /usr/local/ruby/bin/* /usr/bin
# 編寫解除安裝之後執行的腳本
cat ruby_post_un.sh
#!/bin/bash
rm -rf /usr/local/ruby
rm -rf /usr/local/ruby-2.3.1
rm -f /usr/bin/gem
rm -f /usr/bin/erb
rm -f /usr/bin/irb
rm -f /usr/bin/rake
rm -f /usr/bin/rdoc
rm -f /usr/bin/ri
rm -f /usr/bin/ruby
# 制作rpm包
/usr/local/ruby/bin/fpm -s dir -t rpm -n ruby -v 2.3.1 --post-install /fpm/ruby_post_in.sh --post-uninstall /fpm/ruby_post_un.sh -f /usr/local/ruby-2.3.1
制作的rpm包預設放在目前目錄下,-p:制作的rpm安裝包存放路徑,不想放在目前目錄下就需要指定。
結果出現一下資訊表示制作完成:
created package {:path=>"ruby-2.3.1-1.x86_64.rpm"}
檢視rpm包的資訊:
安裝測試。
打包zabbix-agent rpm包
整個打包的思路:
- 安裝rpm包之前需要操作什麼?檢查agent有沒有安裝,檢視/usr/lcoal/zabbix_agent-3.0.3這個目錄有沒有存在就行了,存在就說明安裝過了,退出腳本
- 安裝rpm包之後需要操作什麼? 裝到/usr/lcoal/zabbix_agent-3.0.3這個目錄了,需要修改配置檔案,配置啟動腳本,加到開機自啟動
- 解除安裝rpm包之前需要操作什麼? 解除安裝之前先要停伺服器吧,是以檢查服務有沒有運作,如果運作,就停掉
- 解除安裝rpm之後需要操作什麼?解除安裝之後啟動腳本是單獨配置的,需要删除吧,檢查 /usr/lcoal/zabbix_agent-3.0.3,删除了嗎?把安裝的目錄和檔案都删除掉
第一步:在伺服器上編譯安裝zabbix-agent,安裝目錄在/usr/local/zabbix-agent,啟動腳本,配置檔案,可以正常啟動和關閉,安裝過程省略。
第二步:編寫腳本:
zabbix_agent_pre_install.sh 安裝rpm之前執行的操作
#!/bin/bash
if ! id zabbix &>/dev/null;then
useradd -r zabbix -s /sbin/nologin -M &>/dev/null
fi
zabbix_agent_post_install.sh 安裝rpm之後執行的操作
#!/bin/bash
ln -s /usr/local/zabbix_agent-3.0.3/ /usr/local/zabbix &>/dev/null
sed -i "s#Hostname=Zabbix server#Hostname=`hostname`#g" /usr/local/zabbix/etc/zabbix_agentd.conf &>/dev/null
chkconfig --add zabbix_agentd &>/dev/null
chkconfig zabbix_agentd on &>/dev/null
zabbix_agent_pre_uninstall.sh 解除安裝rpm之前執行的操作
#!/bin/bash
process=`netstat -nlptu|grep zabbix_agentd|wc -l`
if [ $process -ne 0 ];then
/etc/init.d/zabbix_agentd stop &>/dev/null
fi
#!/bin/bash
User=`grep "\<zabbix\>" /etc/passwd|wc -l`
if [ $User -ne 0 ];then
userdel -r zabbix &>/dev/null
fi
find /etc/ -type f -name "zabbix_agentd"|xargs rm -f &>/dev/null
find /usr/local/ -type l -name "zabbix"|xargs rm -f $>/dev/null
find /usr/local/ -type d -name "zabbix_agent*"|xargs rm -rf &>/dev/null
fpm -s dir -t rpm -n zabbix-agent -v 3.0.3 --iteration 5.e17 --category 'Applications/Internet' \
--vendor 'wifiin' -m 'wifiin BuildSystem <[email protected]>' -p /tmp --license GPL2+ --url http://www.wifiin.com \
--pre-install /server/scripts/zabbix_agent_pre_install.sh \
--post-install /server/scripts/zabbix_agent_post_install.sh \
--pre-uninstall /server/scripts/zabbix_agent_pre_uninstall.sh \
--post-uninstall /server/scripts/zabbix_agent_post_uninstall.sh \
--description 'The Zabbix client agent, to be installed on monitored systems.' \
--rpm-compression xz -f /usr/local/zabbix_agent-3.0.3/ /lib/systemd/system/zabbix-agent.service