mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-09-05 17:58:14 +00:00
SUSE15 rpmbuild cannot inherit fierds on src.rpm rebuild, address by baking the version into the spec file instead.
305 lines
9.6 KiB
Bash
Executable File
305 lines
9.6 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
|
|
# 3. symbolic link can't work during packaging
|
|
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}
|
|
|
|
sed -i "s/^Version: .*/Version: $XCATVER/" $RPMNAME/$RPMNAME.spec
|
|
sed -i "s/^Release: .*/Release: 1/" $RPMNAME/$RPMNAME.spec
|
|
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"
|
|
sed -i "s/^Version: .*/Version: $XCATVER/" $RPMNAME/$RPMNAME.spec
|
|
sed -i "s/^Release: .*/Release: 1/" $RPMNAME/$RPMNAME.spec
|
|
|
|
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..."
|
|
sed -i "s/^Version: .*/Version: $XCATVER/" $DIR/$RPMNAME.spec
|
|
sed -i "s/^Release: .*/Release: 1/" $DIR/$RPMNAME.spec
|
|
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"
|
|
echo export "$1=1"
|
|
echo $lenovo
|
|
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
|