X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=initscripts%2Fvserver-reference;h=aff0275ad5ca65cf0b79721362835dbd2b4e36bb;hb=e7c0f23f7397d786c528d8c578867a8147891dd5;hp=410e807018a6581fb52265fd39de2d15625c97b2;hpb=714ea335aa0e47a673b765eb894bc02a39466b05;p=sliceimage.git diff --git a/initscripts/vserver-reference b/initscripts/vserver-reference index 410e807..aff0275 100755 --- a/initscripts/vserver-reference +++ b/initscripts/vserver-reference @@ -9,17 +9,17 @@ # Mark Huang # Copyright (C) 2004 The Trustees of Princeton University # -# $Id$ -# 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 +88,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 +104,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 +123,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 @@ -137,7 +144,7 @@ for file in /etc/hosts /etc/resolv.conf /etc/planetlab/node_id \ /etc/pki/rpm-gpg/* ; do if [ -r $file ] ; then for vroot in $VROOTS ; do - install -D -m 644 $file $vroot/$file + [ -d $vroot ] && install -D -m 644 $file $vroot/$file done fi done @@ -146,14 +153,16 @@ done for vroot in $VROOTS ; do # NOTE: without this step, the 'rpm --allmatches' step can hang on boot # Remove stale RPM locks from all VROOT dirs - rm -f $vroot/var/lib/rpm/__db* + [ -d $vroot ] && rm -f $vroot/var/lib/rpm/__db* done # (Re)install GPG signing keys if [ -d /etc/pki/rpm-gpg ] ; then for vroot in $VROOTS ; do - chroot $vroot rpm --allmatches -e gpg-pubkey || : - chroot $vroot rpm --import /etc/pki/rpm-gpg/* || : + if [ -d $vroot ] ; then + chroot $vroot rpm --allmatches -e gpg-pubkey || : + chroot $vroot rpm --import /etc/pki/rpm-gpg/* || : + fi done fi @@ -168,13 +177,15 @@ CACERT="/usr/boot/cacert.pem /mnt/cdrom/bootme/cacert/$PLC_BOOT_HOST/cacert.pem" for cacert in $CACERT ; do if [ -r $cacert ] ; then for vroot in $VROOTS ; do - # Install boot server certificate - install -D -m 644 $cacert $vroot/usr/boot/cacert.pem - echo $PLC_BOOT_HOST > $vroot/usr/boot/boot_server - - # Also install in /mnt/cdrom/bootme for backward compatibility - install -D -m 644 $cacert $vroot/mnt/cdrom/bootme/cacert/$PLC_BOOT_HOST/cacert.pem - echo $PLC_BOOT_HOST > $vroot/mnt/cdrom/bootme/BOOTSERVER + if [ -d $vroot ] ; then + # Install boot server certificate + install -D -m 644 $cacert $vroot/usr/boot/cacert.pem + echo $PLC_BOOT_HOST > $vroot/usr/boot/boot_server + + # Also install in /mnt/cdrom/bootme for backward compatibility + install -D -m 644 $cacert $vroot/mnt/cdrom/bootme/cacert/$PLC_BOOT_HOST/cacert.pem + echo $PLC_BOOT_HOST > $vroot/mnt/cdrom/bootme/BOOTSERVER + fi done break fi