comparison usr/local/etc/rc.d/bhyve @ 464:f1e00e5b2f2d origin

ADD: the new original code from bhyve-rc. Source: - https://github.com/kchoudhu/bhyve-rc - bhyve-rc-4: /usr/local/etc/rc.d/bhyve
author Franz Glasner <f.glasner@feldmann-mg.com>
date Thu, 13 Jun 2024 17:30:24 +0200
parents
children
comparison
equal deleted inserted replaced
354:a7dfa074dae1 464:f1e00e5b2f2d
1 #!/bin/sh
2
3 # PROVIDE: bhyve
4 # REQUIRE: LOGIN
5 # KEYWORD: nojail
6 #
7
8 #
9 # Add the following lines to /etc/rc.conf to enable bhyve:
10 # bhyve_enable (bool): Set to "NO" by default.
11 # Set it to "YES" to enable bhyve
12 # bhyve_profiles (str): Set to "" by default.
13 # Define your profiles here.
14 # bhyve_tapdev (str): Set to "tap0" by default.
15 # Set to the tap(4) device to use.
16 # bhyve_diskdev (str): Must be set, no default.
17 # Set to the disk device to use.
18 # bhyve_ncpu (int): Set to 1 by default.
19 # Set to the number of CPUs for the VM.
20 # bhyve_memsize (int): Set to 512 by default.
21 # Set to the number of MB of memory for the VM.
22
23 . /etc/rc.subr
24
25 name="bhyve"
26 rcvar=bhyve_enable
27
28 start_precmd="bhyve_prestart"
29 status_cmd="bhyve_status"
30 poll_cmd="bhyve_poll"
31 stop_cmd="bhyve_stop"
32 _session=$name
33 command="/usr/local/bin/tmux"
34 procname="-sh"
35
36 [ -z "$bhyve_enable" ] && bhyve_enable="NO"
37 [ -z "$bhyve_tapdev" ] && bhyve_tapdev="tap0"
38 [ -z "$bhyve_diskdev" ] && bhyve_diskdev="none"
39 [ -z "$bhyve_ncpu" ] && bhyve_ncpu="1"
40 [ -z "$bhyve_memsize" ] && bhyve_memsize="512"
41
42 load_rc_config $name
43
44 if [ -n "$2" ]; then
45 profile="$2"
46 _session="${_session}_${profile}"
47 if [ "x${bhyve_profiles}" != "x" ]; then
48 eval bhyve_enable="\${${_session}_enable:-${bhyve_enable}}"
49 eval bhyve_tapdev="\${${_session}_tapdev:-${bhyve_tapdev}}"
50 eval bhyve_diskdev="\${${_session}_diskdev:-${bhyve_diskdev}}"
51 eval bhyve_ncpu="\${${_session}_ncpu:-${bhyve_ncpu}}"
52 eval bhyve_memsize="\${${_session}_memsize:-${bhyve_memsize}}"
53 else
54 echo "$0: extra argument ignored"
55 fi
56 else
57 if [ "x${bhyve_profiles}" != "x" -a "x$1" != "x" ]; then
58 for profile in ${bhyve_profiles}; do
59 eval _enable="\${bhyve_${profile}_enable}"
60 case "x${_enable:-${bhyve_enable}}" in
61 x|x[Nn][Oo]|x[Nn][Oo][Nn][Ee])
62 continue
63 ;;
64 x[Yy][Ee][Ss])
65 ;;
66 *)
67 if test -z "$_enable"; then
68 _var=bhyve_enable
69 else
70 _var=bhyve_"${profile}"_enable
71 fi
72 echo "Bad value" \
73 "'${_enable:-${bhyve_enable}}'" \
74 "for ${_var}. " \
75 "Profile ${profile} skipped."
76 continue
77 ;;
78 esac
79 echo "===> bhyve profile: ${profile}"
80 /usr/local/etc/rc.d/bhyve $1 ${profile}
81 retcode="$?"
82 if [ "0${retcode}" -ne 0 ]; then
83 failed="${profile} (${retcode}) ${failed:-}"
84 else
85 success="${profile} ${success:-}"
86 fi
87 done
88 exit 0
89 fi
90 profile=$name
91 fi
92
93 pidfile="/var/run/${_session}.pid"
94
95
96 bhyve_prestart()
97 {
98 case ${bhyve_diskdev} in
99 [Nn][Oo][Nn][Ee] | '')
100 echo "No ${_session}_diskdev set. Quitting." 1>&2
101 return 1;
102 ;;
103 esac
104 if [ ! -c "${bhyve_diskdev}" -a ! -f "${bhyve_diskdev}" ]; then
105 echo "${bhyve_diskdev} doesn't exist or is not suitable as a diskdev" 1>&2
106 return 1;
107 fi
108 }
109
110 bhyve_status()
111 {
112 if ${command} has-session -t ${_session} 2>/dev/null; then
113 echo "${_session} is running."
114 else
115 echo "${_session} is not running."
116 return 1
117 fi
118 }
119
120 bhyve_poll()
121 {
122 echo -n "Waiting for session: ${_session}"
123 while ${command} has-session -t ${_session} 2>/dev/null; do
124 sleep 1
125 done
126 echo
127 }
128
129 bhyve_stop()
130 {
131 if ${command} has-session -t ${_session} 2>/dev/null; then
132 echo "Stopping ${_session}."
133 ${command} kill-session -t ${_session}
134 while ${command} has-session -t ${_session} 2>/dev/null; do
135 sleep 1
136 done
137 fi
138 rm -f ${pidfile}
139 }
140
141 command_args="new-session -ds ${_session} \"sh -c 'echo \\\$PPID >${pidfile}; while true; do /usr/sbin/bhyvectl --vm=${_session} --destroy; /usr/sbin/bhyveload -m ${bhyve_memsize} -d ${bhyve_diskdev} ${_session} && /usr/sbin/bhyve -c ${bhyve_ncpu} -m ${bhyve_memsize} -AI -H -P -g 0 -s 0:0,hostbridge -s 1:0,virtio-net,${bhyve_tapdev} -s 2:0,virtio-blk,${bhyve_diskdev} -s 31,lpc -l com1,stdio ${_session} || break; done'\""
142
143 run_rc_command "$1"