# 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" \
- "$_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