added support for new migrate feature
authorEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Fri, 5 Mar 2004 22:10:06 +0000 (22:10 +0000)
committerEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Fri, 5 Mar 2004 22:10:06 +0000 (22:10 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1117 94cd875c-1c1d-0410-91d2-eb244daf1a30

util-vserver/scripts/vserver.functions
util-vserver/scripts/vserver.start
util-vserver/scripts/vserver.stop
util-vserver/scripts/vserver.suexec

index 9db6007..3d0def0 100644 (file)
@@ -36,6 +36,11 @@ declare -a INITCMD_PREPARE=()
 declare -a INITKILL_SEQ=()
 declare -a ENTER_SHELL=()
 
+declare -a OPTS_VCONTEXT_CREATE=()
+declare -a OPTS_VCONTEXT_MIGRATE=()
+declare -a OPTS_VATTRIBUTE=()
+USE_VNAMESPACE=
+
 INTERFACE_CMDS_IDX=0
 _HAVE_INTERFACE_OPTIONS=
 _HAVE_CHBIND_OPTIONS=
@@ -99,10 +104,12 @@ function _generateCapabilityOptions
        case x"$cap" in
            x|x#)       ;;
            !CAP_SYSCHROOT)
+               OPTS_VATTRIBUTE=( "${OPTS_VATTRIBUTE[@]" --cap "$cap" )
                CAP_OPTS=( "${CAP_OPTS[@]}" --cap "$cap" )
                CAPCHROOT_OPTS=( "${CAPCHROOT_OPTS[@]}" --nochroot )
                ;;
            *)
+               OPTS_VATTRIBUTE=( "${OPTS_VATTRIBUTE[@]" --cap "$cap" )
                CAP_OPTS=( "${CAP_OPTS[@]}" --cap "$cap" );;
        esac
     done <"$vdir"/capabilities
@@ -185,6 +192,7 @@ function _generateInitOptions
            INITCMD_START=( /sbin/init )
            INITCMD_STOP=(  /sbin/init )
            CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit )
+           OPTS_VCONTEXT_MIGRATE=( "${OPTS_VCONTEXT_MIGRATE[@]}" --fakeinit --disconnect )
            test -z "$runlevel_start" || INITCMD_START=( "${INITCMD_START[@]}" "$runlevel_start" )
            test -z "$runlevel_stop"  || INITCMD_STOP=(  "${INITCMD_STOP[@]}"  "$runlevel_stop"  )
            ;;
@@ -195,6 +203,7 @@ function _generateInitOptions
            CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit )
            INITCMD_START_SYNC=( "$_INITSYNC_MINIT_START" "$vdir" )
            INITCMD_STOP_SYNC=(  "$_INITSYNC_MINIT_STOP"  "$vdir" )
+           OPTS_VCONTEXT_MIGRATE=( "${OPTS_VCONTEXT_MIGRATE[@]}" --fakeinit --disconnect )
            test -z "$runlevel_start" || INITCMD_START=( "${INITCMD_START[@]}" "$runlevel_start" )
            test -z "$runlevel_stop"  || INITCMD_STOP=(  "${INITCMD_STOP[@]}"  "$runlevel_stop"  )
            ;;
@@ -231,16 +240,20 @@ function _generateFlagOptions
            xnamespace)         ;;
            xfakeinit)
                CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit )
+               OPTS_VCONTEXT_MIGRATE=( "${OPTS_VCONTEXT_MIGRATE[@]}" --fakeinit --disconnect )
                ;;
            *)
+               OPTS_VATTRIBUTE=( "${OPTS_VATTRIBUTE[@]}" --flag "$flag" )
                CHCONTEXT_FLAG_OPTS=( "${CHCONTEXT_FLAG_OPTS[@]}"
                                      --flag "$flag" )
                ;;
        esac
     done <"$vdir"/flags
 
-    isAvoidNamespace "$cfgdir" || \
+    isAvoidNamespace "$cfgdir" || {
+       USE_VNAMESPACE=1
        CHCONTEXT_FLAG_OPTS=( "${CHCONTEXT_FLAG_OPTS[@]}" --flag namespace )
+    }
 }
 
 function _generateChcontextOptions
@@ -268,6 +281,11 @@ function _generateChcontextOptions
                     ${ctx:+--ctx "$ctx"} \
                      ${hostname:+--hostname "$hostname"} \
                     ${domainname:+--domainname "$domainname"} )
+
+    OPTS_VCONTEXT_CREATE=( $SILENT_OPT \
+                          ${ctx:+--xid "$ctx"} )
+    ## put '--secure' at front so that it can be overridden
+    OPTS_VATTRIBUTE=( --secure "${OPTS_VATTRIBUTE[@]}" )
 }
 
 function _getInterfaceValue
@@ -456,6 +474,10 @@ function mountVserver
     popd >/dev/null
 
     test "$_HAVE_CHBIND_OPTIONS" || _generateChbindOptions "$cfgdir"
+
+    test -z "$NAMESPACE_CLEANUP" || isAvoidNamespace "$cfgdir" || \
+       $_VNAMESPACE --cleanup
+       
     $_CHBIND "${CHBIND_OPTS[@]}" \
        $_SECURE_MOUNT -a --chroot "$vdir" --fstab "$cfgdir"/fstab
 
index d1e4f42..d67c7a1 100644 (file)
@@ -32,13 +32,25 @@ cd "$VSERVER_DIR"/vdir/
 execScriptlets   "$VSERVER_DIR" "$VSERVER_NAME" pre-start
 
 cd "$VSERVER_DIR"/vdir/
-"${NICE_CMD[@]}" \
+
+if $_VSERVER_INFO - FEATURE migrate; then
+    $_CHBIND     "${CHBIND_OPTS[@]}" \
+    $_VCONTEXT   --create "${OPTS_VCONTEXT_CREATE[@]}" \
+    ${USE_VNAMESPACE:+$_VNAMESPACE --set} \
+    $_VLIMIT     --dir "$VSERVER_DIR/rlimits" --missingok \
+    $_VATTRIBUTE --set "${OPTS_VATTRIBUTE[@]}" \
+    $_VCONTEXT   --migrate --chroot $SILENT_OPT "${OPTS_VCONTEXT_MIGRATE[@]}" \
+    -- "${INITCMD_START[@]}"
+else
+    "${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[@]}"
+    "$_CAPCHROOT"    "${CAPCHROOT_OPTS[@]}" . \
+    -- "${INITCMD_START[@]}"
+fi
 
 "${INITCMD_START_SYNC[@]}"
 
index f86697a..d227561 100644 (file)
@@ -30,12 +30,20 @@ cd "$VSERVER_DIR"/vdir/
 execScriptlets    "$VSERVER_DIR" "$VSERVER_NAME" pre-stop
 
 cd "$VSERVER_DIR"/vdir/
-"${NICE_CMD[@]}" \
+
+if $_VSERVER_INFO - FEATURE migrate; then
+    ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \
+    $_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" \
+    -- "${INITCMD_STOP_SYNC[@]}" || :
+else
+    "${NICE_CMD[@]}" \
     "$_CHBIND"       "${CHBIND_OPTS[@]}" \
     "$_EXEC_ULIMIT"  "$VSERVER_DIR/ulimits" \
+    ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \
     "$_CHCONTEXT"    "${CHCONTEXT_OPTS[@]}" \
     "$_CAPCHROOT"    "${CAPCHROOT_OPTS[@]}" . "${INITCMD_STOP[@]}" && \
-       "${INITCMD_STOP_SYNC[@]}" || :
+    -- "${INITCMD_STOP_SYNC[@]}" || :
+fi
 
 sendKillSequence  "$S_CONTEXT" "${INITKILL_SEQ[@]}"
 
index 85d92e0..bb6992c 100644 (file)
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
-isVserverRunning "$VSERVER_DIR" S_CONTEXT || :
+isVserverRunning "$VSERVER_DIR" S_CONTEXT || {
+    echo $"'vserver ... suexec' is support for running vservers only; aborting..." >&2
+    exit 1
+}
 generateOptions  "$VSERVER_DIR"
 
 user=$1
 shift
 
 cd "$VSERVER_DIR"/vdir/
-exec \
-"${NICE_CMD[@]}" \
+
+if $_VSERVER_INFO - FEATURE migrate; then
+    exec \
+    ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \
+    $_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" --uid "$user" \
+    -- "$@"
+else
+    exec \
+    "${NICE_CMD[@]}" \
     "$_CHBIND"       "${CHBIND_OPTS[@]}" \
     "$_EXEC_ULIMIT"  "$VSERVER_DIR/ulimits" \
+    ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \
     "$_CHCONTEXT"    "${CHCONTEXT_OPTS[@]}" \
-    "$_CAPCHROOT"    "${CAPCHROOT_OPTS[@]}" --suid "$user" . "$@"
-    
+    "$_CAPCHROOT"    "${CAPCHROOT_OPTS[@]}" --suid "$user" . \
+    -- "$@"
+fi