如何使用rpm部署自行开发的应用程序?

时间:2009-05-20 21:32:21

标签: unix deployment install uninstall rpm

这是我的方案

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

工作流程如下所示:

  • 每个应用都有相应的rpm.spec - 签入源控件
  • 在家庭目录中建立一个rpm
  • 使用我们自己的 packages.rpm
  • 安装/升级

注意:在我继续

时,我将使用此问题作为自己的注释

2 个答案:

答案 0 :(得分:1)

在我家中建立rpm:

<强> 1 即可。

我的用户root中需要一个 .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

答案 1 :(得分:0)

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

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

回滚是从版本控制中取出最后一个良好转速,擦除当前转速并安装旧转速的问题。

听起来你已经很好地使用了自己的软件包db。