From e15c3540a3f63352d0dc5ea44820891024527ade Mon Sep 17 00:00:00 2001
From: Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Date: Thu, 11 Mar 2010 17:23:47 +0000
Subject: [PATCH] when systemslices rpm gets updated, make sure the change
 makes it to the .vref image

---
 build.sh                      | 10 +++++++++-
 cron.d/vserver-reference      |  2 +-
 initscripts/vserver-reference | 25 +++++++++++++++++--------
 vserver-reference.spec        |  2 +-
 4 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/build.sh b/build.sh
index a5ccb40..aa04382 100755
--- a/build.sh
+++ b/build.sh
@@ -12,7 +12,8 @@
 # Marc E. Fiuczynski <mef@cs.princeton.edu>
 # Copyright (C) 2004-2007 The Trustees of Princeton University
 #
-# $Id: build.sh,v 1.20 2007/09/06 20:41:23 faiyaza Exp $
+# $Id$
+# $URL$
 #
 
 PATH=/sbin:/bin:/usr/sbin:/usr/bin
@@ -127,6 +128,10 @@ systemvserver_count=$(ls ../build/config.${pldistro}/vserver-*.pkgs 2> /dev/null
     rm -rf ${vdir}
     rm -f  ${vdir}.changes
     mv ${vdir}-tmp ${vdir}
+
+    # cleanup yum remainings
+    rm -rf ${vdir}/build ${vdir}/longbuildroot
+
     echo "--------DONE BUILDING system vserver ${NAME}: $(date)"
 done
 
@@ -138,4 +143,7 @@ postfile=$(pl_locateDistroFile ../build/ ${pldistro} vserver.post)
 # fix sudoers config
 [ -f ${vref}/etc/sudoers ] && echo -e "\nDefaults\tlogfile=/var/log/sudo\n" >> ${vref}/etc/sudoers
 
+# cleanup yum remainings
+rm -rf ${vref}/build ${vref}/longbuildroot
+
 exit 0
diff --git a/cron.d/vserver-reference b/cron.d/vserver-reference
index 9bf8643..0917331 100644
--- a/cron.d/vserver-reference
+++ b/cron.d/vserver-reference
@@ -5,7 +5,7 @@
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2006 The Trustees of Princeton University
 #
-# $Id: pl_mom.cron,v 1.1 2006/04/28 19:12:09 mlhuang Exp $
+# $Id$
 #
 
 @M@ @H@ * * *	root	/etc/init.d/vserver-reference start >/dev/null 2>&1
diff --git a/initscripts/vserver-reference b/initscripts/vserver-reference
index ab1c42f..0785caa 100755
--- a/initscripts/vserver-reference
+++ b/initscripts/vserver-reference
@@ -15,11 +15,13 @@
 case "$1" in
     start|restart|reload)
 	;;
+    force)
+	FORCE=true;;
     stop|status)
 	exit 0
 	;;
     *)
-	echo $"Usage: $0 {start|stop|restart|status}"
+	echo $"Usage: $0 {start|stop|restart|reload|status|force}"
 	exit 1
 	;;
 esac
@@ -88,9 +90,15 @@ for systemvserver in "$__DEFAULT_VSERVERDIR/.vstub/"*/*.cloned ; do
     # e.g. VREFNAME=planetflow-f8-i386
     VREFNAME=$(echo $SLICEFAMILY | sed -e "s,^[^-]*-,$NAME-,")
 
+    VREFPATH="$__DEFAULT_VSERVERDIR/.vref/$VREFNAME"
+    
+    # do not redo existing vref's unless force is mentioned
+    [ -z "$FORCE" -a -d "$VREFPATH" ] && continue
+    [ -z "$FORCE" ] && message=Building
+    [ -n "$FORCE" ] && message=Force-building
+    
     # Copy base reference image
-    if [ ! -d "$__DEFAULT_VSERVERDIR/.vref/$VREFNAME" ] ; then
-	echo -n $"Building VServer reference image for $NAME in $VREFNAME: " >&3 2>&4
+	echo -n $"$message VServer reference image for $NAME in $VREFNAME: " >&3 2>&4
 
 	# Build in temporary directory
 	mkdir -p "$__DEFAULT_VSERVERDIR/.vtmp"
@@ -98,9 +106,9 @@ for systemvserver in "$__DEFAULT_VSERVERDIR/.vstub/"*/*.cloned ; do
 	mkdir -p "$__DEFAULT_VSERVERDIR/.vref"
 
 	# build the systemvserver from the one it was originally cloned from
-	REF="$__DEFAULT_VSERVERDIR/.vref/$SLICEFAMILY"
-	if [ -d "$REF" ] ; then
-	    "$_VCLONE" "$REF"/ "$TMP"/
+	FAMILYREF="$__DEFAULT_VSERVERDIR/.vref/$SLICEFAMILY"
+	if [ -d "$FAMILYREF" ] ; then
+	    "$_VCLONE" "$FAMILYREF"/ "$TMP"/
 	    RETVAL=$?
 	else
 	    RETVAL=1
@@ -117,14 +125,15 @@ for systemvserver in "$__DEFAULT_VSERVERDIR/.vstub/"*/*.cloned ; do
 
 	# Move it to its permanent location when complete
  	if [ $RETVAL -eq 0 ] ; then
-	    mv "$TMP" "$__DEFAULT_VSERVERDIR/.vref/$VREFNAME"
+	    # if in force mode, cleanup 
+	    [ -d "$VREFPATH" ] && rm -rf "$VREFPATH"
+	    mv "$TMP" "$VREFPATH"
 	    success >&3 2>&4
 	else
 	    rm -rf "$TMP"
 	    failure >&3 2>&4
 	fi
 	echo >&3 2>&4
-    fi
 done
 
 echo -n $"Updating VServer reference images: " >&3 2>&4
diff --git a/vserver-reference.spec b/vserver-reference.spec
index a701fe8..22b79da 100644
--- a/vserver-reference.spec
+++ b/vserver-reference.spec
@@ -108,7 +108,7 @@ sed -i -e "s/@M@/$M/" -e "s/@H@/$H/" %{_sysconfdir}/cron.d/vserver-reference
 %post systemslices-%{slicefamily}
 # need to do this for systemslices, for when a new image shows up
 # we've already the service installed and enabled, as systemslices requires the plain package
-[ "$PL_BOOTCD" = "1" ] || service vserver-reference start
+[ "$PL_BOOTCD" = "1" ] || service vserver-reference force
 
 %changelog
 * Fri Jan 29 2010 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - VserverReference-5.0-1
-- 
2.47.0