1f46709a9cfa396de78cd8d5a8275aa4573cd900
[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 function mount_cgroup()
37 {
38     _generateCgroupOptions
39     test -n "$CGROUP_MNT" || return 0
40     $_MKDIR -p "$CGROUP_MNT"
41     $_MOUNT -t cgroup -o "$CGROUP_SUBSYS" vserver "$CGROUP_MNT"
42 }
43
44 function umount_cgroup()
45 {
46     _generateCgroupOptions
47     test -n "$CGROUP_MNT" || return 0
48     $_UMOUNT "$CGROUP_MNT"
49 }
50
51 start() {
52         : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
53         if [ ! -e ${UTIL_VSERVER_VARS} ]; then
54                 eerror "Cannot find util-vserver installation"
55                 eerror "(the file '$UTIL_VSERVER_VARS' would be expected)"
56                 return 1
57         fi
58         
59         . ${UTIL_VSERVER_VARS}
60
61         ebegin "Creating directories for $PACKAGE_NAME"
62         create_dirs
63         eend $?
64
65         ebegin "Setting vshelper path to $_VSHELPER"
66         set_helper
67         eend $?
68
69         ebegin "Loading default device map"
70         $__PKGLIBDIR/bash-wrapper 'handleDeviceMap --set 0 "$__CONFDIR/.defaults/apps/vdevmap"'
71         eend $?
72
73         $__PKGLIBDIR/bash-wrapper 'hasCgroup'
74         if [ $? -eq 0 ]; then
75                 ebegin "Mounting cgroup-hierarchy"
76                 $__PKGLIBDIR/bash-wrapper '_generateCgroupOptions; test -n "$CGROUP_MNT" || exit 0; $_MKDIR -p "$CGROUP_MNT"; $_MOUNT -t cgroup -o "$CGROUP_SUBSYS" vserver "$CGROUP_MNT"'
77                 eend $?
78         fi
79 }
80
81 stop() {
82         : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
83         if [ ! -e ${UTIL_VSERVER_VARS} ]; then
84                 eerror "Cannot find util-vserver installation"
85                 eerror "(the file '$UTIL_VSERVER_VARS' would be expected)"
86                 return 1
87         fi
88         
89         . ${UTIL_VSERVER_VARS}
90
91         ebegin "Stopping all running guests"
92         $_START_VSERVERS -j 1 --all --stop
93         eend $?
94
95         ebegin "Killing all running contexts"
96         kill_contexts
97         eend $?
98
99         $__PKGLIBDIR/bash-wrapper 'hasCgroup'
100         if [ $? -eq 0 ]; then
101                 ebegin "Unmounting cgroup-hierarchy"
102                 $__PKGLIBDIR/bash-wrapper '_generateCgroupOptions; test -n "$CGROUP_MNT" || exit 0; $_UMOUNT "$CGROUP_MNT"'
103                 eend $?
104         fi
105 }
106
107 # vim:ts=4:filetype=gentoo-init-d