1、快速部署方案

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

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

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

3、FPM打包工具

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

3.1 支持的源类型包

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

3.2 支持的目标类型包

类型 说明
rpm 转换为rpm包
deb 转换为deb包
solaris 转换为solaris包
puppet 转换为puppet模块

4、FPM的安装与使用

4.1 安装FPM工具

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

  1. yum -y install ruby rubygems ruby-devel
  2. [root@test ~]# rpm -qa ruby rubygems ruby-devel
  3. ruby-1.8.7.374-5.el6.x86_64
  4. ruby-devel-1.8.7.374-5.el6.x86_64
  5. rubygems-1.3.7-5.el6.noarch

查看当前使用的rubygems仓库

  1. gem sources list

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

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

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

  1. gem install json -v 1.8.3
  2. gem install fpm -v 1.3.3

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

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工具安装完成。

5、【实例】定制nginx的RPM包

关于nginx的安装,可以参考:http://www.cnblogs.com/clsn/p/7750615.html

5.1 安装nginx(一键化脚本)

  1. yum install -y pcre-devel openssl-devel
  2. mkdir -p /server/tools
  3. cd /server/tools
  4. wget -q http://nginx.org/download/nginx-1.10.2.tar.gz
  5. ls -l nginx-1.10.2.tar.gz
  6. useradd www -s /sbin/nologin -M
  7. tar xf nginx-1.10.2.tar.gz
  8. cd nginx-1.10.2
  9. ./configure --user=www --group=www --prefix=/application/nginx-1.10.2 --with-http_stub_status_module --with-http_ssl_module
  10. make
  11. make install
  12. ln -s /application/nginx-1.10.2 /application/nginx

5.2 编写脚本(for —post-install)

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

5.3 打包-制作rpm包

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

  1. killall nginx
  1. [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/
  2. no value for epoch is set, defaulting to nil {:level=>:warn}
  3. no value for epoch is set, defaulting to nil {:level=>:warn}
  4. Created package {:path=>"nginx-1.10.2-1.x86_64.rpm"}

5.4 安装rpm包

推荐使用yum 安装

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

这个命令会自动先安装rpm包的依赖,然后再安装rpm包。另:可以搭建本地yum仓库实现yum 安装自动解决依赖关系

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