FPM定制RPM包实践
1.1 快速部署方案
✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案。
解答:
1.tar 打包 先编译安装 打包–》分发–》解包(比如 mysql 打包后直接就可以使用
2.SaltStack,puppet,ansible
3.定制 rpm yum 仓库 yum 安装
4.openstack 虚拟机镜像和 docker 容器分发
1.2 回顾下安装软件的三种方式:
===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了。
1.3 FPM打包工具
FPM的作者是jordansissel
FPM的github:https://github.com/jordansissel/fpm
FPM功能简单说就是将一种类型的包转换成另一种类型。
1.3.1 支持的源类型包
<td style="width: 367.1pt; border-top: 1pt solid #4bacc6; border-right: 1pt solid #4bacc6; border-bottom: 1pt solid #4bacc6; border-left: none; background: #4bacc6; padding: 0cm 5.4pt;" valign="top" width="489">
<p style="text-align: center;" align="center">
<strong><span style="font-family: '微软雅黑',sans-serif; courier new"4courier new";color: white;">说明</span></strong>
</p>
</td>
<td style="width: 367.1pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="489">
<p>
<span style="font-family: '微软雅黑',sans-serif;">将目录打包成所需要的类型,可以用于源码编译安装的软件包</span>
</p>
</td>
<td style="width: 367.1pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="489">
<p>
<span style="font-family: '微软雅黑',sans-serif;">对</span>rpm<span style="font-family: '微软雅黑',sans-serif;">进行转换</span>
</p>
</td>
<td style="width: 367.1pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="489">
<p>
<span style="font-family: '微软雅黑',sans-serif;">对</span>rubygem<span style="font-family: '微软雅黑',sans-serif;">包进行转换</span>
</p>
</td>
<td style="width: 367.1pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="489">
<p>
<span style="font-family: '微软雅黑',sans-serif;">将</span>python<span style="font-family: '微软雅黑',sans-serif;">模块打包成相应的类型</span>
</p>
</td>
1.3.2 支持的目标类型包
<td style="width: 367.1pt; border-top: 1pt solid #4bacc6; border-right: 1pt solid #4bacc6; border-bottom: 1pt solid #4bacc6; border-left: none; background: #4bacc6; padding: 0cm 5.4pt;" valign="top" width="489">
<p style="text-align: center;" align="center">
<strong><span style="font-family: '微软雅黑',sans-serif; courier new"4courier new";color: white;">说明</span></strong>
</p>
</td>
<td style="width: 367.1pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="489">
<p>
<span style="font-family: '微软雅黑',sans-serif;">转换为</span>rpm<span style="font-family: '微软雅黑',sans-serif;">包</span>
</p>
</td>
<td style="width: 367.1pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="489">
<p>
<span style="font-family: '微软雅黑',sans-serif;">转换为</span>deb<span style="font-family: '微软雅黑',sans-serif;">包</span>
</p>
</td>
<td style="width: 367.1pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="489">
<p>
<span style="font-family: '微软雅黑',sans-serif;">转换为</span>solaris<span style="font-family: '微软雅黑',sans-serif;">包</span>
</p>
</td>
<td style="width: 367.1pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="489">
<p>
<span style="font-family: '微软雅黑',sans-serif;">转换为</span>puppet<span style="font-family: '微软雅黑',sans-serif;">模块</span>
</p>
</td>
1.4 FPM的安装与使用
1.4.1 安装FPM工具
fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。
# 安装ruby模块
[root@test ~]# rpm -qa ruby rubygems ruby-devel ruby-1.8.7.374-5.el6.x86_64 ruby-devel-1.8.7.374-5.el6.x86_64 rubygems-1.3.7-5.el6.noarch
# 查看当前使用的rubygems仓库
# 添加阿里云的Rubygems仓库,外国的源慢,移除原生的Ruby仓库
# 安装fpm,gem从rubygem仓库安装软件类似yum从yum仓库安装软件。首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。
# 上面的2步安装仅适合CentOS6系统,CentOS7系统一步搞定,即gem install fpm
1.4.2 FPM工具常用参数
<td style="width: 395.45pt; border-top: 1pt solid #4bacc6; border-right: 1pt solid #4bacc6; border-bottom: 1pt solid #4bacc6; border-left: none; background: #4bacc6; padding: 0cm 5.4pt;" valign="top" width="527">
<p style="text-align: center;" align="center">
<strong><span style="font-family: '微软雅黑',sans-serif; courier new"4courier new";color: white;">参数说明</span></strong>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">指定源类型</span>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">指定目标类型,即想要制作为什么包</span>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">指定包的名字</span>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">指定包的版本号</span>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">指定打包的相对路径</span>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">指定依赖于哪些包</span>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">第二次打包时目录下如果有同名安装包存在,则覆盖它</span>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">输出的安装包的目录,不想放在当前目录下就需要指定</span>
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">软件包安装完成之后所要运行的脚本;同</span>--after-install
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">软件包安装完成之前所要运行的脚本;同</span>--before-install
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; background: #DAEEF3; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">软件包卸载完成之后所要运行的脚本;同</span>--after-remove
</p>
</td>
<td style="width: 395.45pt; border-top: none; border-left: none; border-bottom: solid #92CDDC 1.0pt; border-right: solid #92CDDC 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="527">
<p>
<span style="font-family: '微软雅黑',sans-serif;">软件包卸载完成之前所要运行的脚本;同</span>--before-remove
</p>
</td>
至此,FPM工具安装完成。
1.5 【实例】定制nginx的RPM包
关于nginx的安装,可以参考:http://www.cnblogs.com/clsn/p/7750615.html
1.5.1 安装nginx(一键化脚本)
1.5.2 编写脚本(for –post-install)
1.5.3 打包-制作rpm包
1.5.4 安装rpm包
推荐使用yum 安装
这个命令会自动先安装rpm包的依赖,然后再安装rpm包。另:可以搭建本地yum仓库实现yum 安装自动解决依赖关系
<li>
<a href="#14_FPM">1.4 FPM的安装与使用</a><ul>
<li>
<a href="#141_FPM">1.4.1 安装FPM工具</a>
</li>
<li>
<a href="#142_FPM">1.4.2 FPM工具常用参数</a>
</li>
</ul>
</li>
<li>
<a href="#15_nginxRPM">1.5 【实例】定制nginx的RPM包</a><ul>
<li>
<a href="#151_nginx">1.5.1 安装nginx(一键化脚本)</a>
</li>
<li>
<a href="#152_for_--post-install">1.5.2 编写脚本(for --post-install)</a>
</li>
<li>
<a href="#153_-rpm">1.5.3 打包-制作rpm包</a>
</li>
<li>
<a href="#154_rpm">1.5.4 安装rpm包</a>
</li>
</ul>
</li>
- 原文作者:惨绿少年
- 原文链接:https://clsn.io/clsn/lx891.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。