zoukankan      html  css  js  c++  java
  • RPM包定制

    RPM包定制

     

    概述

    问题:当领导给你 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. 支持的源类型包

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

    2. 支持的目标类型包

    1
    2
    3
    4
    rpm         转换为rpm包
    deb         转换为deb包
    solaris     转换为solaris包
    puppet      转换为puppet模块

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -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工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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.7-5.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.3.

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

     解决方法:

    复制代码
    gem install json -v 1.8.3
    gem install fpm -v 1.3.3
    或者
    gem install fpm    //先直接安装一次,再安装一个低版本的
    gem install fpm -v 1.3.3
    复制代码

     

    三、Ruby离线安装

      去官网下载:http://www.ruby-lang.org/en/downloads/  最新的版本为2.4.1

    1 $ ./configure –-prefix=/usr/local/ruby -prefix是将ruby安装到指定目录,也可以自定义
    2 $ make && make install

    ERROR: Loading command: install (LoadError)
     cannot load such file -- zlib
    ERROR: While executing gem ... (NoMethodError)
        undefined method `invoke_with_build_args' for nil:NilClass
    ---------------------

    yum -y install zlib-devel
     
    进入ruby源码文件夹,安装ruby自身提供的zlib包
     
    cd ruby-2.5.1/ext/zlib
    ruby ./extconf.rb
    make
    make install

    make: *** No rule to make target `/include/ruby.h', needed by `zlib.o'. Stop. 

    vim /tools/ruby-2.5.1/ext/zlib/Makefile
    #zlib.o: $(top_srcdir)/include/ruby.h #把这一行替换成下面一行
    zlib.o: ../../include/ruby.h


    复制代码
    1. 编译安装Nginx服务案例:Nginx服务定制RPM

    yum -y install pcre-devel openssl-devel            //安装Nginx依赖包
    useradd -M -s /sbin/nologin nginx            //添加Nginx运行用户
    tar zxvf nginx-1.8.1.tar.gz -C /usr/src/        //编译安装Nginx
    cd /usr/src/nginx-1.8.1/
    ./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 :80
     COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
     nginx   8439  root    6u  IPv4  38775      0t0  TCP *:http (LISTEN)
     nginx   8440 nginx    6u  IPv4  38775      0t0  TCP *:http (LISTEN)
    [root@aery ~]# killall -9 nginx
    [root@aery ~]# lsof -i :80
    复制代码

    (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.1 -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.1-1.x86_64.rpm 
    error: Failed dependencies:
        pcre-devel is needed by nginx-1.8.1-1.x86_64

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

    2) yum命令安装

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

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

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

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

    复制代码
    #服务端
    [root@aery ~]# cp nginx-1.8.1-1.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.1-1                           @inside
    [root@aery ~]# yum -y install nginx        //安装Nginx
    [root@aery ~]# nginx                 //启动Nginx服务
    [root@aery ~]# lsof -i :80            //检查 Nginx服务是否启动
    COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx   3900  root    6u  IPv4  29101      0t0  TCP *:http (LISTEN)
    nginx   3901 nginx    6u  IPv4  29101      0t0  TCP *:http (LISTEN)
    复制代码

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

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

    RPM常用命令组合

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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 的依赖包

     

  • 相关阅读:
    nmon+python 基于AIX系统数据分析
    nmon +java nmon Alalizy agent 动态交互监控
    nomon+ pyNmonAnalyzer实现基于python的nmon监控性能数据可视化
    nmon help文档zh-han
    nmon+Java Nmon Analyser进行nmon监控数据可视化分析
    pandas 数据可视化之折线图
    nmonchart 分析.nmon监控数据成html展示
    【BZOJ4025】—二分图(线段树分治+带权并查集)
    【BZOJ4025】—二分图(线段树分治+带权并查集)
    【BZOJ2759】—一个动态树好题(LCT+Exgcd)
  • 原文地址:https://www.cnblogs.com/skyhu365/p/10593634.html
Copyright © 2011-2022 走看看