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

Unix 如何使用rpm部署自主开发的应用程序?,unix,deployment,installation,uninstallation,rpm,Unix,Deployment,Installation,Uninstallation,Rpm,这是我的设想 我们的团队在AIX上开发 许多应用程序,主要是Perl、shell脚本、批处理java、C 我想简化部署/回滚过程-目前使用普通的旧tarball和备份 我研究了installp与rpm的打包(请参阅),并决定使用rpm——更好的文档,再加上IBM在拥有自己的打包工具时包含了它,所以这对我来说是一个合理的理由 我想使用一个单独的rpm db,而不是主rpm db,因为我没有root访问权限,我也觉得将操作系统应用程序与我们的东西分开会有好处 工作流如下所示: 每个应用程序都

这是我的设想

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

工作流如下所示:

  • 每个应用程序都有一个对应的rpm.spec-签入到源代码管理中
  • 在主目录中构建rpm
  • 使用我们自己的软件包安装/升级。rpm
注:我将在继续提问时把这个问题作为我自己的笔记



在我家建立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

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

我每天晚上运行一个构建服务器(我使用Hudson)来启动一个构建(可以是连续的,但我选择了夜间)。生成服务器签出代码,生成代码,然后运行rpmbuild。Hudson设置了一个工作区文件夹,可以在每次构建后删除该文件夹,因此如果将%\u topdir设置为指向该区域,则可以保证不会有上一次构建遗留的构建工件。在构建结束时,我使用包含构建编号的注释将我的RPM检查到版本控制中

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

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