X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Fvserver.functions;h=238c4b8cd2ed55b5b9022a0426374ce95d60eb9d;hb=05f8e8a30aa7c113890e3d28341a010c0f994dac;hp=472673a49326ef3b0a646c280bc2330ad8e70c08;hpb=f32bc7966248cb1b9f3c535669db577cd022c369;p=util-vserver.git diff --git a/scripts/vserver.functions b/scripts/vserver.functions index 472673a..238c4b8 100644 --- a/scripts/vserver.functions +++ b/scripts/vserver.functions @@ -20,6 +20,7 @@ # $VSERVER_NAME ... name of vserver declare -a NICE_CMD=() +declare -a IONICE_CMD=() declare -a CHBIND_CMD=() declare -a CAP_OPTS=() declare -a CHCONTEXT_INIT_OPTS=() @@ -135,6 +136,17 @@ function _generateNiceCommand NICE_CMD=( $_NICE -n $nice ) } +function _generateIONiceCommand +{ + local vdir=$1 + local ionice_class=2 + local ionice_priority=0 + + test -r "$vdir/ionice/class" && read ionice_class <"$vdir"/ionice/class + test -r "$vdir/ionice/priority" && read ionice_priority <"$vdir"/ionice/priority + + IONICE_CMD=( $_IONICE -c$ionice_class -n$ionice_priority ) +} function _generatePersonalityOptions { @@ -317,7 +329,15 @@ function _generateInitOptions test -n "$RUNLEVEL_START" || RUNLEVEL_START="default" RC_PATH=/usr/sbin:/usr/bin:/sbin:/bin - INITCMD_START=( env TERM=$TERM /lib/rcscripts/sh/init-vserver.sh "$RUNLEVEL_START" ) + if test -x "$vdir/vdir/lib/rcscripts/sh/init-vserver.sh"; then + RC_WRAP=/lib/rcscripts/sh/init-vserver.sh + elif test -x "$vdir/vdir/lib/rc/sh/init-vserver.sh"; then + RC_WRAP=/lib/rc/sh/init-vserver.sh + else + panic "init-vserver.sh not found; aborting" + fi + + INITCMD_START=( env TERM=$TERM $RC_WRAP "$RUNLEVEL_START" ) INITCMD_STOP=( env -i PATH=$RC_PATH TERM=$TERM RUNLEVEL=0 /sbin/rc shutdown ) INITCMD_PREPARE=( $_FAKE_RUNLEVEL 3 /var/run/utmp ) ;; @@ -553,6 +573,7 @@ function _processSingleInterface local mac local extip local up="up" + local peer _getInterfaceValue ip '' "$iface" _getInterfaceValue extip '' "$iface" "$iface/.." @@ -563,6 +584,7 @@ function _processSingleInterface _getInterfaceValue name '' "$iface" _getInterfaceValue scope '' "$iface" "$iface/.." _getInterfaceValue mac '' "$iface" + _getInterfaceValue peer '' "$iface" test -n "$ip" || { echo $"Can not read ip for '$iface'" >&2; return 1; } test -n "$dev" -o -e "$iface"/nodev || { @@ -605,7 +627,7 @@ function _processSingleInterface _addInterfaceCmd TUNCTL "$dev" $tun_info fi - _addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" $use_bcast ${name:+label "$dev:$name"} dev "$dev" + _addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" $use_bcast ${name:+label "$dev:$name"} dev "$dev" ${peer:+peer "$peer"} #_addInterfaceCmd IP_ROUTE "$ip${prefix:+/$prefix}" dev "$dev" _addInterfaceCmd IP_LINK "$dev" $up elif ! test -n "$N_CONTEXT"; then @@ -747,8 +769,8 @@ function _generateSpaceOptions local vdir="$1" local d="$vdir"/spaces - test ! -e "$d"/pid || \ - OPTS_VSPACE=( "${OPTS_VSPACE[@]}" --pid ) + ( test ! -e "$d"/pid ) || \ + OPTS_VSPACE=( "${OPTS_VSPACE[@]}" --pid ) test ! -e "$d"/net || { OPTS_VSPACE=( "${OPTS_VSPACE[@]}" --net ) @@ -801,6 +823,7 @@ function generateOptions _generateInterfaceOptions "$1" test -n "$_HAVE_CHBIND_OPTIONS" || _generateChbindOptions "$1" _generateNiceCommand "$1" + _generateIONiceCommand "$1" _generateInitOptions "$1" _generateChcontextOptions "$1" _generateScheduleOptions "$1" @@ -1341,7 +1364,7 @@ function _namespaceCleanup done < /proc/mounts # separate loop to avoid races while reading /proc/mounts for i in "${list_umount[@]}"; do - $_UMOUNT -l -n "$i" + $_UMOUNT -l -n -i "$i" done }