FPM打包工具
转载
支持的源类型包:
- dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包
- rpm: 对rpm进行转换
- gem: 对rubygem包进行转换
- python: 将Python模块打包成相应的类型
支持的目标类型包:
- rpm: 转换为rpm包
- deb: 转换为deb包
- solaris: 转换为solaris包
- puppet: 转换为puppet包
FPM的安装:
安装ruby环境和gem命令:
1
|
yum - y install ruby rubygems ruby - devel |
gem命令是从rubygem仓库安装软件类似yum从yum仓库安装软件
查看当前源:
1
2
3
|
[root@localhost~] # gem source list * * * CURRENT SOURCES * * * http: / / rubygems.org / |
添加国内源:
1
|
[root@localhost~] # gem sources -a http://mirrors.aliyun.com/rubygems/ |
移除国外源:
1
|
[root@localhost~] # gem sources --remove http://rubygems.org/ |
安装FPM工具:
1
|
[root@localhost~] # gem install fpm |
1
|
[root@loaclhost~] #sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf //开启yum缓存 |
FPM常用参数:
-s:指定源类型
-t:指定目标类型,即想要制作为什么包
-n:指定包的名字
-v:指定包的版本号
-C:指定打包的相对路径
-d:指定依赖于哪些包
-f:第二次包时目录下如果有同名安装包存在,则覆盖它
-p:输出的安装包的目录,不想放在当前目录下就需要指定
--post-install:软件包安装完成之后所要运行的脚本;同--offer-install
--pre-install:软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall:软件包卸载完成之后所要运行的脚本;同--offer-remove
--pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove
安装遇到问题:
1
2
3
4
5
6
7
|
1.Need executable 'rpmbuild' to convert dir to rpm {:level = >:error} 解决方法: [root@localhost] # yum install -y rpm-build 2. 如果里面有gcc make的错误. 解决方法: yum install - y gcc |
fpm打包实例:
1.fpm打包Nginx
1
2
3
4
|
[root@localhost opt] # fpm -s dir -t rpm -n nginx -v 1.6.1 -d 'pcre-devel,openssl-devel' --post-install /opt/nginx_rpm.sh -f /opt/nginx/ <br> no value for epoch is set , defaulting to nil {:level = >:warn} no value for epoch is set , defaulting to nil {:level = >:warn} Created package {:path = > "nginx-1.6.1-1.x86_64.rpm" } |
2.fpm相对路径打包:
1
2
3
4
|
[root@localhost~] # fpm -s dir -t rpm -n opt -v 1.1.1.1 -d 'gcc,gcc+' -C ../opt/ no value for epoch is set , defaulting to nil {:level = >:warn} no value for epoch is set , defaulting to nil {:level = >:warn} Created package {:path = > "opt-1.1.1.1-1.x86_64.rpm" } |
3.使用fpm将生成包指定到/tmp下:
1
2
3
4
5
|
[root@bogon ~] # fpm -s dir -t rpm -n ansible-v 1.1.1.1 -d 'gcc,gcc+' -f ansible-p /tmp/ no value for epoch is set , defaulting to nil {:level = >:warn} no value for epoch is set , defaulting to nil {:level = >:warn} Created package {:path = > "/tmp/ansible-1.1.1.1-1.x86_64.rpm" } |
查看rpm包信息:
1.查看rpm执行的脚本
1
2
3
4
|
[root@localhost opt] # rpm -qp --scripts nginx-1.6.1-1.x86_64.rpm postinstallscriptlet (using / bin / sh): #!/bin/bash useraddnginx - M - s / sbin / nologin |
2.查看rpm包的依赖
1
2
3
4
5
|
[root@localhost opt] # rpm -qpR nginx-1.6.1-1.x86_64.rpm openssl - devel / bin / sh rpmlib(PayloadFilesHavePrefix) < = 4.0 - 1 rpmlib(CompressedFileNames) < = 3.0 . 4 - 1 |
3.查看rpm包中的内容:
1
|
rpm - qpl zabbix - 3.0 - 1.x86_64 .rpm |
镜像同步公网YUM源:
1
2
3
4
|
centos官方标准源: rsync: / / mirrors.ustc.edu.cn / centos / 6 / os / x86_64 / rsync: / / mirrors.ustc.edu.cn / centos / 6 / extras / x86_64 / rsync: / / mirrors.ustc.edu.cn / centos / 6 / updates / x86_64 / |
epel源:
1
|
rsync: / / mirrors.ustc.edu.cn / epel / 6 / x86_64 / |
命令:reposync
fpm -s dir -t rpm -n flume -v 0.0.0.1 --post-install /root/flume.sh --url 'flume.com' -C /data/flume/ --prefix /data/cloud/flume/ --vendor 'wangjing1@gomeholdings.com' --iteration 20170508.CentOS6.8
参考文档:
http://blog.oldboyedu.com/autodeploy-rpm/
http://www.zyops.com/autodeploy-rpm