80548d9b44f791ef573a677988ac215e8ecffec7
[util-vserver.git] / gentoo / util-vserver
1 #!/sbin/runscript
2 # Copyright 1999-2007 Gentoo Foundation
3 # Distributed under the terms of the GNU General Public License v2
4
5 set_helper() {
6         local f="/proc/sys/kernel/vshelper"
7         if [ -e "$f" ]; then
8                 echo "$_VSHELPER" > "$f"
9         fi
10         return 0
11 }
12
13 kill_contexts()
14 {
15         local xid
16         for xid in `ls -1 /proc/virtual 2>/dev/null`; do
17                 [ "$xid" = "info" -o "$xid" = "status" ] && continue
18                 $_VATTRIBUTE --xid $xid --set --flag ~persistent
19                 $_VKILL --xid $xid -s 15
20                 sleep 3
21                 $_VKILL --xid $xid -s 9
22         done
23         local alive=0
24         for xid in `ls -1 /proc/virtual 2>/dev/null`; do
25                 [ "$xid" = "info" -o "$xid" = "status" ] && continue
26                 let alive+=1
27         done
28         test $alive = 0
29 }
30
31 create_dirs()
32 {
33         $_MKDIR -p "$__RUNDIR" && $_MKDIR -p "$__VSHELPERSTATEDIR" && $_MKDIR -p `$_READLINK "$__PKGSTATEREVDIR"`
34 }
35
36 start() {
37         : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
38         if [ ! -e ${UTIL_VSERVER_VARS} ]; then
39                 eerror "Cannot find util-vserver installation"
40                 eerror "(the file '$UTIL_VSERVER_VARS' would be expected)"
41                 return 1
42         fi
43         
44         . ${UTIL_VSERVER_VARS}
45
46         ebegin "Creating directories for $PACKAGE_NAME"
47         create_dirs
48         eend $?
49
50         ebegin "Setting vshelper path to $_VSHELPER"
51         set_helper
52         eend $?
53
54         ebegin "Loading default device map"
55         $__PKGLIBDIR/bash-wrapper 'handleDeviceMap --set 0 "$__CONFDIR/.defaults/apps/vdevmap"'
56         eend $?
57
58         $__PKGLIBDIR/bash-wrapper 'hasCgroup'
59         if [ $? -eq 0 ]; then
60                 ebegin "Mounting cgroup-hierarchy"
61                 $__PKGLIBDIR/bash-wrapper '_generateCgroupOptions; test -n "$CGROUP_MNT" || exit 0; $_MKDIR -p "$CGROUP_MNT"; $_MOUNT -t cgroup -o "$CGROUP_SUBSYS" vserver "$CGROUP_MNT"'
62                 eend $?
63         fi
64 }
65
66 stop() {
67         : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
68         if [ ! -e ${UTIL_VSERVER_VARS} ]; then
69                 eerror "Cannot find util-vserver installation"
70                 eerror "(the file '$UTIL_VSERVER_VARS' would be expected)"
71                 return 1
72         fi
73         
74         . ${UTIL_VSERVER_VARS}
75
76         ebegin "Stopping all running guests"
77         $_START_VSERVERS -j 1 --all --stop
78         eend $?
79
80         ebegin "Killing all running contexts"
81         kill_contexts
82         eend $?
83
84         $__PKGLIBDIR/bash-wrapper 'hasCgroup'
85         if [ $? -eq 0 ]; then
86                 ebegin "Unmounting cgroup-hierarchy"
87                 $__PKGLIBDIR/bash-wrapper '_generateCgroupOptions; test -n "$CGROUP_MNT" || exit 0; $_UMOUNT "$CGROUP_MNT"'
88                 eend $?
89         fi
90 }
91
92 # vim:ts=4:filetype=gentoo-init-d