FPM工具制作RPM包

我们都有过源码编译安装解决依赖的痛苦,这对我们利用源码包编译安装的自动化实现增加了一定难度。今天提及的这款基于RUBY开发的工具 – FPM,可以帮助我们快速简单的打造自己的RPM包,一次编译,一劳永逸!

FPM不单是支持RPM包制作,其他linux系统debian的DEB包都可以实现。它同样可以将一些文件、文件夹打包成RPM包。

FPM安装


yum install -y rubygems ruby-devel rubygems-devel
gem list
gem source --list
gem source --addd https://ruby.taobao.org
gem source --remove http://rubygems.org
gem install fpm -v 1.4.0 -V #V是显示安装信息,这样安装会报错:提示fpm依赖的json包要求ruby 2.0以上版本
rpm -q ruby #我这里rpm安装的ruby,版本是1.8.7.374
gem install json -v 1.8.3 -V
gem install fpm -v 1.4.0 -V
which fpm #安装路径/usr/bin/fpm
fpm --help #查看帮助

FPM使用

准备工作

我们这里已zabbix 2.4安装为例。

mkdir -p /tmp/installer
cd /usr/src
wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.8/zabbix-2.4.8.tar.gz?r=http%3A%2F%2Fwww.zabbix.com%2Fdownload2&ts=1479440834&use_mirror=pilotfiber
tar zxf zabbix-2.4.8.tar.gz
cd zabbix-2.4.8
./configure --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2
make
make install DESTDIR=/tmp/installer #预装到一个空目标目录,以便于FPM的-C选项指定搜索文件目录
ls /tmp/installer #下面应该有/usr/local/

FPM创建RPM包


yum install -y rpm-build #依赖包
fpm -s dir -t rpm --vendor CentOS6.8 -n zabbix-server -v 2.4.8 --iteration release -d 'gcc,gcc-c++,mysql-devel,libxml2-devel,net-snmp-devel,libcurl-devel' --category 'Development/Lanuages' -m 'devops-test' --url 'http://putty.bz' --description 'zabbix server with agent' --license 'GNU' -C /tmp/installer
rpm -pql zabbix-server-2.4.8-release.x86_64.rpm #查看安装RPM包会产生的文件

以上命令运行完成会在当前目录生成一个zabbix-server-2.4.8-release.x86_64.rpm的RPM包。

一些常用的选项:

  • -s:指定源是文件还是文件夹
  • -t: 指定包的类别
  • -C: 指定要到哪里去搜索查找文件
  • –vendor:指定包的vendor名字
  • –prefix: 指定安装目录
  • -p: 指定包名和路径.
  • -n: 包名
  • -v: 包的版本号
  • –iteration: 包的发行信息
  • –license: 许可证.
  • –category: 在repos里的类目.
  • -d: 依赖包,可以分开使用多次指定,也一次性可以用逗号间隔.
  • –provides: 指定包提供的特定系统功能,一般用于有多种选择对应不同需求。
  • –conflicts: 指定有冲突的包.
  • –replaces: 指定需要卸载掉的包.
  • –config-files: 指定包里哪个文件是应用的配置文件.
  • –directories: 指定属于该包的目录.
  • -a: 包属性指定.
  • -m: 指定包的维护人员信息,默认是username@host.
  • -e: 在安装前查看并手动修改spec文件.
  • –description: 包的描述.
  • –after-install, –before-install, –after-remove, –before-remove: 安装/卸载前后的脚本.

RPM包使用


rpm -ivh zabbix-server-2.4.8-release.x86_64.rpm
yum install zabbix-server-2.4.8-release.x86_64.rpm #新机会自己解决依赖关系
rpm -q zabbix-server
rpm -ql zabbix-server
which zabbix_sender

postinstall – 创建zabbix用户


vim /tmp/post.sh
###
#!/usr/bin/env bash

id -g zabbix &> /dev/null || groupadd zabbix && echo "group created successful"
id -u zabbix &> /dev/null || useradd -g -M -s /sbin/nologin /zabbix zabbix && echo "user created successful"
###
vim /tmp/uninstaller.sh
###
#!/usr/bin/env bash

id -u zabbix &> /dev/null && userdel -r zabbix
###
fpm -s dir -t rpm --vendor CentOS6.8 -n zabbix-server -v 2.4.8 --iteration release -d 'gcc,gcc-c++,mysql-devel,libxml2-devel,net-snmp-devel,libcurl-devel' --category 'Development/Lanuages' -m 'devops-test' --url 'http://putty.bz' --description 'zabbix server with agent' --license 'GNU' -C /tmp/installer --post-install=/tmp/post.sh --post-uninstall=/tmp/uninstaller.sh