mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-20 18:52:07 +00:00
296 lines
9.1 KiB
Bash
Executable File
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
|