rc.d - Make sure rootimgs are empty for every vkernel
[dragonfly.git] / etc / rc.d / vkernel
blobf3e90233bfedf9be3f5a1e00a07fb5ed03509357
1 #!/bin/sh
4 # PROVIDE: vkernel
5 # REQUIRE: LOGIN NETWORKING
7 . /etc/rc.subr
9 name="vkernel"
10 rcvar=`set_rcvar`
11 start_cmd="vkernel_start"
12 stop_cmd="vkernel_stop"
14 vkernel_start()
16 echo -n 'Starting virtual kernels:'
17 for _vkernel in ${vkernel_list}
19 # Make sure the list of root images is empty
20 unset rootimgs
22 # Check if already running
23 eval pidfile="/var/run/vkernel.${_vkernel}.pid"
24 if [ -f "${pidfile}" ]; then
25 eval pid=`cat ${pidfile}`
26 if [ ! -z "${pid}" -a ! -z "`ps axwwp ${pid} | grep -wE "^[ ]*${pid}" | grep -v grep | awk '{print $1}'`" ]; then
27 echo
28 warn "Vkernel ${_vkernel} already running? (check ${pidfile})"
29 continue
33 # Configure vkernel binary
34 eval _bin=\"\${vkernel_${_vkernel}_bin}\"
35 if [ -z "${_bin}" -o ! -x "${_bin}" ]; then
36 eval _bin=\"\${vkernel_bin}\"
37 if [ -z "${_bin}" -o ! -x "${_bin}" ]; then
38 echo
39 warn "Missing or undefined binary for vkernel '${_vkernel}'. Skipping."
40 continue
43 bin=${_bin}
45 # Configure vkernel memory
46 eval _memsize=\"\$vkernel_${_vkernel}_memsize\"
47 if [ -z "${_memsize}" ]; then
48 echo
49 warn "No memsize has been defined for vkernel '${_vkernel}'. Skipping."
50 continue
51 else
52 memsize="-m ${_memsize}"
55 # Configure vkernel root image(s)
56 eval _rootimgs=\"\${vkernel_${_vkernel}_rootimg_list}\"
57 if [ -z "${_rootimgs}" ]; then
58 echo
59 warn "No root image has been defined for vkernel '${_vkernel}'."
60 else
61 for _rootimg in ${_rootimgs}
63 eval rootimgs=\"${rootimgs} -r ${_rootimg}\"
64 done
67 # Configure optional vkernel network interface(s)
68 eval _ifaces=\"\${vkernel_${_vkernel}_iface_list}\"
69 if [ -n "${_ifaces}" ]; then
70 for _iface in ${_ifaces}
72 eval ifaces=\"${ifaces} -I ${_iface}\"
73 done
76 # Configure optional console logfile
77 eval logfile=\"\${vkernel_${_vkernel}_logfile}\"
78 [ -z "${logfile}" ] && logfile="/dev/null"
80 # Configure optional flags
81 eval flags=\"\${vkernel_${_vkernel}_flags}\"
83 eval "daemon ${bin} ${memsize} ${rootimgs} ${ifaces} ${flags} -p ${pidfile} >>${logfile} 2>&1 </dev/null"
84 echo -n " ${_vkernel}"
85 done
86 echo '.'
89 vkernel_stop()
91 for _vkernel in ${vkernel_list}
93 eval pidfile="/var/run/vkernel.${_vkernel}.pid"
94 if [ -f "${pidfile}" ]; then
95 eval pid=`cat ${pidfile}`
97 if [ -z "${pid}" ]; then
98 warn "vkernel '${_vkernel}' not running?"
99 continue
101 eval kill -TERM ${pid}
103 eval _kill_timeout=\"\${vkernel_${_vkernel}_kill_timeout}\"
104 if [ -z "${_kill_timeout}" ]; then
105 eval _kill_timeout=\"\${vkernel_kill_timeout}\"
106 if [ -z "${_kill_timeout}" ]; then
107 _kill_timeout=60
111 # Check that the vkernel ended properly
112 cnt=1
113 eval temp_pid=`ps axwwp ${pid} | grep -wE "^[ ]*${pid}" | grep -v grep | awk '{print $1}'`
114 while [ ! -z "${temp_pid}" -a "${cnt}" -lt "${_kill_timeout}" ]; do
115 eval temp_pid=`ps axwwp ${pid} | grep -wE "^[ ]*${pid}" | grep -v grep | awk '{print $1}'`
116 cnt=`expr $cnt + 1`
117 sleep 1
118 done
120 if [ ! -z "${temp_pid}" ]; then
121 eval kill -KILL ${pid}
122 warn "'${_vkernel}' had to be forcefully killed."
124 done
128 load_rc_config $name
129 run_rc_command "$1"