From e035f164c858115c488d0f2fc1e0d356a9096996 Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Fri, 5 Mar 2004 22:10:06 +0000 Subject: [PATCH] added support for new migrate feature git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1117 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- util-vserver/scripts/vserver.functions | 24 +++++++++++++++++++++++- util-vserver/scripts/vserver.start | 16 ++++++++++++++-- util-vserver/scripts/vserver.stop | 12 ++++++++++-- util-vserver/scripts/vserver.suexec | 22 +++++++++++++++++----- 4 files changed, 64 insertions(+), 10 deletions(-) diff --git a/util-vserver/scripts/vserver.functions b/util-vserver/scripts/vserver.functions index 9db6007..3d0def0 100644 --- a/util-vserver/scripts/vserver.functions +++ b/util-vserver/scripts/vserver.functions @@ -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 diff --git a/util-vserver/scripts/vserver.start b/util-vserver/scripts/vserver.start index d1e4f42..d67c7a1 100644 --- a/util-vserver/scripts/vserver.start +++ b/util-vserver/scripts/vserver.start @@ -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[@]}" diff --git a/util-vserver/scripts/vserver.stop b/util-vserver/scripts/vserver.stop index f86697a..d227561 100644 --- a/util-vserver/scripts/vserver.stop +++ b/util-vserver/scripts/vserver.stop @@ -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[@]}" diff --git a/util-vserver/scripts/vserver.suexec b/util-vserver/scripts/vserver.suexec index 85d92e0..bb6992c 100644 --- a/util-vserver/scripts/vserver.suexec +++ b/util-vserver/scripts/vserver.suexec @@ -16,17 +16,29 @@ # 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 -- 1.8.1.5