From: Enrico Scholz Date: Fri, 5 Mar 2004 03:20:54 +0000 (+0000) Subject: began to implement the new vcontext part... X-Git-Tag: VERSION_0_10~494 X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0dd0acfcab75b2aed3a58b7f187c894115d8f8b4;p=util-vserver.git began to implement the new vcontext part... git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1077 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/util-vserver/scripts/chcontext b/util-vserver/scripts/chcontext index 69f644c..dded01f 100755 --- a/util-vserver/scripts/chcontext +++ b/util-vserver/scripts/chcontext @@ -99,4 +99,82 @@ the GNU General Public License. This program has absolutely no warranty." exit $1 } -isKernelAPI 0x00010012 || exec $_CHCONTEXT_COMPAT "$@" +function cleanup() +{ + if test -d "$tmpdir"; then + local S="$tmpdir"/socket + test ! -S "$S" || $_KEEP_CTX_ALIVE --quit "$S" &>/dev/null + rm -rf "$tmpdir" + fi +} + + +$_VSERVER_INFO - FEATURE migrate || exec $_CHCONTEXT_COMPAT "$@" + +tmp=$(getopt -o + --long cap:,ctx:,disconnect,domainname:,flag:,hostname:,secure,silent,help,version -n "$0" -- "$@") || exit 1 +eval set -- "$tmp" + +OPT_CAPS=() +OPT_CTX= +OPT_DISCONNECT= +OPT_FLAGS=() +OPT_SECURE= +OPT_SILENT= + +while true; do + case "$1" in + --help) showHelp $0 ;; + --version) showVersion ;; + --cap) OPT_CAPS=( "${OPT_CAPS[@]}" "$1" ); shift;; + --ctx) OPT_CTX=$1; shift;; + --disconnect) OPT_DISCONNECT=1; + --domainname) OPT_DOMAINNAME=$1; shift;; + --hostname) OPT_HOSTNAME=$1; shift;; + --flag) OPT_FLAGS=( "${OPT_FLAGS[@]}" "$1" ); shift;; + --secure) OPT_SECURE=1;; + --silent) OPT_SILENT=1;; + --) shift; break;; + *) echo $"chcontext: internal error; arg=='$1'"; exit 1;; + esac + shift +done + +tmpdir= +tmpdir=$(mktemp -d /tmp/chcontext.XXXXXX) +trap "cleanup" EXIT + +xid=$($_VCONTEXT --create ${OPT_SILENT:+--silent} ${OPT_CTX:+--xid "$OPT_CTX"} -- $_CTX_KEEP_ALIVE --socket "$tmpdir"/socket --timeout 60) +rc=$? +test "$rc" -ne 255 || + echo $"chcontext: Failed to create the context; aborting..." + exit 1 +} + +test "$rc" -ne 254 || xid=$OPT_CTX +test "$xid" || { + echo $"chcontext: Failed to determine context xid; aborting..." + exit 1 +} + +set -e +test "$rc" -ne 0 || { + rm -rf "$tmpdir" + unset rc +} + +if test "$rc" -ne 254; then + $_VATTRIBUTE --xid "$xid" -s \ + ${OPT_CAPS:+--cap "${OPT_CAPS[@]}"} + ${OPT_FLAGS:+--flag "${OPT_FLAGS[@]}"} \ + ${OPT_SECURE:+--secure} + + $_VUNAME --xid "$xid" -s \ + ${OPT_DOMAINNAME:+--domainname "$OPT_DOMAINNAME"} \ + ${OPT_HOSTNAME:+--nodename "$OPT_HOSTNAME"} +fi + +exec $_VCONTEXT --migrate --xid "$xid" \ + ${OPT_SILENT:+--silent} \ + ${OPT_DISCONNECT:+--disconnect} \ + ${rc:--syncsock "$tmpdir"/socket} \ + -- "$@"