2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-21 11:12:04 +00:00
xcat-core/makerpm
2017-12-31 23:59:59 +00:00

296 lines
9.1 KiB
Bash
Executable File

#!/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 <RPMname> <arch> [<embedded-system>]'
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 <arch> [<embedded-system>]'
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 <RPMname> [<arch>] [<embedded-system>]'
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