FPM定制RPM包实践

1.1 快速部署方案

 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案。

解答:

  1.tar 打包 先编译安装 打包--》分发--》解包(比如 mysql 打包后直接就可以使用

  2.SaltStack,puppet,ansible

  3.定制 rpm yum 仓库 yum 安装

  4.openstack 虚拟机镜像和 docker 容器分发

1.2 回顾下安装软件的三种方式:

1、编译安装软件,优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长。

2、yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。

===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了。

3、编译源码,根据自己的需求做成定制RPM包–>搭建内网yum仓库–yum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是RPM包的通用性差,只能适用于本公司的环境。另外一般人不会定制RPM包。这是中大型互联网企业运维自动化的必要技能。

这里也不介绍rpm的概念,想了解的朋友可以查看http://www.ibm.com/developerworks/cn/linux/l-rpm/。

1.3 FPM打包工具

FPM的作者是jordansissel

FPM的github:https://github.com/jordansissel/fpm

FPM功能简单说就是将一种类型的包转换成另一种类型。

1.3.1 支持的源类型包


类型


说明


dir  


将目录打包成所需要的类型,可以用于源码编译安装的软件包


rpm  


对rpm进行转换


gem  


对rubygem包进行转换


python


将python模块打包成相应的类型

1.3.2 支持的目标类型包


类型


说明


rpm   


转换为rpm包


deb   


转换为deb包


solaris


转换为solaris包


puppet


转换为puppet模块

1.4 FPM的安装与使用

1.4.1 安装FPM工具

fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。

# 安装ruby模块

yum -y install ruby rubygems ruby-devel

[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仓库

gem sources list

# 添加阿里云的Rubygems仓库,外国的源慢,移除原生的Ruby仓库

gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove http://rubygems.org/

# 安装fpm,gem从rubygem仓库安装软件类似yum从yum仓库安装软件。首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。

gem install json -v 1.8.3
gem install fpm -v 1.3.3

# 上面的2步安装仅适合CentOS6系统,CentOS7系统一步搞定,即gem install fpm

1.4.2 FPM工具常用参数


参数


参数说明


-s


指定源类型


-t


指定目标类型,即想要制作为什么包


-n


指定包的名字


-v


指定包的版本号


-C


指定打包的相对路径 


-d


指定依赖于哪些包


-f


第二次打包时目录下如果有同名安装包存在,则覆盖它


-p


输出的安装包的目录,不想放在当前目录下就需要指定


--post-install 


软件包安装完成之后所要运行的脚本;同--after-install


--pre-install  


软件包安装完成之前所要运行的脚本;同--before-install


--post-uninstall


软件包卸载完成之后所要运行的脚本;同--after-remove


--pre-uninstall


软件包卸载完成之前所要运行的脚本;同--before-remove

至此,FPM工具安装完成。

1.5 【实例】定制nginx的RPM包

1.5.1 安装nginx(一键化脚本)

 

yum install -y pcre-devel openssl-devel
mkdir -p /server/tools
cd /server/tools
wget -q http://nginx.org/download/nginx-1.10.2.tar.gz
ls -l nginx-1.10.2.tar.gz
useradd www -s /sbin/nologin -M
tar xf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure  --user=www --group=www --prefix=/application/nginx-1.10.2 --with-http_stub_status_module  --with-http_ssl_module
make
make install
ln -s /application/nginx-1.10.2 /application/ngin

 

1.5.2 编写脚本(for --post-install)

[root@test ~]# cd /server/scripts/
[root@test scripts]# vim nginx_install_devel.sh
#!/bin/bash
useradd -M -s /sbin/nologin www -u 666
ln -s /application/nginx/sbin/* /usr/local/sbin/
ln -sf /application/nginx-1.10.2   /application/nginx

1.5.3 打包-制作rpm包

注意:在进行打包的时候要将访问停止

killall nginx

[root@test ~]#  fpm -s dir -t rpm -n nginx -v 1.10.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_install_devel.sh -f /application/nginx-1.10.2/
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.10.2-1.x86_64.rpm"}

1.5.4 安装rpm包

推荐使用yum 安装

yum -y localinstall  nginx-1.10.2-1.x86_64.rpm

这个命令会自动先安装rpm包的依赖,然后再安装rpm包。

另:可以搭建本地yum仓库实现yum 安装自动解决依赖关系

1 #简易的搭建yum源的方法可以参考↓
2 http://www.cnblogs.com/clsn/p/7757868.html

 

时间: 2024-08-04 07:10:39

FPM定制RPM包实践的相关文章

定制rpm包-Yum环境搭建

1.1 在yum服务器上创建yum仓库命令 1 mkdir -p /application/nginx/html/yum 2 cd /application/nginx/html/yum rz #上传rpm包到此目录 1.2 安装createrepo软件 1 yum install createrepo -y 1.3 初始化repodata索引文件 1 createrepo -pdo /application/nginx/html/yum/ /application/nginx/html/yum

Centos 中如何快速定制二进制的内核 RPM 包

随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(root和普通用户)来讲解如何制作内核的二进制rpm包. Building主机系统环境约定: OS : CentOS release 6.6 Arch : i686 一,rpm包简单定制 注意: 这里我们首先要预留至少20GB的临时文件空间. 1.rpm 制作前的环境准备: yum -y groupins

使用FPM快速生成RPM包

使用FPM快速生成RPM包 许多朋友始终觉得RPM难做,主要是因为SPEC规则比较多,需要花精力去了解和熟悉.之前试用一个叫checkinstall的工具,可以自动打RPM包.很久没有维护了,在CentOS6上编译有问题.虽然也有网友给打了Patch,最终能用起来,可惜使用过程中还是会遇到诸多错误. 如今巧遇FPM,一行命令就搞定RPM包! 一.我们来先安装FPM: # FPM是Ruby模块 yum -y install ruby rubygems ruby-devel # 添加淘宝的Ruby仓

Centos下rpm包如何制作?

  Centos下rpm包如何制作?          谈论RPM对好多编译安装的朋友来多,RPM安装是傻瓜安装. 呵呵,其实RPM是一种非常有效果的集中部署的解决方案. yum+RPM是非常快速便捷的大规模部署方案. 下面简单介绍下rpm的制作: 以cronolog为例: 首先下载cronolog的源码包. 解开源码包,tar xzvf cronolog-1.6.2.tar.gz 找到 cronolog.spec 该文件是定制如何生成RPM包的配置文件 ? 1 2 3 4 5 6 7 8 9

源码包与RPM包的区别

这篇文章都以Apache的安装为例 一.区别     1.安装前:概念上不同.         1.1.RPM包是二进制包,源码包其实就是我们能认识的C语言文件.     2.安装后:安装位置的不同         1.1.RPM包安装位置是安装在多个位置,这不是由安装人决定的,而是由RPM包的作者决定的.     3.其他         3.1.RPM包安装后访问效率较低,源码包访问效率高.所以安装访问量大的服务的时候建议使用源码包安装,Apache就强烈建议使用源码包安装.        

linux中制作PHP的RPM包教程

下面我们以制作php的rpm开始介绍其制作方法.以下操作在CentOS6.6 64位系统进行. 安装rpm-build [root@linuxeye.com SOURCES]# yum -y install rpm-build 建立工作车间目录 [root@linuxeye.com SOURCES]# vim ~/.rpmmacros %_topdir /root/rpmbuild [root@linuxeye.com SOURCES]# mkdir -pv ~/rpmbuild/{BUILD,

Centos下rpm包如何制作?Centos下rpm包制作的方法

谈论RPM对好多编译安装的朋友来多,RPM安装是傻瓜安装. 呵呵,其实RPM是一种非常有效果的集中部署的解决方案. yum+RPM是非常快速便捷的大规模部署方案. 下面简单介绍下rpm的制作: 以cronolog为例: 首先下载cronolog的源码包. 解开源码包,tar xzvf cronolog-1.6.2.tar.gz 找到 cronolog.spec 该文件是定制如何生成RPM包的配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

制作Linux RPM包

    RPM是Redhat Package Manage的缩写.透过RPM的管理,使用者可以把Source Code包装成一种Source和Binary的档案形式.利用它,我们可以用Binary的档案进行安装,用 Source 的档案形式重新整理包装.许多Linux爱好者对安装RPM包比较熟悉,但对如何在Linux下制作RPM包不甚了解,因此,我将通过实例,讲解如何在Linux下制作RPM包. 1. 最初要求 为了创建RPM,你需要RPM要编译的源代码.一个rpmrc文件(设置一些RPM的缺省

linux虚拟机-linux光盘中加入自己的rpm,重新制作成iso后,虚拟机启动少了几个rpm包

问题描述 linux光盘中加入自己的rpm,重新制作成iso后,虚拟机启动少了几个rpm包 大体步骤就是先把光盘文件考到计算机中,然后在Package中加入自己的包,createrepo后制作镜像,虚拟机启动后用命令查发现少了几个包,问了项目老大,老大让我自己改依赖关系文件,自己摸索着改后发现启动不了了,大神请帮忙分析分析.