【问题标题】:How to deploy home-grown applications with rpm?如何使用 rpm 部署本地应用程序?
【发布时间】:2009-05-20 21:32:20
【问题描述】:

这是我的场景

  • 我们的团队在 AIX 上开发
  • 几十个应用程序,主要是 Perl、shell 脚本、批处理 java、C
  • 我想简化部署/回滚过程 - 目前使用带有备份的普通旧压缩包
  • 我研究了 installp 与 rpm 进行打包(请参阅 my SO question)并决定使用 rpm - 更好的文档,而且 IBM 在拥有自己的打包工具的同时包含了它,所以这是一个我的正当理由
  • 我想使用一个单独的 rpm 数据库,而不是主数据库 - 因为我没有 root 访问权限,而且我也觉得将操作系统应用程序与我们的东西分开是有益的。

工作流程如下所示:

  • 每个应用程序都有一个对应的 rpm.spec - 签入到源代码管理中
  • 在主目录中构建 rpm
  • 在使用我们自己的 packages.rpm 时安装/升级

注意:我会用这个问题作为我自己的笔记


【问题讨论】:

    标签: unix deployment installation uninstallation rpm


    【解决方案1】:

    在我家构建 rpm:

    1

    我需要一个 .rpmmacros 文件在我的用户根目录中,它会覆盖一些系统范围的 rpm 设置

    %_signature gpg
    %_gpg_name {yourname}
    %_gpg_path ~/.gnupg
    %distribution AIX 5.3
    %vendor {Northwind? :)}
    %make   make
    

    2

    这将创建 rpm 构建所需的目录结构,它还将更新 .rpmmacros

    #!/bin/sh
    
    [ "x$1" = "x-d" ] && {
    DEBUG="y"
    export DEBUG
    shift 1
    }
    
    IAM=`id -un`
    PASSWDDIR=`grep ^$IAM: /etc/passwd | awk -F":" '{print $6}'`
    HOMEDIR=${HOME:=$PASSWDDIR}
    
    [ ! -d $HOMEDIR ] && {
    echo "ERROR: Home directory for user $IAM not found in /etc/passwd."
    exit 1
    }
    
    RHDIR="$HOMEDIR/rpmbuild"
    RPMMACROS="$HOMEDIR/.rpmmacros"
    touch $RPMMACROS
    
    TOPDIR="%_topdir"
    ISTOP=`grep -c ^$TOPDIR $RPMMACROS`
    [ $ISTOP -lt 1 ] && {
    echo "%_topdir      $HOMEDIR/rpmbuild" >> $RPMMACROS
    }
    
    TMPPATH="%_tmppath"
    ISTMP=`grep -c ^$TMPPATH $RPMMACROS`
    [ $ISTMP -lt 1 ] && {
    echo "%_tmppath $HOMEDIR/rpmbuild/tmp" >> $RPMMACROS
    }
    
    [ "x$DEBUG" != "x" ] && {
    echo "$IAM       $HOMEDIR    $RPMMACROS"
    echo "$RHDIR     $TOPDIR     $ISTOP"
    }
    
    [ ! -d $RHDIR ] && mkdir -p $RHDIR
    
    cd $RHDIR 
    for i in RPMS SOURCES SPECS SRPMS BUILD tmp ; do 
    [ ! -d ./$i ] && mkdir ./$i 
    done
    
    exit 0
    

    您可以检查 rpm 是否接收到您的更改:

    rpm --showrc | grep topdir
    

    3.

    指定 RPM 数据库的非默认位置,例如:

    rpm --dbpath /location/of/your/rpm/database --initdb
    

    【讨论】:

      【解决方案2】:

      我通常将我的规范文件签入到我的代码所在的同一位置。

      我每天晚上运行一个构建服务器(我使用 Hudson)来启动一个构建(可以是连续的,但我选择了每晚)。构建服务器检出代码,构建它,然后运行 ​​rpmbuild。 Hudson 设置了一个可以在每次构建后删除的工作区文件夹,因此如果您将 %_topdir 设置为指向该区域,那么您可以保证不会有之前构建遗留下来的构建工件。在构建结束时,我将我的 rpms 检查到版本控制中,并带有包含构建号的注释。

      回滚是从版本控制中取出最后一个好的 rpm,擦除当前 rpm,然后安装旧 rpm。

      听起来您已经很好地掌握了使用自己的包 db。

      【讨论】:

        猜你喜欢
        • 2020-01-25
        • 2014-06-28
        • 2013-04-05
        • 2015-01-08
        • 2016-07-24
        • 2012-11-26
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多