Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Feb 2014 14:29:18 -0800
From:      Craig Rodrigues <rodrigc@FreeBSD.org>
To:        John Baldwin <jhb@freebsd.org>
Cc:        "freebsd-virtualization@freebsd.org" <freebsd-virtualization@freebsd.org>
Subject:   Re: Detect of BHyve VM was powered off or rebooted?
Message-ID:  <CAG=rPVd15giiO_ugOAt2uBDqzePR3A3iCNpXFcXd2QzS1=oqJQ@mail.gmail.com>
In-Reply-To: <201402111411.33269.jhb@freebsd.org>
References:  <CAG=rPVcfYQ2nUaZYuc6teL2r%2BQZzxhuoV052zgf6=Dxh8MeNcA@mail.gmail.com> <CAFgRE9Fw308%2BA14c1ttXj%2BYv-CMVRZ-DSE_9DWz46sfpdWg3PQ@mail.gmail.com> <201402111411.33269.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Feb 11, 2014 at 11:11 AM, John Baldwin <jhb@freebsd.org> wrote:

> On Sunday, February 09, 2014 7:03:41 pm Neel Natu wrote:
> > Hi Craig,
> >
> > On Sun, Feb 9, 2014 at 1:11 PM, Craig Rodrigues <rodrigc@freebsd.org>
> wrote:
> > > Hi,
> > >
> > > I posted some rc.d scripts that I am using to boot a BHyve VM
> > > and send the output to a serial console using the /dev/nmdm
> > > driver:
> > >
> > > http://lists.freebsd.org/pipermail/freebsd-virtualization/2014-
> January/002040.html
> > >
> > > It works quite well.  There is some things I would like to improve,
> > > and would like some advice on the best way to do it.
> > >
> > > (1)  If the VM was destroyed with bhyvectl --destroy --vm ${VM_NAME},
> > >       then I do not want to automatically restart the VM in the script.
> > >       User should manually:  service bhyvevm start
> > >
> > > (2)  If the VM was powered down, via shutdown -p, or halt -p,
> > >        then in my script I do not want to restart the VM in the script.
> > >        User should manually:  service bhyvevm start
> > >
> > > (3)   If the VM was rebooted via "reboot" or "shutdown -r",
> > >        then I *do* want the script to restart the VM.
> > >
> > > I think if I change my start_vm.sh script to do something like:
> > >
> > >
> > >
> > > (
> > >  while [ -e /dev/vmm/${VM} ]; do
> > >     /usr/sbin/bhyve -c 16 -m 8G -A -H -P -g 0 -s 0:0,hostbridge -s
> 1:0,lpc
> > > -s 2:0,virtio-net,${TAP} -s 3:0,virtio-blk,${IMG} -l com1,${CONS_A}
> ${VM}"
> > >  done
> > >
> > > )  &
> > >
> > >
> > > then this might cover cases (1) and (3), but what will cover
> > > case (2)?
> >
> > The exit code of the bhyve process will be 0 if it exited because the
> > guest rebooted and will be non-zero if the guest did an acpi poweroff.
> > You can use that to distinguish between cases (2) and (3).
> >
> > Having said that there are error conditions for which bhyve exits with
> > a non-zero exit code. So, we'll need to explicitly define an exit code
> > to distinguish between an acpi poweroff and these error conditions.
>
> OTOH, in all the cases when bhyve exits with a non-zero exit code, you
> will want to exit the loop which would treat it the same as shutdown -p.  I
> think you can just do this:
>
>         while [ -e /dev/vmm/${VM} ]; do
>                 if ! bhyve ...; then
>                         break
>                 fi
>         done
>



One question, if "bhyve" exits, do I have to call bhyveload again before
calling bhyve?

The /usr/share/examples/bhyve/vmrun.sh has a loop which does:

        while [ 1 ] ; do

                  ...
                  bhyvectl --destroy
                  bhyveload
                  bhyve

                   ...
        done

--
Craig



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAG=rPVd15giiO_ugOAt2uBDqzePR3A3iCNpXFcXd2QzS1=oqJQ>