天天看點

使用fpm制作rpm包

使用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包的資訊:​

使用fpm制作rpm包

安裝測試。​

打包zabbix-agent rpm包

整個打包的思路:

  1. 安裝rpm包之前需要操作什麼?檢查agent有沒有安裝,檢視/usr/lcoal/zabbix_agent-3.0.3這個目錄有沒有存在就行了,存在就說明安裝過了,退出腳本
  1. 安裝rpm包之後需要操作什麼? 裝到/usr/lcoal/zabbix_agent-3.0.3這個目錄了,需要修改配置檔案,配置啟動腳本,加到開機自啟動
  1. 解除安裝rpm包之前需要操作什麼? 解除安裝之前先要停伺服器吧,是以檢查服務有沒有運作,如果運作,就停掉
  1. 解除安裝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