Minor fixes, sort of preparing for removing the IPs of no-longer-existing contexts.
[util-vserver.git] / sysv / util-vserver
1 #!/bin/bash
2 #
3 # util-vserver  sets the path to vshelper and kills all guest processes
4 #
5 # chkconfig: 2345 10 90
6 # description: Sets the path to vshelper and kills all guest processes
7
8 : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
9 test -e "$UTIL_VSERVER_VARS" || {
10     echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2
11     exit 1
12 }
13 . "$UTIL_VSERVER_VARS"
14
15 LOCKFILE=util-vserver
16 . "$_LIB_VSERVER_INIT_FUNCTIONS"
17 . "$_LIB_FUNCTIONS"
18 . "$__PKGLIBDIR/vserver.functions"
19
20
21 function set_helper()
22 {
23     local f="/proc/sys/kernel/vshelper"
24     if test -e "$f"; then
25         echo "$_VSHELPER" > "$f"
26         return 0
27     else
28         return 2
29     fi
30 }
31
32 function kill_contexts()
33 {
34     local xid
35     for xid in `ls -1 /proc/virtual`; do
36         test "$xid" = "info" -o "$xid" = "status" && continue
37         $_VATTRIBUTE --xid $xid --set --flag ~persistent
38         $_VKILL --xid $xid -s 15
39         sleep 3
40         $_VKILL --xid $xid -s 9
41     done
42     local alive=0
43     for xid in `ls -1 /proc/virtual`; do
44         test "$xid" = "info" -o "$xid" = "status" && continue
45         let alive+=1
46     done
47     test $alive = 0
48 }
49
50 function create_dirs()
51 {
52     $_MKDIR -p "$__RUNDIR" && $_MKDIR -p "$__VSHELPERSTATEDIR" && $_MKDIR -p `getPhysicalDir "$__PKGSTATEREVDIR"`
53 }
54
55 function start()
56 {
57     _beginResult $"Creating required directories"
58     create_dirs
59     _endResult $?
60     _beginResult $"Setting path to vshelper"
61     set_helper
62     _endResult $?
63     local retval=$?
64     _beginResult $"Loading default device map"
65     loadDeviceMap 0 "$__CONFDIR/.defaults/apps/vdevmap"
66     _endResult $?
67     test "$retval" -ne 0 || touch "$lockfile"
68     return $retval
69 }
70
71 function stop()
72 {
73     # Stop all running, but non-default guests"
74     _beginResult $"Stopping all running guests"
75     $_START_VSERVERS -j 1 --all --stop
76     _endResult $?
77     _beginResult $"Killing all running contexts"
78     kill_contexts
79     _endResult $?
80     local retval=$?
81     $_RM -f "$lockfile"
82     return $retval
83 }
84
85 function restart()
86 {
87     stop
88     start
89 }
90
91 case "$1" in
92     start|stop|restart) $1;;
93     reload)             ;;
94     condrestart)
95         test -f $lockfile && restart || :
96         ;;
97     status)
98         test -f $lockfile && {
99             echo $"Path to vshelper has been set"
100             exit 0
101         }
102         echo $"Path to vshelper has not been set"
103         exit 1
104         ;;
105     *)
106         echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
107         exit 2
108         ;;
109 esac