概述

问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案。
解答:
  1.tar 打包 先编译安装 打包--》分发--》解包(比如 mysql 打包后直接就可以使用
  2.SaltStack,puppet
  3.定制 rpm yum 仓库 yum 安装
  4.openstack 虚拟机镜像和 docker 容器分发

回顾下安装软件的三种方式:
  1、编译安装软件,优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长。
  2、yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了。
  3、编译源码,根据自己的需求做成定制RPM包–>搭建内网yum仓库–yum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是RPM包的通用性差,只能适用于本公司的环境。另外一般人不会定制RPM包。这是中大型互联网企业运维自动化的必要技能。

一:YUM 安装
  优点:简单,便捷,解决源码包安装依赖问题,全自动化安装
  缺点:没有办法定制,需要网络,网络环境差的情况话,下载速度慢
二:编译安装
  优点:可以定制软件包(定制安装目录和软件功能),一定情况下不需要网络,可自由选择软件版本 
  缺点:安装过程慢,安装复杂,需要查找编译参数(对于一些编译错误,找人求助也讨人嫌),软件编译依赖性强
三:二进制安装
  优点:简单,快捷
  缺点:不能定制,包容量大(mysql 的二进制包 200M 左右)
四:定制 rpm 包 yum 仓库 yum 安装
  优点:可以根据自己的需求编译软件>>制作 rpm 包>>搭建 yum 仓库>>上传 rpm 包到 yum仓库>>客户端安装软件  
  缺点:第一步编译安装复杂,打包完成以后无法更改,一般人不会这个方法

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

rpmbuild 是 redhat 系统原生打包命令,这个命令的使用复杂不推荐使用此方法打包 rpm 包,太复杂啦,有想了解到的朋友可以参考:http://dreamway.blog.51cto.com/1281816/1110874或者自行百度,我们这里使用一个简单的FPM工具定制RPM包

FPM的安装与使用

主机环境:CentOS 6.5

FPM打包工具
  FPM的作者是jordansissel
  FPM的github:https://github.com/jordansissel/fpm
  FPM功能简单说就是将一种类型的包转换成另一种类型。

1. 支持的源类型包

dir         将目录打包成所需要的类型,可以用于源码编译安装的软件包
rpm 对rpm进行转换
gem 对rubygem包进行转换
python 将python模块打包成相应的类型

2. 支持的目标类型包

rpm         转换为rpm包
deb 转换为deb包
solaris 转换为solaris包
puppet 转换为puppet模块

3. FPM参数 (使用 fpm --help 查看更多帮助)

-s          指定源类型
-t 指定目标类型,即想要制作为什么包
-n 指定包的名字
-v 指定包的版本号
-C 指定打包的相对路径 Change directory to here before searching forfiles
-d 指定依赖于哪些包
-f 第二次打包时目录下如果有同名安装包存在,则覆盖它
-p 输出的安装包的目录,不想放在当前目录下就需要指定
--post-install 软件包安装完成之后所要运行的脚本;同--after-install
--pre-install 软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall 软件包卸载完成之后所要运行的脚本;同--after-remove
--pre-uninstall 软件包卸载完成之前所要运行的脚本;同--before-remove

 4.安装FPM工具

fpm 是 ruby 写的,因此系统环境需要 ruby,且 ruby 版本号大于 1.8.5。
# 安装 ruby 模块
yum -y install ruby ruby-devel rubygems
rpm -qa ruby rubygems ruby-devel
# 添加阿里云的 Rubygems 仓库,外国的源慢
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources 查看 Rubygems 仓库信息
# 移除原生的 Ruby 仓库
gem sources --remove http://rubygems.org/
# 安装 fpm
gem install fpm

***在安装ruby包时,可能无法使用yum的方式安装上rubygems包,只能下载rubygems的rpm包进行安装***

下载地址:http://rpmfind.net/linux/rpm2html/search.php?query=rubygems

rpm -ivh rubygems-1.3.-.el6.noarch.rpm  --nodeps  //这种方式安装会忽略runygems的依赖包,不建议使用
或者
yum -y localinstall rubygems-1.3.7-5.el6.noarch.rpm  //建议使用这种方式安装,它会先安装依赖包,再安装rubygems包,需要配置yum源

安装 fpm 打包工具时提示以下错误:

ERROR: Error installing fpm:
ruby-xz requires Ruby version >= 1.9..

上面的提示表示您 Ruby 版本过低,需要安装 1.9.3 的版本,解决思路只需安装低版本的 fpm工具即可

解决方法:

gem install json -v 1.8.
gem install fpm -v 1.3.3
或者
gem install fpm    //先直接安装一次,再安装一个低版本的
gem install fpm -v 1.3.3

案例:Nginx服务定制RPM

1. 编译安装Nginx服务

yum -y install pcre-devel openssl-devel            //安装Nginx依赖包
useradd -M -s /sbin/nologin nginx //添加Nginx运行用户
tar zxvf nginx-1.8..tar.gz -C /usr/src/ //编译安装Nginx
cd /usr/src/nginx-1.8./
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ //优化Nginx程序执行路径
nginx //启动Nginx服务,并验证

2.开始定制Nginx服务的RPM包

(1)停止Nginx服务

[root@aery ~]# lsof -i :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx root 6u IPv4 0t0 TCP *:http (LISTEN)
nginx nginx 6u IPv4 0t0 TCP *:http (LISTEN)
[root@aery ~]# killall - nginx
[root@aery ~]# lsof -i :

(2)编写脚本,用来 nginx 打包完成后,安装后自动执行的脚本

[root@aery ~]# mkdir -p /server/scripts
[root@aery ~]# vim /server/scripts/nginx.sh
#!/bin/bash
useradd -M -s /sbin/nologin nginx
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

(3)将 nginx 服务打包成 rpm 包,并指定需要安装的依赖包

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

(4)将打包完成的 rpm 包下载下来,上传到需要安装的服务器上即可实现 yum 安装,或者是上传到 yum 仓库中提供给 yum 客户端安装

安装 RPM包的三种方法

1) rpm命令安装

[root@aery ~]# rpm -ivh nginx-1.8.-.x86_64.rpm
error: Failed dependencies:
pcre-devel is needed by nginx-1.8.-.x86_64

但会报如上依赖错误,需要先 yum 安装依赖才能安装 rpm 包

2) yum命令安装

yum -y localinstall nginx-1.8.-.x86_64.rpm

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

3)我们可以将打包完成的 rpm 上传 YUM 仓库。然后进行 yum 安装即可

YUM仓库搭建参考:http://www.cnblogs.com/zhichaoma/p/7581957.html

#服务端
[root@aery ~]# cp nginx-1.8.-.x86_64.rpm /yum_source/   //将nginx的rpm包放到yum仓库中
[root@aery ~]# createrepo --update /yum_source/      //更新域名仓库 #客户端
[root@aery ~]# yum clean all //清除 yum 以前的缓存
[root@aery ~]# yum makecache //更新 YUM 缓存
[root@aery ~]# yum list | grep nginx //检查是否可以从yum源中找到Nginx的rpm包
nginx.x86_64 1.8.- @inside
[root@aery ~]# yum -y install nginx //安装Nginx
[root@aery ~]# nginx //启动Nginx服务
[root@aery ~]# lsof -i : //检查 Nginx服务是否启动
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx root 6u IPv4 0t0 TCP *:http (LISTEN)
nginx nginx 6u IPv4 0t0 TCP *:http (LISTEN)

最后使用客户机验证客户机的服务是否可以访问(关闭客户机的iptables)

对mysql数据库进行定制RPM时的思路是,不要初始化数据库

RPM常用命令组合

man rpm #查看 rpm 帮助
rpm -qpi nginx-1.6.3-1.x86_64.rpm #查看 rpm 包信息
rpm -qpl nginx-1.6.3-1.x86_64.rpm #查看 rpm 包内容
rpm -qpR nginx-1.6.3-1.x86_64.rpm #查看 rpm 包的依赖
rpm -qp --scripts nginx-1.6.3-1.x86_64.rpm #查看 rpm 包带的执行脚本,执行脚
本以文件形式存在 rpm 包中
rpm -ivh nginx-1.6.3-1.x86_64.rpm #安装 rpm 包
rpm -ivh --aid *.rpm #--aid 参数解决 rpm 包
循环依赖的问题,即当前目录有所有相互依赖的 rpm 包,就可以用这种方法。
rpm -Uvh *.rpm #如果依赖版本有更新的则自动更新
yum localinstall *.rpm #自动安装 rpm 的依赖包

RPM包定制的更多相关文章

  1. 96、linux之rpm包定制

    96.1.rpm包定制介绍: 编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. yum安装软件,优点是全自动化安装, ...

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

    随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(roo ...

  3. FPM定制RPM包实践

    1.1 快速部署方案 ✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案. 解答: 1.tar 打包 先编译安装 打包-->分发-->解包(比如 ...

  4. 自动化部署必备技能—部署yum仓库、定制rpm包

    部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...

  5. 搭建yum仓库与定制rpm包

    笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们自动化部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请 ...

  6. 定制化rpm包及本地yum仓库搭建

    为方便本地yum的管理,一般都是在公司局域网内搭建本地yum仓库,实现公司内部快速安装常用软件. 步骤如下: 1.搭建要实现本地yum管理的软件,测试该软件搭建成功与否: 2.定制rpm包及其相关依赖 ...

  7. fpm定制化RPM包之nginx rpm包的制作

    fpm定制化RPM包之nginx rpm包的制作 1.安装ruby模块 # yum -y install ruby rubygems ruby-devel 2.添加阿里云的Rubygems仓库,国外资 ...

  8. 自动化部署必备技能—定制化RPM包[转载]

    回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化 ...

  9. 自动化部署必备技能—定制化RPM包

    回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化 ...

随机推荐

  1. Spring Cloud Config 分布式配置中心【Finchley 版】

    一. 介绍 1,为什么需要配置中心? 当服务部署的越来越多,规模越来越大,对应的机器数量也越来越庞大,靠人工来管理和维护服务的配置信息,变得困难,容易出错. 因此,需要一个能够动态注册和获取服务信息的 ...

  2. 配置Nginx虚拟主机

    实验环境 一台最小化安装的CentOS 7.3虚拟机 配置基本环境 1. 安装nginx yum install -y epel-* yum isntall -y nginx vim 2. 建立虚机主 ...

  3. redis-trib.rb命令详解

    redis-trib.rb是官方提供的Redis Cluster的管理工具,无需额外下载,默认位于源码包的src目录下,但因该工具是用ruby开发的,所以需要准备相关的依赖环境. 准备redis-tr ...

  4. Spring基于AspectJ的AOP的开发——注解

    源码:https://gitee.com/kszsa/dchart 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专 ...

  5. Docker镜像的修改和自定义

    一.docker镜像的更新 (1)启动镜像,写入一些文件或者更新软件 docker run -it 3afd47092a0e[root@44652ba46352 /]# ls (2)更新镜像 dock ...

  6. Nice Garland CodeForces - 1108C (思维+暴力)

    You have a garland consisting of nn lamps. Each lamp is colored red, green or blue. The color of the ...

  7. Selling Souvenirs CodeForces - 808E (分类排序后DP+贪心)

    E. Selling Souvenirs time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. python实现满二叉树递归循环

    一.二叉树介绍点这片文章 二叉树及题目介绍 例题: 有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下, 小球每次经过开关就会把它的状态置反,这个开关为关时,小球左跑,为开时右跑.现在 ...

  9. JavaScript动态修改html组件form的action属性

    用javaScript动态修改html组件form的action属性,可以在提交时再决定处理表单的页面. <%--JavaScript部分--%><script language=& ...

  10. Django异常问题之Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。

    一般情况下,我们启动Django项目时默认设置的端口为8000,当你听着酷狗音乐敲着代码,启动Django项目时忽然翻车了. 不要慌,那是酷狗抢先一步占用了8000端口,解决这个问题的方式就是修改端口 ...