2009-05-20 10 views
2

ici est mon scénarioComment déployer des applications locales avec RPM?

  • notre équipe se développe sur AIX
  • des dizaines d'applications, principalement Perl, scripts shell, java batch, C
  • je voudrais simplifier les procédures de déploiement/rollback - actuellement en utilisant les anciennes archives tarées avec des sauvegardes
  • J'ai regardé dans installp contre RPM pour l'emballage (voir my SO question) et a décidé d'aller avec rpm - meilleurs documents, plus IBM l'a inclus tout en ayant leur propre pa outil de ckaging, donc c'est une raison valable pour moi
  • je voudrais utiliser un db séparé, pas le principal - car je n'ai pas root accès et je pense aussi qu'il serait bénéfique de séparer OS applications de nos trucs.

le flux ressemblerait à ceci:

  • chaque application a une rpm.spec correspondante - check-in dans le contrôle source
  • construire un régime dans une maison dir
  • installer/mettre à jour en utilisant nos propres packages .rpm

NOTE: Je vais utiliser cette question comme des notes à moi-même que je procède


Répondre

1

bâtiment rpm dans ma maison:

.

je besoin d'un .rpmmacros fichier dans la racine de mon utilisateur qui remplace un système à l'échelle des paramètres rpm

.

cela va créer une structure de répertoire nécessaire pour rpm builds, il mettra également à jour .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 

vous pouvez vérifier si rpm ramassé vos modifications avec:

rpm --showrc | grep topdir 

3.

spécifier un emplacement autre que celui par défaut de la base de données RPM, tel que ce qui suit:

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

Je vérifie habituellement dans mes fichiers de spécifications au même endroit que mon code.Je lance un serveur de build (j'utilise Hudson) pour lancer une build tous les soirs (peut être continu mais j'ai choisi tous les soirs). Le serveur de génération extrait le code, le construit et exécute rpmbuild. Hudson configure un dossier d'espace de travail qui peut être supprimé après chaque génération, donc si vous définissez% _topdir pour qu'il pointe vers cette zone, vous pouvez garantir qu'il ne restera plus d'artefacts de construction d'une version précédente. À la fin de la construction, je vérifie mes rpms dans le contrôle de version avec un commentaire contenant le numéro de build.

Le retour en arrière consiste à retirer les derniers bons tours du contrôle de version, en effaçant le régime actuel et en installant l'ancien régime.

On dirait que vous avez déjà une bonne idée de l'utilisation de votre propre paquet db.

Questions connexes