2

这是我的场景

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

工作流程如下所示:

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

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


4

2 回答 2

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
于 2009-05-20T21:36:24.617 回答
0

我通常将我的规范文件检入到我的代码所在的同一个地方。

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

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

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

于 2009-10-15T15:14:07.370 回答