• RPM包制作及yum仓库搭建


    RPM包制作

    rpm包的制作是通过fpm软件来生成的,所以首先要安装fpm软件。又因为fpm的软件是ruby开发的,所以安装fpm的话首先要安装ruby等包

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

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

    支持的源类型包:

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

     rpm: 对rpm进行转换

     gem: 对rubygem包进行转换

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

    1、安装fpm

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

    yum  install ruby rubygems ruby-devel -y
    

     查看当前ruby源:

    [root@lnmp01 ~]# gem source -l
    *** CURRENT SOURCES ***
    http://rubygems.org/
    

     添加国内源

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

     移除国外源

    gem sources --remove http://rubygems.org/
    

     安装制作rpm包的fpm工具

    [root@lnmp01 ~]# gem install fpm
    Building native extensions.  This could take a while...
    Building native extensions.  This could take a while...
    ERROR:  Error installing fpm:
            ruby-xz requires Ruby version >= 1.9.3.
    

     安装fpm工具的时候报错,解决办法为:

    #安装旧版本的fpm
    [root@lnmp01 ~]# gem install fpm -v 1.4.0
    Successfully installed clamp-0.6.5
    Successfully installed fpm-1.4.0
    2 gems installed
    Installing ri documentation for clamp-0.6.5...
    Installing ri documentation for fpm-1.4.0...
    Installing RDoc documentation for clamp-0.6.5...
    Installing RDoc documentation for fpm-1.4.0...
    

     到此fpm工具安装完成

      FPM的常用参数:

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

    2、制作rpm包

     比如对nginx的编译安装打包成rpm

    创建一个脚本nginx-rpm.sh

    [root@lnmp01 ~]# vim  /server/scripts/nginx-rpm.sh
    
    #!/bin/bash
    useradd  nginx  -s /sbin/nologin  -M
    ln  -s /application/nginx-1.6.3/   /application/nginx
    /application/nginx/sbin/nginx
    lsof -i :80
    

     生成rpm包

    fpm  -s  dir -t rpm -n nginx -v 1.6.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx-rpm.sh -p /tmp/ -f /application/nginx-1.6.3/
    

     说明:所有参数都要放在-f /application/nginx-1.6.3/之前,否则会报错,这里的nginx-rpm.sh脚本也要提前做好,在生成的rpm包中会包含这个脚本;-p指定生成的rpm包输出的路径,-d为指定客户端安装这个rpm包时要先安装这些依赖包,-f为在指定的rpm包输出路径中相同的rpm包名做覆盖,不然没有-f参数在相同路径下生成相同名字的rpm包会报错。还有在制作rpm包时最好不要对相对路径打包,因为对相对路径打包生成的rpm包是从根路径开始的,所以生产上都要用绝对路径打包。

    相对路径打包的错误:所以不推荐使用相对路径打包

    [root@lnmp01 nginx]# fpm  -s  dir -t rpm -n nginx -v 1.6.2 .
    
    [root@lnmp01 nginx]# rpm -qpl nginx-1.6.2-1.x86_64.rpm 
     /client_body_temp
    /conf/extra/bbs.conf
    /conf/extra/blog.conf
    /conf/extra/status.conf
    /conf/extra/www.conf
    /conf/fastcgi.conf
    /conf/fastcgi.conf.default
    /conf/fastcgi_params
    /conf/fastcgi_params.default
    /conf/koi-utf
    /conf/koi-win
    /conf/mime.types
    /conf/mime.types.default
    /conf/nginx.conf
    /conf/nginx.conf.default
    /conf/nginx.conf.ori1
    /conf/scgi_params
    /conf/scgi_params.default
    /conf/uwsgi_params
    /conf/uwsgi_params.default
    /conf/win-utf
    /fastcgi_temp
    /html/50x.html
    /html/bbs/admin.php
    /html/bbs/api.php
    /html/bbs/api/addons/channel.htm
    /html/bbs/api/addons/index.htm
    /html/bbs/api/addons/zendcheck.php
    /html/bbs/api/addons/zendcheck52.php
    /html/bbs/api/addons/zendcheck53.php
    /html/bbs/api/connect/index.htm
    /html/bbs/api/connect/like.php
    /html/bbs/api/db/dbbak.php
    /html/bbs/api/db/index.htm
    /html/bbs/api/google/google.php
    /html/bbs/api/google/index.htm
    /html/bbs/api/index.htm
    相对路径打包rpm

    在其他服务器上安装这个制作的nginx的rpm包

    [root@lnmp01 ~]# scp  /tmp/nginx-1.6.2-1.x86_64.rpm  192.168.1.104:~ 
    
    [root@backup ~]# rpm -ivh nginx-1.6.2-1.x86_64.rpm 
    error: Failed dependencies:
            pcre-devel is needed by nginx-1.6.2-1.x86_64
            openssl-devel is needed by nginx-1.6.2-1.x86_64
    
    [root@backup ~]# yum  localinstall -y nginx-1.6.2-1.x86_64.rpm 
         
    [root@backup ~]# id nginx
    uid=503(nginx) gid=503(nginx) groups=503(nginx)
    
    [root@backup ~]# ll /application/
    total 4
    lrwxrwxrwx  1 root root   25 Sep  8 21:00 nginx -> /application/nginx-1.6.3/
    drwxr-xr-x 11 root root 4096 Sep  8 21:00 nginx-1.6.3
    
    [root@backup ~]# lsof  -i  :80
    COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx   4043  root    9u  IPv4  28773      0t0  TCP *:http (LISTEN)
    nginx   4045 nginx    9u  IPv4  28773      0t0  TCP *:http (LISTEN)
    

     这样在其他服务器上安装nginx的rpm包成功部署完成。。。

     YUM仓库搭建

    1、创建 yum仓库的目录

    mkdir  -p /application/yum/centos6.6/x86_64
    cd  /application/yum/centos6.6/x86_64
    

    2、安装createrepo软件(创建存储库)

    yum -y install createrepo
    

    3、初始化yum仓库

    createrepo -pdo /application/yum/centos6.6/x86_64/  /application/yum/centos6.6/x86_64/
    

     初始化完会生成一个repodata目录,代表初始化yum仓库成功

    4、当有新的rpm放到/application/yum/centos6.6/x86_64/里时,执行更新

    createrepo --update  /application/yum/centos6.6/x86_64/
    

    5、将上面生成的rpm包放在yum仓库指定的目录中,并下载这个nginx的rpm的依赖包

    cd  /application/yum/centos6.6/x86_64/
    cp  /server/scripts/nginx-1.6.3-1.x86_64.rpm  .
    yumdownloader   openssl-devel  pcre-devel 
    

    6、关掉nginx,因为下面要用python来做web服务,当然也可以用nginx自带的web服务提供浏览器打开yum仓库

     用python提供web服务做客户端访问yum源的url路径

    /application/nginx/sbin/nginx  -s  stop
    cd  /application/yum/centos6.6/x86_64/
    python -m SimpleHTTPServer 80 &>/dev/null &
    

     如果用nginx提供web服务做客户端访问yum源的url路径的话,做如下配置

    cat  >/application/nginx/conf/nginx.conf<<EOF
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html/yumcache;
                autoindex on;         ##开启目录
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    EOF
    
    
    /application/nginx/sbin/nginx -s stop
    /application/nginx/sbin/nginx
    

    7、修改yum的配置文件,让平时yum安装的软件rpm包都要保存下载

    vim  /etc/yum.conf
    keepcache=1
    

    8、客户端部署

     创建本地的yum源文件

    cd  /etc/yum.repos.d/
    vim  goser.repo
    [goser]
    name=Server
    baseurl=http://192.168.182.143
    enabled=1
    gpgcheck=0
    清空之前的缓存
    yum clean all

     在客户端运行如下命令,让客户端yum安装的时候只查找新建的yum源文件goser.repo

    yum --enablerepo=goser --disablerepo=base,extras,updates list
    

     或者直接将旧的yum源放到其他的目录,在/etc/yum.repos.d/目录下只有新建的yum源goser.repo

    cp  CentOS-Base.repo  CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo CentOS-fasttrack.repo epel.repo repobak/
    

     不需要的源放到其他目录了,那么客户端直接运行yum  install  nginx -y就行了,而不需要--disablerepo,--enalberepo参数了

    9、错误排查

     当客户端直接进行yum安装的时候报如下错误:

    yum install  nginx  -y
    Error: Package: pcre-devel-7.8-7.el6.x86_64 (goser)
               Requires: pcre = 7.8-7.el6
               Installed: pcre-7.8-6.el6.x86_64 (@anaconda-CentOS-201410241409.x86_64/6.6)
                   pcre = 7.8-6.el6
     You could try using --skip-broken to work around the problem
     You could try running: rpm -Va --nofiles --nodigest
    

     这个错误说明yum仓库缺少pcre = 7.8-7.e16这个包,所以应该在yum仓库中添加这个包,步骤如下:

    #添加缺少的包
    yumdownloader  pcre
    #服务端yum仓库更新
    createrepo --update  /application/yum/centos6.6/x86_64/
    

     客户端重新缓存yum源

    yum clean  all
    yum  makecache 
    #这时候用list查看就有缺少的包了
    yum list
    Available Packages
    nginx.x86_64            1.6.3-1         goser                                   
    openssl-devel.i686      1.0.1e-57.el6   goser                                   
    pcre.i686               7.8-7.el6       goser                                   
    pcre.x86_64             7.8-7.el6       goser                                   
    pcre-devel.i686         7.8-7.el6       goser                                   
    pcre-devel.x86_64       7.8-7.el6       goser
    

     这时候再直接安装就没问题了 yum  install  nginx -y

  • 相关阅读:
    fiddler https
    Windows Media Player 网页播放器 参数含义
    ActionScript3.0程序开发工具
    同一目录两程序引用同一个类库dll,所引发的问题
    Flash在浏览器里调试获取trace
    linux下的i2c驱动框架
    IIC原理及简单流程
    Linux操作系统下 NAND FLASH驱动程序框架
    Linux操作系统简单NOR FLASH驱动开发
    网卡驱动
  • 原文地址:https://www.cnblogs.com/goser/p/7684244.html
Copyright © 2020-2023  润新知