#!/bin/bash # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html # Common script to make any one the xcat rpms. To build locally, run in the top dir of local svn repository, for example: # ./makerpm xCAT-server # ./makerpm xCAT x86_64 # If you want verbose output: export VERBOSE=1 # set -x function xcat_probe_copy { # xCAT-probe uses some functions shipped with xCAT, copying for the following reasons: # 1. make xCAT-probe code be self-contained # 2. do not maintain two files for each script RPMNAME=${1} if [ $RPMNAME = "xCAT-probe" ]; then mkdir -p ${RPMNAME}/lib/perl/xCAT/ files=("NetworkUtils.pm" "GlobalDef.pm" "ServiceNodeUtils.pm") for f in "${files[@]}"; do cp perl-xCAT/xCAT/$f ${RPMNAME}/lib/perl/xCAT/ done fi } function xcat_probe_cleanup { RPMNAME=${1} if [ $RPMNAME = "xCAT-probe" ]; then rm -rf ${RPMNAME}/lib/perl/xCAT/ fi } # Make the noarch rpms function makenoarch { RPMNAME=$1 if [ "$OSNAME" = "AIX" ]; then echo '.svn' > /tmp/xcat-excludes tar -X /tmp/xcat-excludes -cf $RPMROOT/SOURCES/$RPMNAME-$VER.tar $RPMNAME gzip -f $RPMROOT/SOURCES/$RPMNAME-$VER.tar rm -f $RPMROOT/SRPMS/$RPMNAME-$VER*rpm $RPMROOT/RPMS/ppc/$RPMNAME-$VER*rpm echo "Building $RPMROOT/RPMS/ppc/$RPMNAME-$VER-snap*.ppc.rpm $EMBEDTXT..." rpm $QUIET -ba $RPMNAME/$RPMNAME.spec RC=$? else # linux echo "Building $RPMROOT/RPMS/noarch/$RPMNAME-$VER-snap*.noarch.rpm $EMBEDTXT..." # TODO: should fix this up, this is a hack for the new build machine if [ $RPMNAME = "xCAT-UI" ]; then # Only if the old compiler.jar file does not exist..... if [ ! -e /xcat2/build/tools/compiler.jar ]; then # look for the dynamic location of the compiler.jar file DIRNAME=`dirname $(readlink -f $0)` COMPILER_JAR=`echo "${DIRNAME%%linux_rpm/*}tools/compiler.jar"` if [ -f $COMPILER_JAR ]; then sed -i "s#/xcat2/build/tools/compiler.jar#${COMPILER_JAR}#g" xCAT-UI/xCAT-UI.spec else # In c910, if using the old buildxcat scripts... COMPILER_JAR=`echo "${DIRNAME%%old/*}xcat2/tools/compiler.jar"` if [ -f $COMPILER_JAR ]; then sed -i "s#/xcat2/build/tools/compiler.jar#${COMPILER_JAR}#g" xCAT-UI/xCAT-UI.spec fi fi fi fi xcat_probe_copy ${RPMNAME} tar --exclude .svn -czf $RPMROOT/SOURCES/$RPMNAME-$VER.tar.gz $RPMNAME rm -f $RPMROOT/SRPMS/$RPMNAME-$VER*rpm $RPMROOT/RPMS/noarch/$RPMNAME-$VER*rpm rpmbuild $QUIET -ta $RPMROOT/SOURCES/$RPMNAME-$VER.tar.gz --define "version $VER" $REL "$EASE" RC=$? if [ $RPMNAME = "xCAT-UI" ]; then # undo the modifications above to leave the sandbox prestine on the build machine git checkout xCAT-UI/xCAT-UI.spec fi xcat_probe_cleanup ${RPMNAME} fi } # Make one of the following rpms: xCAT, xCATsn, xCAT-buildkit, xCAT-OpenStack function makexcat { if [ "$OSNAME" != "AIX" -a "$1" != "xCAT-buildkit" -a -z "$2" ]; then echo 'Usage: makerpm []' exit 1 fi RPMNAME="$1" if [ "$OSNAME" = "AIX" ]; then source=/opt/freeware/src/packages cd `dirname $0`/$RPMNAME echo '.svn' > /tmp/xcat-excludes echo 'upflag' >> /tmp/xcat-excludes if [ "$RPMNAME" = "xCAT" ]; then tar -X /tmp/xcat-excludes -cf $RPMROOT/SOURCES/postscripts.tar postscripts LICENSE.html gzip -f $RPMROOT/SOURCES/postscripts.tar tar -X /tmp/xcat-excludes -cf $RPMROOT/SOURCES/templates.tar templates gzip -f $RPMROOT/SOURCES/templates.tar cp xcat.conf $RPMROOT/SOURCES cp xcat.conf.apach24 $RPMROOT/SOURCES cp xCATMN $RPMROOT/SOURCES else # xCATsn tar -X /tmp/xcat-excludes -cf $RPMROOT/SOURCES/license.tar LICENSE.html gzip -f $RPMROOT/SOURCES/license.tar cp xCATSN $RPMROOT/SOURCES fi rm -f $RPMROOT/SRPMS/$RPMNAME-$VER*rpm $RPMROOT/RPMS/ppc/$RPMNAME-$VER*rpm cd - >/dev/null echo "Building $RPMROOT/RPMS/ppc/$RPMNAME-$VER-snap*.ppc.rpm $EMBEDTXT..." rpm $QUIET -ba $RPMNAME/$RPMNAME.spec RC=$? else # linux ARCH="$2" TARGET="--target $ARCH" if [ "$RPMNAME" = "xCAT" ]; then cd `dirname $0`/ # shipping bmcsetup and getipmi scripts as part of postscripts files=("bmcsetup" "getipmi") for f in "${files[@]}"; do cp "xCAT-genesis-scripts/usr/bin/"$f ${RPMNAME}/postscripts/$f sed -i "s/xcat.genesis.$f/$f/g" ${RPMNAME}/postscripts/$f done cd `dirname $0`/$RPMNAME tar --exclude .svn --exclude upflag -czf $RPMROOT/SOURCES/postscripts.tar.gz postscripts LICENSE.html tar --exclude .svn -czf $RPMROOT/SOURCES/prescripts.tar.gz prescripts tar --exclude .svn -czf $RPMROOT/SOURCES/templates.tar.gz templates tar --exclude .svn -czf $RPMROOT/SOURCES/winpostscripts.tar.gz winpostscripts tar --exclude .svn -czf $RPMROOT/SOURCES/etc.tar.gz etc cp xcat.conf $RPMROOT/SOURCES cp xcat.conf.apach24 $RPMROOT/SOURCES cp xCATMN $RPMROOT/SOURCES cd - >/dev/null elif [ "$RPMNAME" = "xCATsn" ]; then cd `dirname $0`/$RPMNAME tar --exclude .svn -czf $RPMROOT/SOURCES/license.tar.gz LICENSE.html cp xcat.conf $RPMROOT/SOURCES cp xcat.conf.apach24 $RPMROOT/SOURCES cp xCATSN $RPMROOT/SOURCES cp -a ../xCAT/etc/rsyslog.d $RPMROOT/ cp -a ../xCAT/etc/logrotate.d $RPMROOT/ cd - >/dev/null elif [ "$RPMNAME" = "xCAT-buildkit" ]; then ARCH="noarch" TARGET="" tar --exclude .svn --exclude xCAT-buildkit.spec -czf $RPMROOT/SOURCES/$RPMNAME-$VER.tar.gz $RPMNAME elif [ "$RPMNAME" = "xCAT-OpenStack" ]; then tar --exclude .svn --exclude xCAT-OpenStack.spec -czf $RPMROOT/SOURCES/$RPMNAME-$VER.tar.gz $RPMNAME else # do not recognize rpm echo "Unrecognized rpm: $RPMNAME" exit 2 fi rm -f $RPMROOT/SRPMS/$RPMNAME-$VER*rpm $RPMROOT/RPMS/$ARCH/$RPMNAME-$VER*rpm echo "Building $RPMROOT/RPMS/$ARCH/$RPMNAME-$VER-snap*.$ARCH.rpm $EMBEDTXT..." rpmbuild $QUIET -ba $RPMNAME/$RPMNAME.spec $TARGET --define "version $VER" $REL "$EASE" RC=$? if [ "$RPMNAME" = "xCAT" ]; then files=("bmcsetup" "getipmi") for f in "${files[@]}"; do rm -f `dirname $0`/${RPMNAME}/postscripts/$f done fi fi } # make ironic rpm for ironic baremetal driver function makeironic { RPMNAME="$1" ARCH="$2" cd `dirname $0`/$RPMNAME cp -rf ironic_baremetal /tmp/ cd /tmp/ironic_baremetal git init git add * git commit -a -m "generate rpm" python setup.py bdist_rpm rm -rf $RPMROOT/RPMS/$ARCH/ mkdir -p $RPMROOT/RPMS/$ARCH/ cp -rf dist/*.rpm $RPMROOT/RPMS/$ARCH/ rm -rf /tmp/ironic_baremetal } # Make the xCAT-genesis rpm function makegenesis { DIR="xCAT-genesis-builder" SPEC_FILE="xCAT-genesis-base.spec" RPMNAME="$1" cd `dirname $0`/$DIR sed -i s/%%REPLACE_CURRENT_VERSION%%/${VER}/g ${SPEC_FILE} tar --exclude .svn -cjf $RPMROOT/SOURCES/$RPMNAME.tar.bz2 . # undo the changes from the SED command above so it's not tracked by Git git checkout ${SPEC_FILE} cp LICENSE.html $RPMROOT/BUILD cp $RPMNAME.spec $RPMROOT/SOURCES cd - >/dev/null rm -f $RPMROOT/SRPMS/$RPMNAME-$VER*rpm $RPMROOT/RPMS/noarch/$RPMNAME-$VER*rpm echo "Building $RPMROOT/RPMS/noarch/$RPMNAME-$VER-snap*.noarch.rpm $EMBEDTXT..." rpmbuild $QUIET -ba $DIR/$RPMNAME.spec --define "version $VER" $REL "$EASE" } function makegenesisscripts { DIR="xCAT-genesis-scripts" if [ -z "$2" ]; then echo 'Usage: makerpm xCAT-genesis-scripts []' exit 1 fi RPMNAME="$1" ARCH="$2" TARGET="--target $ARCH" cd `dirname $0`/ tar --exclude .svn -cjf $RPMROOT/SOURCES/$RPMNAME.tar.bz2 $DIR cp $DIR/LICENSE.html $RPMROOT/BUILD cp $DIR/$RPMNAME.spec $RPMROOT/SOURCES cd - >/dev/null rm -f $RPMROOT/SRPMS/$RPMNAME-$ARCH-$VER*rpm $RPMROOT/RPMS/noarch/$RPMNAME-$ARCH-$VER*rpm echo "Building $RPMROOT/RPMS/noarch/$RPMNAME-$ARCH-$VER-snap*.noarch.rpm $EMBEDTXT..." rpmbuild $QUIET -ba $DIR/$RPMNAME.spec $TARGET --define "version $VER" $REL "$EASE" } # Export the name of the embedded system we are building for function exportEmbed { if [ -n "$1" ]; then export "$1=1" EMBEDTXT="for $1 " else EMBEDTXT="" fi } # Main code.... if [ -z "$1" ]; then echo 'Usage: makerpm [] []' exit 1 fi OSNAME=$(uname) if [ -z "$XCATVER" ] ; then VER=`cat Version` REL="--define" EASE='usedate 1' else VER=$XCATVER REL="--define" EASE='release 1' fi if [ "$VERBOSE" = "1" -o "$VERBOSE" = "yes" ];then QUIET="" else QUIET="--quiet" fi if [ "$OSNAME" = "AIX" ]; then RPMROOT=/opt/freeware/src/packages else # linux rpmbuild --version > /dev/null if [ $? -gt 0 ]; then echo "Error: rpmbuild does not appear to be installed or working." exit 2 fi RPMROOT=`rpmbuild --eval '%_topdir' xCATsn/xCATsn.spec` if [ $? -gt 0 ]; then echo "Error: Could not determine rpmbuild's root directory." exit 2 fi fi if [ "$1" = "xCAT" -o "$1" = "xCATsn" -o "$1" = "xCAT-buildkit" -o "$1" = "xCAT-OpenStack" ]; then exportEmbed $3 makexcat $1 $2 elif [ "$1" = "xCAT-genesis-builder" ]; then exportEmbed $2 makegenesis $1 elif [ "$1" = "xCAT-genesis-scripts" ]; then exportEmbed $3 makegenesisscripts $1 $2 elif [ "$1" = "xCAT-OpenStack-ironic" ]; then makeironic $1 $2 else # must be one of the noarch rpms exportEmbed $2 makenoarch $1 fi exit $RC