天天看点

使用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