mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-25 00:15:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			297 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			297 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
 | |
|     #     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}
 | |
| 
 | |
| 		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
 |