Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
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" |
