initial checkin
[util-vserver.git] / util-vserver / scripts / vserver.start
index 77bf92d..c5db43b 100644 (file)
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 if isVserverRunning "$VSERVER_DIR"; then
-    echo $"vserver '$VSERVER_NAME' already running; aborting..."
+    echo $"vserver '$VSERVER_NAME' already running; aborting..." >&2
     exit 1
 fi
 
+function cleanup()
+{
+    test    "$OPTION_DEBUG"    || exec 2>/dev/null >/dev/null
+    test -z "$is_started"      || return 0
+    test -z "$is_mounted"      || umountVserver     "$VSERVER_DIR" || :
+    test -z "$have_interfaces" || disableInterfaces "$VSERVER_DIR" || :
+}
+
+is_started=
+is_mounted=
+have_interfaces=
+
+trap "cleanup" EXIT
+
 set -e
 generateOptions  "$VSERVER_DIR"
 execScriptlets   "$VSERVER_DIR" "$VSERVER_NAME" prepre-start
-enableInterfaces "$VSERVER_DIR"
+enableInterfaces "$VSERVER_DIR" && have_interfaces=1
 
-mountVserver "$VSERVER_DIR"
+mountVserver "$VSERVER_DIR"     && is_mounted=1
 prepareInit  "$VSERVER_DIR"
 
 cd "$VSERVER_DIR"/vdir/
 execScriptlets   "$VSERVER_DIR" "$VSERVER_NAME" pre-start
 
 cd "$VSERVER_DIR"/vdir/
-"${NICE_CMD[@]}" \
-    "$_CHBIND"       "${CHBIND_OPTS[@]}" \
-    "$_EXEC_ULIMIT"  "$VSERVER_DIR/ulimits" \
-    "$_CHCONTEXT"    "${CHCONTEXT_OPTS[@]}" "${CHCONTEXT_INIT_OPTS[@]}" \
-    "$_SAVE_CTXINFO" "$VSERVER_DIR" \
-    "$_CLEARENV" \
-    "$_CAPCHROOT"    "${CAPCHROOT_OPTS[@]}" . "${INITCMD_START[@]}"
+
+if $_VSERVER_INFO - FEATURE migrate; then
+    $_CHBIND     "${CHBIND_OPTS[@]}" -- \
+    $_VCONTEXT   --create "${OPTS_VCONTEXT_CREATE[@]}" -- \
+    ${USE_VNAMESPACE:+$_VNAMESPACE --set -- } \
+    $_VLIMIT     --dir "$VSERVER_DIR"/rlimits --missingok -- \
+    $_VUNAME     --xid self --dir "$VSERVER_DIR"/uts     --missingok -- \
+    $_VUNAME     --xid self --set -t context="$VSERVER_DIR" -- \
+    $_VATTRIBUTE --set "${OPTS_VATTRIBUTE[@]}" -- \
+    $_SAVE_CTXINFO "$VSERVER_DIR" \
+    $_VCONTEXT   --migrate-self --endsetup --chroot $SILENT_OPT "${OPTS_VCONTEXT_MIGRATE[@]}" -- \
+    "${INITCMD_START[@]}"
+else
+    ${NICE_CMD[@]} \
+    $_CHBIND           "${CHBIND_OPTS[@]}" \
+    $_EXEC_ULIMIT      "$VSERVER_DIR/ulimits" \
+    $_CHCONTEXT_COMPAT "${CHCONTEXT_OPTS[@]}" "${CHCONTEXT_INIT_OPTS[@]}" \
+    $_SAVE_CTXINFO     "$VSERVER_DIR" \
+    $_CLEARENV \
+    $_CAPCHROOT        "${CAPCHROOT_OPTS[@]}" . \
+    "${INITCMD_START[@]}"
+fi
 
 "${INITCMD_START_SYNC[@]}"
 
 execScriptlets   "$VSERVER_DIR" "$VSERVER_NAME" post-start
+is_started=1