Tagging module util-vserver - util-vserver-0.30.215-6
[util-vserver.git] / scripts / vserver.stop
index 7d1c01f..cdf4d12 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: vserver.stop 2312 2006-09-15 04:32:28Z dhozac $  --*- sh -*--
+# $Id: vserver.stop 2704 2008-03-16 03:30:22Z dhozac $  --*- sh -*--
 
 # Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
 #  
@@ -48,6 +48,14 @@ trap "cleanup" EXIT
 
 OPTION_FORCE_SYNC=1
 
+while test "$#" -gt 0; do
+    case "$1" in
+       (--rescue-init) shift; _IS_FAKEINIT=1;;
+       (--)            shift; break;;
+       (-*)            panic $"vserver ... stop: unknown option '$1'";;
+    esac
+done
+
 set -e
 generateOptions   "$VSERVER_DIR"
 set +e
@@ -62,28 +70,38 @@ cd "$VSERVER_DIR"/vdir/
 
 test -z "$OPTION_DEFAULTTTY" || setDefaultTTY "$VSERVER_DIR"
 
+$_VATTRIBUTE --set --xid "$S_CONTEXT" --flag !SC_HELPER
+
 fail=
 initWait          "$VSERVER_DIR" "$S_CONTEXT" vwait_statdir
 if test -n "$_IS_FAKEINIT" && \
    $_VSERVER_INFO - FEATURE vkill; then
-    $_VKILL -s INT --xid "$S_CONTEXT" -- 1 || fail=1
-    ## HACK: remove the 'initpid' stuff above when PID virtualization
-    ## is implemented
+    if ! vshelper.isStopSync; then
+       $_VKILL -s INT --xid "$S_CONTEXT" -- 1 || fail=1
+    fi
 elif $_VSERVER_INFO - FEATURE migrate; then
     "${NICE_CMD[@]}" \
-    ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \
+    "${CHBIND_CMD[@]}" \
+    "$_VSPACE" --enter "$S_CONTEXT" "${OPTS_VSPACE[@]}" -- \
+    "$_VTAG" --migrate "${OPTS_VTAG_ENTER[@]}" --silent -- \
     $_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" -- \
     "${INITCMD_STOP[@]}" || fail=1
 else
     "${NICE_CMD[@]}" \
     "$_CHBIND"       "${CHBIND_OPTS[@]}" \
     "$_EXEC_ULIMIT"  "$VSERVER_DIR/ulimits" \
-    ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \
     $_CHCONTEXT_COMPAT    "${CHCONTEXT_OPTS[@]}" \
     "$_CAPCHROOT"    "${CAPCHROOT_OPTS[@]}" "." \
     "${INITCMD_STOP[@]}" || fail=1
 fi
 
+# Remove persistent so those contexts can be stopped
+$_VATTRIBUTE --set --xid "$S_CONTEXT" --flag !persistent 2>/dev/null || :
+if $_VSERVER_INFO -q "$N_CONTEXT" XIDTYPE static &&
+   $_VSERVER_INFO - FEATURE vnet; then
+    $_NATTRIBUTE --set --nid "$N_CONTEXT" --flag !persistent 2>/dev/null || :
+fi
+
 vshelper.doStopSync
 
 waitForSync "$VSERVER_DIR" "$sync_fifo" "$vwait_statdir"
@@ -96,7 +114,9 @@ sendKillSequence   "$S_CONTEXT" "${INITKILL_SEQ[@]}"
     echo $"Vserver '$VSERVER_DIR' still running unexpectedly; please investigate it manually..." >&2
 
 execScriptlets    "$VSERVER_DIR" "$VSERVER_NAME" post-stop
-    
+
+handleDeviceMap --unset "$S_CONTEXT" "$VSERVER_DIR/apps/vdevmap"
+
 umountVserver     "$VSERVER_DIR" || :
 disableInterfaces "$VSERVER_DIR"