-#! /bin/bash
+#! /usr/lib/util-vserver/sigexec /bin/bash
# Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
#
: ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
test -e "$UTIL_VSERVER_VARS" || {
- echo "Can not find util-vserver installation; aborting..." >&2
+ echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2
exit 1
}
. "$UTIL_VSERVER_VARS"
case "$ACTION" in
(restart)
logging $"Restarting vserver '$VSERVER'"
- execute $_VSERVER "$VSERVER" restart
+ execute $_VSERVER --defaulttty "$VSERVER" restart
;;
(halt|poweroff)
logging $"Stopping vserver '$VSERVER'"
- execute $_VSERVER "$VSERVER" stop
+ execute $_VSERVER --defaulttty "$VSERVER" stop
;;
(swsusp)
## TODO: any senseful action here? Perhaps shutdown scheduler for it?
findObject -e _VS_LOGFILE "$CONFDIR"/.defaults/apps/vshelper/logfile /dev/null
findObject -e _VS_ERRFILE "$CONFDIR"/.defaults/apps/vshelper/logfile /dev/null
+ exec </dev/null
exec >>$_VS_LOGFILE
exec 2>>$_VS_ERRFILE
fi
set -eu
-declare -r XID=$1
-declare -r ACTION=$2
+if $_VSERVER_INFO - FEATURE vshelper0; then
+ declare -r XID=$1
+ declare -r ACTION=$2
+elif $_VSERVER_INFO - FEATURE vshelper; then
+ declare -r ACTION=$1
+ declare -r XID=$2
+else
+ panic $"vshelper functionality not supported by kernel"
+fi
this_xid=$($_VSERVER_INFO - XID)
pxid=
+responsible_xid=$XID
while true; do
- pxid=$($_VSERVER_INFO "$XID" PXID) || break
- test "$pxid" -ne "$this_xid" || break
- xid=$pxid
+ pxid=$($_VSERVER_INFO "$responsible_xid" PXID) || break
+ test "$pxid" -ne "$this_xid" || break
+ xid=$responsible_xid
done
-vserver_id=$($_VSERVER_INFO "$XID" ID) ||
- panic $"No responsible vserver found for xid '$1' ($XID); aborting..."
+vserver_id=$($_VSERVER_INFO "$responsible_xid" ID) ||
+ panic $"No responsible vserver found for xid '$responsible_xid' ($XID); aborting..."
-test "$1" = "$XID" || {
- logging "Giving 'vshelper' task for '$1' to parent vserver '$vserver_id' ($XID)"
+test "$XID" = "$responsible_xid" || {
+ logging "Giving 'vshelper' task for '$XID' to parent vserver '$vserver_id' ($responsible_xid)"
execute $_VSERVER "$vserver_id" exec $_VSHELPER "$@"
}