vserver-init.functions (2964B)
1 #! /bin/bash 2 3 # Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> 4 # 5 # This program is free software; you can redistribute it and/or modify 6 # it under the terms of the GNU General Public License as published by 7 # the Free Software Foundation; version 2 of the License. 8 # 9 # This program is distributed in the hope that it will be useful, 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 # GNU General Public License for more details. 13 # 14 # You should have received a copy of the GNU General Public License 15 # along with this program; if not, write to the Free Software 16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 18 if test -e /etc/init.d/functions; then 19 . /etc/init.d/functions 20 _beginResult() { echo -n "$@..."; } 21 _postResult() { echo; } 22 lockfile=/var/lock/subsys/$LOCKFILE 23 elif test -e /etc/gentoo-release; then 24 . /etc/init.d/functions.sh 25 _beginResult() { ebegin "$@"; } 26 _postResult() { :; } 27 success() { eend 0; } 28 passed() { eend 0; } 29 failure() { eend 1; } 30 lockfile=/var/run/$LOCKFILE 31 else 32 _beginResult() { echo -n "$@..."; } 33 _postResult() { :; } 34 success() { echo .; } 35 passed() { echo .; } 36 failure() { echo ERROR; } 37 lockfile=/var/run/$LOCKFILE 38 fi 39 40 function _endResult() 41 { 42 local rc=$1 43 case "$rc" in 44 (0) success;; 45 (2) passed; rc=0;; 46 (*) failure;; 47 esac 48 _postResult 49 return $rc 50 } 51 52 function set_helper() 53 { 54 local f="/proc/sys/kernel/vshelper" 55 if test -e "$f"; then 56 echo "$_VSHELPER" > "$f" 57 return 0 58 else 59 return 2 60 fi 61 } 62 63 function kill_contexts() 64 { 65 local xid 66 for xid in `ls -1 /proc/virtual 2>/dev/null`; do 67 [ "$xid" = "info" -o "$xid" = "status" ] && continue 68 $_VATTRIBUTE --xid $xid --set --flag ~persistent 69 $_VKILL --xid $xid -s 15 70 sleep 3 71 $_VKILL --xid $xid -s 9 72 done 73 local alive=0 74 for xid in `ls -1 /proc/virtual 2>/dev/null`; do 75 [ "$xid" = "info" -o "$xid" = "status" ] && continue 76 let alive+=1 77 done 78 test $alive = 0 79 } 80 81 function create_dirs() 82 { 83 $_MKDIR -p "$__RUNDIR" && $_MKDIR -p "$__VSHELPERSTATEDIR" && $_MKDIR -p `$_READLINK "$__PKGSTATEREVDIR"` 84 } 85 86 function mount_cgroup() 87 { 88 _generateCgroupOptions 89 test -n "$CGROUP_MNT" || return 0 90 $_MKDIR -p "$CGROUP_MNT" 91 if test -n "$CGROUP_MNT_PER_SS"; then 92 for ss in "${CGROUP_SUBSYS[@]}"; do 93 $_MKDIR -p "$CGROUP_MNT/$ss" 94 $_GREP -q "$CGROUP_MNT/$ss " /proc/mounts || \ 95 $_MOUNT -t cgroup -o "$ss" vserver "$CGROUP_MNT/$ss" 96 done 97 else 98 oIFS="$IFS" 99 IFS=, 100 ss="${CGROUP_SUBSYS[*]}" 101 IFS="$oIFS" 102 $_MOUNT -t cgroup -o "$ss" vserver "$CGROUP_MNT" 103 fi 104 } 105 106 function umount_cgroup() 107 { 108 _generateCgroupOptions 109 test -n "$CGROUP_MNT" || return 0 110 if test -n "$CGROUP_MNT_PER_SS"; then 111 for ss in "${CGROUP_SUBSYS[@]}"; do 112 $_UMOUNT "$CGROUP_MNT/$ss" 113 done 114 else 115 $_UMOUNT "$CGROUP_MNT" 116 fi 117 }