X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Fvserver-init.functions;h=32c65d9c7649f62e9610d9cc74f719a59dc9a242;hb=35370e2d11f661d780b71204d61439e31b91fb57;hp=1f1255a8aea7f376d06e616cadb530f250a1ea7a;hpb=6860ee7b75b17e1ae7d8e3b8e9aadecfca4a08ca;p=util-vserver.git diff --git a/scripts/vserver-init.functions b/scripts/vserver-init.functions index 1f1255a..32c65d9 100755 --- a/scripts/vserver-init.functions +++ b/scripts/vserver-init.functions @@ -21,7 +21,7 @@ if test -e /etc/init.d/functions; then _postResult() { echo; } lockfile=/var/lock/subsys/$LOCKFILE elif test -e /etc/gentoo-release; then - . /sbin/functions.sh + . /etc/init.d/functions.sh _beginResult() { ebegin "$@"; } _postResult() { :; } success() { eend 0; } @@ -48,3 +48,69 @@ function _endResult() _postResult return $rc } + +function set_helper() +{ + local f="/proc/sys/kernel/vshelper" + if test -e "$f"; then + echo "$_VSHELPER" > "$f" + return 0 + else + return 2 + fi +} + +function kill_contexts() +{ + local xid + for xid in `ls -1 /proc/virtual 2>/dev/null`; do + [ "$xid" = "info" -o "$xid" = "status" ] && continue + $_VATTRIBUTE --xid $xid --set --flag ~persistent + $_VKILL --xid $xid -s 15 + sleep 3 + $_VKILL --xid $xid -s 9 + done + local alive=0 + for xid in `ls -1 /proc/virtual 2>/dev/null`; do + [ "$xid" = "info" -o "$xid" = "status" ] && continue + let alive+=1 + done + test $alive = 0 +} + +function create_dirs() +{ + $_MKDIR -p "$__RUNDIR" && $_MKDIR -p "$__VSHELPERSTATEDIR" && $_MKDIR -p `$_READLINK "$__PKGSTATEREVDIR"` +} + +function mount_cgroup() +{ + _generateCgroupOptions + test -n "$CGROUP_MNT" || return 0 + $_MKDIR -p "$CGROUP_MNT" + if test -n "$CGROUP_MNT_PER_SS"; then + for ss in "${CGROUP_SUBSYS[@]}"; do + $_MKDIR -p "$CGROUP_MNT/$ss" + $_MOUNT -t cgroup -o "$ss" vserver "$CGROUP_MNT/$ss" + done + else + oIFS="$IFS" + IFS=, + ss="${CGROUP_SUBSYS[*]}" + IFS="$oIFS" + $_MOUNT -t cgroup -o "$ss" vserver "$CGROUP_MNT" + fi +} + +function umount_cgroup() +{ + _generateCgroupOptions + test -n "$CGROUP_MNT" || return 0 + if test -n "$CGROUP_MNT_PER_SS"; then + for ss in "${CGROUP_SUBSYS[@]}"; do + $_UMOUNT "$CGROUP_MNT/$ss" + done + else + $_UMOUNT "$CGROUP_MNT" + fi +}