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