自动化部署,定制rpm包

 

部署--前篇

MySQL多实例部署完成,由于有公司特定一些需求,需要源码安装,现在需要批量部署,如果一台台部署,就太过麻烦,而且浪费时间,这个时候自动化部署 就体现出价值了

 

我们将MySQL制作定制化rpm包,然后放到我们的yum仓库中,在将yum所有客户端,都指向yum源,之后就是喝喝茶,看看片,轻松批量部署了,废话不多说,开干。

如果MySQL多实例还没配置的,或不了解软件的安装方式 的

请参考:http://qiuyt.blog.51cto.com/1229789/1920686

一、Yum安装介绍

yum就是{Yellow dog Updater, Modified} 黄色的狗,用来针对rpm包的管理器。

它的优点:简单、高效,解决依赖问题;缺点:前期定制包复杂

二、制作rpm包

FPM的作者是jordansissel

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

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

rpm:redhat 包管理器,具有升级、查询、验证,安装,卸载等5大功能;

可通过rpm --help 获取帮助信息 ##--hep用来查看系统内置参数

1,rpm 支持那些包的转换?

源类型包:

dir :将目录打包成rpm包,就是将编译安装好的目录,直接打包,到对端就相当于安装目录解压。

rpm:对rpm进行转换

gem:对rubygem进行转换

pythom :将python包打包成相应的类型

目标类型包:可以转发成什么类型的包

rpm         转换为rpm

deb         转换为deb

solaris       转换为solaris

puppet       转换为puppet模块

2,安装FPM打包工具

1)安装ruby模块

 yum -y install ruby rubygems ruby-devel

 gem sources list  # 查看当前使用的rubygems仓库

 ```

   2)更新yum

```bash

gem sources --add http://gems.ruby-china.org --remove http://rubygems.org/

#注:添加国内的 淘宝的Rubygems仓库,外国的源慢,移除原生的Ruby仓库

   3)安装fpmjson依赖包

 

gem install json -v 1.8.3

gem install fpm -v 1.3.3

 

 #gemrubygem仓库安装软件类似yumyum仓库安装软件。首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用就行。

 

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

4)验证

rpm --help  #如果有输出代表安装成功

3,FPM参数说明

详细使用见fpm –help

常用参数

-s          指定源类型  (例如dir 目录)

-t          指定目标类型,即想要制作为什么包 (比如想做个rpm包)

-n          指定包的名字 ,-name

-v          指定包的版本号  (用于区分rpm,有同名字但版本不同)

-C          指定打包的相对路径  Change directory to here before searching forfiles

-d          指定依赖于哪些包

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

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

--post-install      执行rpm包之后所要运行的脚本;同--after-install

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

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

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

4,定制MySQL rpm包

用法:rpm包执行前运行的脚本 + rpm包 + rpm包执行后脚本

我们这个myslq 之前是编译安装的,所以rpm包运行前脚本没有,直接考虑哪些目录需要打包

1,确认打包目录

rpm需要打包的目录有哪些:(从你编译安装过程中查看哪些需要打包)

/data 目录 ##这个是多实例的数据存放目录

/application/mysql-5.5.32/   #这个是mysql安装目录

2,创建脚本

打包后需要执行的命令,放入脚本中(从你编译安装过程中查看哪些命令需要解压目录后执行)

#确认后,创建脚本

mkdir -p /server/scripts && cd /server/scripts

cat >>mysql_rpm.sh<<EOF

#!/bin/bash

useradd -s /sbin/nologin mysql -M -u 503

ln -s /application/mysql-5.5.32/ /application/mysql   #创建软链接

find /data -type f -name "mysql"|xargs chmod +x #mysql启动脚本+执行权限

chown -R mysql.mysql /data  #授权/data目录mysql 属主属组

cp /application/mysql/bin/* /usr/local/sbin/

/data/3306/mysql start    #启动多实例

/data/3307/mysql start

echo "# mysql multi instances" >>/etc/rc.local  #添加开机自启动

echo "/data/3306/mysql start " >>/etc/rc.local  

echo "/data/3307/mysql start " >>/etc/rc.local

EOF

3,生成rpm包

将目录打包(rpm包,包内包含脚本及目录)(前面是框 后面是苹果)

1)Mysql定制rpm包

[root@db02 scripts]# fpm -s dir -t rpm -n mysql -v5.5.32  --post-install /server/scripts/mysql_rpm.sh -f /data/ /application/mysql-5.5.32/

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=>"mysql-5.5.32-1.x86_64.rpm"}

[root@db02 scripts]# ls

mysql-5.5.32-1.x86_64.rpm  mysql_rpm.sh

#-s 指定目录类型 -t 指定打包类型 -n指定rpm包名 -v 版本号  --post-install 打包后执行的脚本  -f 指定要打包的目录路径

#注意打包要使用相对路径问题

2)站点部署www bbs blog

fpm -s dir -t rpm -n three_web -v 1.0    -f /application/nginx/html/

3)LB负载均衡

fpm -s dir -t rpm -n lb -v 1.8.1 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/install_LB.sh -f  /application/nginx-1.8.1/

lb-1.8.1-1.x86_64

三、查看rpm包内的信息

rpm -qp --scripts  mysql-5.5.32-1.x86_64.rpm     #查看包内脚本信息

rpm -qpl mysql-5.5.32-1.x86_64.rpm      ##查看rpm包内包含哪些文件及目录

注意:mysql这个目录比较大,用fpm打包耗时长。平时我们有可能需要对nginxphp做优化,这样又得重新打包。因此我们可以将mysql分离出来,分别打包。只需在制作nginx+phprpm包时添加mysql的依赖即可。

四、放入YUM仓库,客户端一键安装测试

1)上传rpm包到yum仓库

scp mysql-5.5.32-1.x86_64.rpm root@172.16.1.101:/application/yum/centos6.8/x86_64

#我这里yum仓库为内网使用IP地址:172.16.1.101,如果没有*** 可以考虑先给个外网IP10.0.0.101

wKiom1kEm8WQzetLAADsBJHWbr4991.png

2) 更新yum仓库list

[root@Qiuyuetao x86_64]# createrepo --update /application/yum/centos6.8/x86_64/

rpm包名:mysql-5.5.32-1.x86_64.rpm

3)一键部署Mysql(客户端)

#开启一台新的设备,配置yum仓库客户端

cd /etc/yum.repos.d

mkdir yum_bak && mv *repo yum_bak

cat >>oldboy.repo<<EOF

[oldboy]

name=Server

baseurl=http://172.16.1.101/yum

enable=1

gpgcheck=0

EOF

yum clean all      

##清空缓存

如果yum仓库中,一个软件有多个版本,可以采用如下方法安装,(你需要的版本)

1yum list|grep 关键字

2,将软件版本 复制

3yum install  复制内容

wKiom1kEsFTj-pehAAGACTmIQVQ984.png

五、测试MySQL 登录

[root@db01 ~]# netstat -lntup|grep 33

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2812/mysqld         

tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      2833/mysqld

[root@db01 ~]# mysql -uroot -S /data/3306/mysql.sock

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.5.32-log Source distribution

 

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

4 rows in set (0.03 sec)

 

##为安全起见设置myslq密码 及 删除无用账户,权限最小化 设置等等都可自行配置了

 

################################################################################################

安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。

 

配置文件中的描述信息如表-2:

 

表-2 SPEC描述信息

 

 

 

3.3 步骤

 

实现此案例需要按照如下步骤进行。

 

步骤一:安装rpm-build软件

 

1)安装rpm-build软件包

 

  1. [root@web1 ~]# yum -y install  rpm-build

 

2)生成rpmbuild目录结构

 

  1. [root@web1 ~]# rpmbuild -ba nginx.spec                //会报错,没有文件或目录
  2. [root@web1 ~]# ls /root/rpmbuild                    //自动生成的目录结构
  3. BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

 

3)准备工作,将源码软件复制到SOURCES目录

 

  1. [root@web1 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/

 

4)创建并修改SPEC配置文件

 

  1. [root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec
  2. Name:nginx        
  3. Version:1.12.0
  4. Release:    10
  5. Summary: Nginx is a web server software.    
  6. License:GPL    
  7. URL:    www.test.com    
  8. Source0:nginx-1.12.2.tar.gz
  9. #BuildRequires:    
  10. #Requires:    
  11. %description
  12. nginx [engine x] is an HTTP and reverse proxy server.
  13. %prep
  14. %setup
  15. –q                            //自动解压源码包,并cd进入目录
  16. %build
  17. ./configure
  18. make %{?_smp_mflags}
  19. %install
  20. make install DESTDIR=%{buildroot}
  21. cp /root/rpmbuild/SPECS/nginx.sh %{buildroot}/usr/local/nginx/    
  22. ##//非必须操作,注意,这里是将一个脚本拷贝到安装目录,必须提前准备该文件
  23. %files
  24. %doc
  25. /usr/local/nginx/*            //对哪些文件与目录打包
  26. %changelog

 

步骤二:使用配置文件创建RPM包

 

1)安装依赖软件包

 

  1. [root@web1 ~]# yum –y install  gcc  pcre-devel zlib-devel openssl-devel

 

2)rpmbuild创建RPM软件包

 

  1. [root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
  2. [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
  3. [root@web1 ~]# rpm -qpi RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
  4. Name        : nginx        Relocations: (not relocatable)
  5. Version     : 1.12.2        Vendor: (none)
  6. Release     : 10            Build Date: Mon 02 May 2016 02:30:53 AM PDT
  7. Install Date: (not installed)            Build Host: localhost
  8. Group       : Applications/Internet        Source RPM: nginx-1.8.0-1.src.rpm
  9. Size        : 721243                    License: GPL
  10. Signature   : (none)
  11. URL         : www.nginx.org
  12. Summary     : Nginx is a web server software.
  13. Description :
  14. nginx [engine x] is an HTTP and reverse proxy server.
  15. [root@web1 ~]# rpm -qpl nginx-1.12.2-10.x86_64.rpm
  16. /usr
  17. /usr/local
  18. /usr/local/nginx
  19. /usr/local/nginx/conf
  20. /usr/local/nginx/conf/fastcgi.conf
  21. /usr/local/nginx/conf/fastcgi.conf.default
  22. /usr/local/nginx/conf/fastcgi_params
  23. /usr/local/nginx/conf/fastcgi_params.default
  24. /usr/local/nginx/conf/koi-utf
  25. /usr/local/nginx/conf/koi-win
  26. /usr/local/nginx/conf/mime.types
  27. /usr/local/nginx/conf/mime.types.default
  28. /usr/local/nginx/conf/nginx.conf
  29. /usr/local/nginx/conf/nginx.conf.default
  30. /usr/local/nginx/conf/scgi_params
  31. /usr/local/nginx/conf/scgi_params.default
  32. /usr/local/nginx/conf/uwsgi_params
  33. /usr/local/nginx/conf/uwsgi_params.default
  34. /usr/local/nginx/conf/win-utf
  35. /usr/local/nginx/html
  36. /usr/local/nginx/html/50x.html
  37. /usr/local/nginx/html/index.html
  38. /usr/local/nginx/logs
  39. /usr/local/nginx/sbin
  40. /usr/local/nginx/sbin/nginx

 

步骤三:安装、卸载软件

 

  1. [root@web1 ~]# rpm -ivh RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
  2. [root@web1 ~]# rpm -qa |grep nginx
  3. [root@web1 ~]# /usr/local/nginx/sbin/nginx
  4. [root@web1 ~]# curl http://127.0.0.1/

 

posted @ 2019-03-07 16:09  舍&得  阅读(521)  评论(0编辑  收藏  举报