gentoo: use /var/run for new /run compatibility
[util-vserver.git] / scripts / vsomething
index 5567869..a87c1b7 100755 (executable)
@@ -23,12 +23,20 @@ test -e "$UTIL_VSERVER_VARS" || {
 }
 . "$UTIL_VSERVER_VARS"
 . "$_LIB_FUNCTIONS"
+. "$__PKGLIBDIR/vserver.functions"
 
 
 function showHelp()
 {
     echo \
-$"Usage: $0 [--quiet|-q] [--debug] <cmd> [--] <vserver-name>* [--all] -- <params>+
+$"Usage: $0 [--quiet|-q] [--debug] <cmd> [--] <vserver-name>* [<filter>] -- <params>+
+where <filter> is any combination of:
+--all        All guests
+--running    All running guests
+--stopped    All stopped guests
+--marked     All guests with a mark set
+--unmarked   All guests without a mark set
+--mark <m>   All guests with mark <m> set
 
 Execute <cmd> <vserver> <params>* foreach vserver.
 
@@ -74,17 +82,24 @@ cmd=$1
 title=${VSOMETHING_TITLE:-$cmd}
 shift
 
-while test "$#" -ge 1; do
-    if getAllVserversByArg tmp "$1"; then
-       vservers=( "${vservers[@]}" "${tmp[@]}" )
-    else
+test "$1" != "--" || \
+   shift
+
+if getAllVserversByArg tmp "$@"; then
+    vservers=( "${vservers[@]}" "${tmp[@]}" )
+    while test "$#" -ge 1 -a "$1" != "--"; do
+        shift
+    done
+    shift
+else
+    while test "$#" -ge 1; do
        case "$1" in
            (--) shift; break;;
            (*)  vservers=( "${vservers[@]}" "$1" )
        esac
-    fi
-    shift
-done
+       shift
+    done
+fi
 
 
 test "${#vservers[@]}" -ne 1 || is_quiet=1
@@ -105,8 +120,15 @@ for i in "${vservers[@]}"; do
        if pkgmgmt.isInternal "$i"; then
            $_VSERVER "$i" exec "$cmd" "$@"
        else
-           callInNamespace "$i" \
-               "$_VNAMESPACE" --new -- "$VSOMETHING_WORKER" "$i" "$@"
+           _setVserverDir "$i"
+           # subshell so we don't have to clean up
+           ( _generateChbindOptions "$VSERVER_DIR"
+             $_VSERVER "$i" status &> /dev/null || \
+               CHBIND_CMD=()
+             callInNamespace "$i" \
+               $_VNAMESPACE --new -- \
+               "${CHBIND_CMD[@]}" \
+               "$VSOMETHING_WORKER" "$i" "$@" )
        fi
     else
        "$cmd" "$i" "$@"