X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Fvserver.functions;h=808fcd1800960ff3115feac0d9810bb733c3b051;hb=036b3a89556ef244feea9156ed3381e29a3e7e6a;hp=d10ccf27bf526d227d4d3f288e6db2d872ed1b8a;hpb=989f6cc00a65b6c06f1453f50abc442a28dad714;p=util-vserver.git diff --git a/scripts/vserver.functions b/scripts/vserver.functions index d10ccf2..808fcd1 100644 --- a/scripts/vserver.functions +++ b/scripts/vserver.functions @@ -154,15 +154,21 @@ function _generateNiceCommand function _generateIONiceCommand { local vdir=$1 - local ionice_class=2 - local ionice_priority=0 + local ionice_class= + local ionice_priority= test -n "$_IONICE" || return 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 ) + test -n "$ionice_class$ionice_priority" || return 0 + + if test -z "$ionice_class" -a -n "$ionice_priority"; then + IONICE_CMD=( $_IONICE -c2 -n"$ionice_priority" ) + else + IONICE_CMD=( $_IONICE ${ionice_class:+-c$ionice_class} ${ionice_priority:+-n$ionice_priority} ) + fi } function _generatePersonalityOptions @@ -837,8 +843,11 @@ function prepareInit pushd "$1/vdir" >/dev/null case "$INITSTYLE" in sysv) - { $_FIND var/run ! -type d -print0; \ - $_FIND var/lock ! -type d -print0; } | xargs -0r $_CHROOT_SH rm + local -a dirs=( $($_CHROOT_SH realpath /var/run /var/lock | $_SED 's!^/*!!' || :) ) + local dir + for dir in "${dirs[@]}"; do + $_FIND $dir ! -type d -print0 | xargs -0r $_CHROOT_SH rm + done ;; plain) $_CHROOT_SH rm .autofsck forcefsck 2>/dev/null || : @@ -1407,11 +1416,19 @@ function _namespaceCleanup done done + # keep cgroup mount points + list=( "${list[@]}" "${CGROUP_MNT}" ) + if test -n "$CGROUP_MNT_PER_SS"; then + for ss in "${CGROUP_SUBSYS[@]}"; do + list=( "${list[@]}" "${CGROUP_MNT}/${ss}" ) + done + fi + local -a list_umount while read -r dev path opts; do test -n "$path" || continue - for i in "$root" /dev /proc; do - path_dir="${path}/" + path_dir="${path}/" + for i in "$root" /dev /proc /sys; do test "${path_dir#${i}/}" != "${path_dir}" && continue 2 done for i in "${list[@]}" /; do @@ -1465,15 +1482,18 @@ function _generateCgroupOptions hasCgroup || return 0 - findFile file "$__CONFDIR/.defaults/cgroup/mnt" "" - if test -n "$file"; then - read CGROUP_MNT < "$file" - fi findFile file "$__CONFDIR/.defaults/cgroup/subsys" "" if test -n "$file"; then _readFileToArray CGROUP_SUBSYS "$file" else - CGROUP_SUBSYS=( $($_SED '/^#/d;/^ns[[:space:]]/d;s/[[:space:]].*//' /proc/cgroups) ) + CGROUP_SUBSYS=( $($_AWK '/^#/ { next; } $1 == "ns" { next; } $4 != "0" { print $1; }' /proc/cgroups) ) + fi + findFile file "$__CONFDIR/.defaults/cgroup/mnt" "" + if test -n "$file"; then + read CGROUP_MNT < "$file" + elif test -d /sys/fs/cgroup -a -d /sys/fs/cgroup/"${CGROUP_SUBSYS[0]}"; then + CGROUP_MNT=/sys/fs/cgroup + CGROUP_MNT_PER_SS=1 fi findFile file "$__CONFDIR/.defaults/cgroup/inherit" "" if test -n "$file"; then