declare -a OPTS_VCONTEXT_CREATE=()
declare -a OPTS_VCONTEXT_MIGRATE=()
-declare -a OPTS_VATTRIBUTE=()
+declare -a OPTS_VATTRIBUTE=( --flag fakeinit )
declare -a OPTS_VSCHED=()
declare -a VSERVER_EXTRA_CMDS=()
while isCtxRunning "$ctx"; do
test -z "$wait" || sleep "$wait"
- $_VKILL -c "$ctx" ${1:+-s "$1"}
+ $_VKILL -c "$ctx" ${1:+-s "$1"} 2>/dev/null || :
test "$2" || break
wait="$2"
shift 2
test "$ip" || { echo $"Can not read ip for '$iface'" >&2; return 1; }
- test ! -e "$iface"/only_ip || {
- ## LEGACY ALERT
- echo $"The 'only_ip' flag for interface '$iface' is deprecated; use 'nodev' instead of" >&2
- unset dev
- }
- test ! -e "$iface"/nodev || unset dev
test ! -e "$iface"/down || up=
- if test "$dev"; then
+ while test "$dev"; do
_transformMask2Prefix prefix "$prefix" "$mask"
+ INTERFACES=( "${INTERFACES[@]}" "$ip${prefix:+/$prefix}" )
+
+ test ! -e "$iface"/nodev || break
+ test ! -e "$iface"/only_ip || {
+ ## LEGACY ALERT
+ echo $"The 'only_ip' flag for interface '$iface' is deprecated; use 'nodev' instead of" >&2
+ break
+ }
case "$dev" in
(*.*)
_addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" dev "$dev"
test -z "$extip" || _addInterfaceCmd IPTABLES "$ip${prefix:+/$prefix}" ${name:+label "$dev:$name"} "$ctx" "$extip"
fi
- INTERFACES=( "${INTERFACES[@]}" "$ip${prefix:+/$prefix}" )
- fi
+
+ break
+ done
}
## Usage: _generateInterfaceOptions <vserver-directory>
local i=0
declare -a var
+ lock "$LOCKDIR"/vserver.interfaces
+
while test $i -lt $INTERFACE_CMDS_IDX; do
eval var='( "${INTERFACE_CMDS_'$i'[@]}" )'
local type=${var[0]}
shift 2
$_MODPROBE ${name:+-o "$name"} "$mod" "$@"
;;
- NAMEIF) $_NAMEIF "$@";;
- VCONFIG) $_VCONFIG add "$@";;
- IP_ADDR) $_IP addr add "$@";;
- IP_LINK) $_IP link set "$@";;
- IP_ROUTE) $_IP route add "$@";;
- *) echo "Unknown interface-command type '$type'" >&2; false;;
+ NAMEIF) $_NAMEIF "$@";;
+ VCONFIG) $_VCONFIG add "$@";;
+ IP_ADDR) $_IP addr add "$@";;
+ IP_ADDR_FLUSH) $_IP addr flush "$@";;
+ IP_LINK) $_IP link set "$@";;
+ IP_ROUTE) $_IP route add "$@";;
+ *) echo "Unknown interface-command type '$type'" >&2; false;;
esac
let ++i
done
+
+ unlock 1
}
function disableInterfaces
local i=$INTERFACE_CMDS_IDX
declare -a var
+ lock "$LOCKDIR"/vserver.interfaces
+
while test $i -gt 0; do
let --i || :
set -- "${var[@]}"
case "$type" in
- IPTABLES) ;; ## TODO
- MODPROBE) $_RMMOD "${2:-$1}";;
- NAMEIF) ;;
- VCONFIG) $_VCONFIG rem "$@";;
- IP_ADDR) $_IP addr del "$@";;
- IP_LINK) ;; ## Ignore the link-down command for now
- IP_ROUTE) $_IP route del "$@";;
- *) echo "Unknown interface-command type '$type'" >&2; false;;
+ IPTABLES) ;; ## TODO
+ MODPROBE) $_RMMOD "${2:-$1}";;
+ NAMEIF) ;;
+ VCONFIG) $_VCONFIG rem "$@";;
+ IP_ADDR) $_IP addr del "$@";;
+ IP_ADDR_FLUSH) ;;
+ IP_LINK) ;; ## Ignore the link-down command for now
+ IP_ROUTE) $_IP route del "$@";;
+ *) echo "Unknown interface-command type '$type'" >&2; false;;
esac
done
+
+ unlock 1
}
## Usage: prepareInit <vserver-directory>
{ find var/run ! -type d -print0; \
find var/lock ! -type d -print0; } | xargs -0r $_CHROOT_RM
;;
+ plain)
+ $_CHROOT_RM .autofsck forcefsck
+ : | $_CHROOT_CAT fastboot
+ ;;
minit)
;;
esac
if test "$_IS_FAKEINIT"; then
CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit )
- OPTS_VCONTEXT_MIGRATE=( "${OPTS_VCONTEXT_MIGRATE[@]}" --fakeinit --disconnect )
+ OPTS_VCONTEXT_MIGRATE=( "${OPTS_VCONTEXT_MIGRATE[@]}" --initpid --disconnect )
fi
}
function _sourceWrap
{
- local vdir name flavor start i
+ local vdir name flavor start i already_handled base
. "$@"
}
## Usage: execScriptlets <vserver-cfgdir> <vserver-name> <script-flavor>
function execScriptlets
{
- local vdir=$1
- local name=$2
- local flavor=$3
- local start=
- local i
+ declare -r vdir=$1
+ declare -r name=$2
+ declare -r flavor=$3
+ local base i
+
+ for base in "$vdir"/scripts "$CONFDIR"/.defaults/scripts; do
+ local DONT_SKIP_DEFAULTS=
+ local already_handled=
+
+ for i in "$base/$flavor" "$base/$flavor.d"/*; do
+ test -f "$i" -a -r "$i" || continue
+ already_handled=1
+ local start=
+ test -x "$i" || start=_sourceWrap
+ $start "$i" "$flavor" "$name"
+ done
- for i in "$vdir/scripts/$flavor" "$vdir/scripts/$flavor.d"/*; do
- test -f "$i" -a -r "$i" || continue
- test -x "$i" || start=_sourceWrap
- $start "$i" "$flavor" "$name"
+ test -z "$already_handled" -o "$DONT_SKIP_DEFAULTS" || break
done
}