[libvirt] [PATCHv2 0/2] Add non-FreeBSD guest support to Bhyve driver.

Drvbhyve hardcodes bhyveload(8) as the host bootloader for guests. bhyveload(8) loader only supports FreeBSD guests. This patch adds <bootloader> and <bootloader_args> handling to bhyve_command, so libvirt can boot non-FreeBSD guests in Bhyve. See patch logs for further details. Thanks, Conrad Changelog: v2: - Dropped hvm -> xen change per Peter's feedback. Conrad Meyer (2): bhyve: Support /domain/bootloader configuration for non-FreeBSD guests. Generated PO files for 'bhyve: Support /domain/bootloader' docs/drvbhyve.html.in | 28 ++++++++++-- docs/formatdomain.html.in | 4 +- po/af.po | 4 ++ po/am.po | 4 ++ po/ar.po | 4 ++ po/as.po | 4 ++ po/be.po | 4 ++ po/bg.po | 4 ++ po/bn.po | 4 ++ po/bn_IN.po | 4 ++ po/bo.po | 4 ++ po/bs.po | 4 ++ po/ca.po | 4 ++ po/cs.po | 4 ++ po/cy.po | 4 ++ po/da.po | 4 ++ po/de.po | 4 ++ po/el.po | 4 ++ po/en_GB.po | 4 ++ po/es.po | 4 ++ po/et.po | 4 ++ po/eu_ES.po | 4 ++ po/fa.po | 4 ++ po/fi.po | 4 ++ po/fr.po | 4 ++ po/gl.po | 4 ++ po/gu.po | 4 ++ po/he.po | 4 ++ po/hi.po | 4 ++ po/hr.po | 4 ++ po/hu.po | 4 ++ po/hy.po | 4 ++ po/id.po | 4 ++ po/is.po | 4 ++ po/it.po | 4 ++ po/ja.po | 4 ++ po/ka.po | 4 ++ po/kn.po | 4 ++ po/ko.po | 4 ++ po/ku.po | 4 ++ po/libvirt.pot | 4 ++ po/lo.po | 4 ++ po/lt.po | 4 ++ po/lv.po | 4 ++ po/mk.po | 4 ++ po/ml.po | 4 ++ po/mr.po | 4 ++ po/ms.po | 4 ++ po/my.po | 4 ++ po/nb.po | 4 ++ po/nl.po | 4 ++ po/nn.po | 4 ++ po/nso.po | 4 ++ po/or.po | 4 ++ po/pa.po | 4 ++ po/pl.po | 4 ++ po/pt.po | 4 ++ po/pt_BR.po | 4 ++ po/ro.po | 4 ++ po/ru.po | 4 ++ po/si.po | 4 ++ po/sk.po | 4 ++ po/sl.po | 4 ++ po/sq.po | 4 ++ po/sr.po | 4 ++ po/sr@latin.po | 4 ++ po/sv.po | 4 ++ po/ta.po | 4 ++ po/te.po | 4 ++ po/th.po | 4 ++ po/tr.po | 4 ++ po/uk.po | 4 ++ po/ur.po | 4 ++ po/vi.po | 4 ++ po/vi_VN.po | 4 ++ po/zh_CN.po | 4 ++ po/zh_TW.po | 4 ++ po/zu.po | 4 ++ src/bhyve/bhyve_command.c | 107 +++++++++++++++++++++++++++++++++++++++++----- 79 files changed, 428 insertions(+), 15 deletions(-) -- 1.9.3

We still default to bhyveloader(1) if no explicit bootloader configuration is supplied in the domain. If the /domain/bootloader looks like grub-bhyve and the user doesn't supply /domain/bootloader_args, we make an intelligent guess and try chainloading the first partition on the disk. Caveats: - We can't install from CD without explicit bootloader_args. - We leave a device.map file lying around in /tmp. I don't see a good way not to do so without reworking the API somewhat. Sponsored by: EMC / Isilon storage division Signed-off-by: Conrad Meyer <conrad.meyer@isilon.com> --- docs/drvbhyve.html.in | 28 ++++++++++-- docs/formatdomain.html.in | 4 +- po/libvirt.pot | 4 ++ src/bhyve/bhyve_command.c | 107 +++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 128 insertions(+), 15 deletions(-) diff --git a/docs/drvbhyve.html.in b/docs/drvbhyve.html.in index 39afdf5..6e85800 100644 --- a/docs/drvbhyve.html.in +++ b/docs/drvbhyve.html.in @@ -37,8 +37,7 @@ bhyve+ssh://root@example.com/system (remote access, SSH tunnelled) <h3>Example config</h3> <p> The bhyve driver in libvirt is in its early stage and under active development. So it supports -only limited number of features bhyve provides. All the supported features could be found -in this sample domain XML. +only limited number of features bhyve provides. </p> <p> @@ -50,8 +49,8 @@ up to 31 PCI devices. <pre> <domain type='bhyve'> - <name>bhyve</name> - <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid> + <name>bhyve</name> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid> <memory>219136</memory> <currentMemory>219136</currentMemory> <vcpu>1</vcpu> @@ -157,5 +156,26 @@ An example of domain XML device entry for that will look like:</p> <p>Please refer to the <a href="storage.html">Storage documentation</a> for more details on storage management.</p> +<h3><a name="grubbhyve">Using grub2-bhyve or Alternative Bootloaders</a></h3> + +<p>It's possible to boot non-FreeBSD guests by specifying an explicit +bootloader, e.g. <code>grub-bhyve(1)</code>. Arguments to the bootloader may be +specified as well. If no arguments are given and bootloader is +<code>grub-bhyve</code>, libvirt will try and boot from the first partition of +the disk image.</p> + +<pre> + ... + <bootloader>/usr/local/sbin/grub-bhyve</bootloader> + <bootloader_args>...</bootloader_args> + ... +</pre> + +<p>(Of course, to install from a CD a user will have to supply explicit +arguments to <code>grub-bhyve</code>.)</p> + +<p>Caveat: <code>bootloader_args</code> does not support any quoting. +Filenames, etc, must not have spaces or they will be tokenized incorrectly.</p> + </body> </html> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 0099ce7..b7b6c46 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -217,7 +217,9 @@ a BIOS, and instead the host is responsible to kicking off the operating system boot. This may use a pseudo-bootloader in the host to provide an interface to choose a kernel for the guest. - An example is <code>pygrub</code> with Xen. + An example is <code>pygrub</code> with Xen. The Bhyve hypervisor + also uses a host bootloader, either <code>bhyveload</code> or + <code>grub-bhyve</code>. </p> <pre> diff --git a/po/libvirt.pot b/po/libvirt.pot index 0b44ad7..d8c9a4d 100644 --- a/po/libvirt.pot +++ b/po/libvirt.pot @@ -851,6 +851,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index bea4a59..99956ae 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -300,6 +300,7 @@ virBhyveProcessBuildLoadCmd(virConnectPtr conn, { virCommandPtr cmd; virDomainDiskDefPtr disk; + bool bhyveload, grub_bhyve; if (def->ndisks < 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -326,19 +327,105 @@ virBhyveProcessBuildLoadCmd(virConnectPtr conn, return NULL; } - cmd = virCommandNew(BHYVELOAD); + if (def->os.bootloader == NULL) { + bhyveload = true; + grub_bhyve = false; + cmd = virCommandNew(BHYVELOAD); + } else { + bhyveload = false; + if (strstr(def->os.bootloader, "grub-bhyve") == 0) + grub_bhyve = true; + cmd = virCommandNew(def->os.bootloader); + } - /* Memory */ - virCommandAddArg(cmd, "-m"); - virCommandAddArgFormat(cmd, "%llu", - VIR_DIV_UP(def->mem.max_balloon, 1024)); + if (bhyveload && def->os.bootloaderArgs == NULL) { + VIR_DEBUG("%s: bhyveload with default arguments", __func__); + + /* Memory (MB) */ + virCommandAddArg(cmd, "-m"); + virCommandAddArgFormat(cmd, "%llu", + VIR_DIV_UP(def->mem.max_balloon, 1024)); + + /* Image path */ + virCommandAddArg(cmd, "-d"); + virCommandAddArg(cmd, virDomainDiskGetSource(disk)); + + /* VM name */ + virCommandAddArg(cmd, def->name); + } else if (grub_bhyve && def->os.bootloaderArgs == NULL) { + char tmpmapfile[128] = "/tmp/grub-bhyve-device.map_XXXXXX"; + FILE *f; + int fd; + + VIR_DEBUG("%s: grub-bhyve with default arguments", __func__); + + /* + * XXX Default grub-bhyve has some BIG caveats, but MAY work for some + * typical configurations. In particular: + * + * - Can't create a new VM this way (no CD, no boot from CD) + * - Assumes a GRUB install on hd0,msdos1 + */ - /* Image path */ - virCommandAddArg(cmd, "-d"); - virCommandAddArg(cmd, virDomainDiskGetSource(disk)); + /* XXX cleanup this file. */ + fd = mkstemp(tmpmapfile); + if (fd < 0) { + virReportError(VIR_ERR_OPEN_FAILED, tmpmapfile); + goto error; + } + + f = VIR_FDOPEN(fd, "wb+"); + if (f == NULL) { + VIR_FORCE_CLOSE(fd); + virReportError(VIR_ERR_OPEN_FAILED, tmpmapfile); + goto error; + } + + /* Grub device.map */ + fprintf(f, "(hd0) %s\n", virDomainDiskGetSource(disk)); + /* XXX CDs would look like: "(cd0) /path/to/CD" */ + + if (VIR_FCLOSE(f) < 0) { + virReportSystemError(errno, "%s", _("failed to close file")); + goto error; + } - /* VM name */ - virCommandAddArg(cmd, def->name); + + virCommandAddArg(cmd, "--device-map"); + virCommandAddArg(cmd, tmpmapfile); + + /* Memory in MB */ + virCommandAddArg(cmd, "--memory"); + virCommandAddArgFormat(cmd, "%llu", + VIR_DIV_UP(def->mem.max_balloon, 1024)); + + /* To boot from CD, "cd0" here. */ + virCommandAddArg(cmd, "--root"); + virCommandAddArg(cmd, "hd0,msdos1"); + + /* VM name */ + virCommandAddArg(cmd, def->name); + } else if (def->os.bootloaderArgs == NULL) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Custom loader requires explicit %s configuration"), + "bootloader_args"); + goto error; + } else { + char **blargs, **arg; + + VIR_DEBUG("%s: custom loader '%s' with arguments", __func__, + def->os.bootloader); + + /* XXX: Handle quoted? */ + blargs = virStringSplit(def->os.bootloaderArgs, " ", 0); + for (arg = blargs; *arg; arg++) + virCommandAddArg(cmd, *arg); + virStringFreeList(blargs); + } return cmd; + +error: + virCommandFree(cmd); + return NULL; } -- 1.9.3

Conrad Meyer wrote:
We still default to bhyveloader(1) if no explicit bootloader configuration is supplied in the domain.
If the /domain/bootloader looks like grub-bhyve and the user doesn't supply /domain/bootloader_args, we make an intelligent guess and try chainloading the first partition on the disk.
Caveats: - We can't install from CD without explicit bootloader_args. - We leave a device.map file lying around in /tmp. I don't see a good way not to do so without reworking the API somewhat.
Sponsored by: EMC / Isilon storage division
Hi Conrad. Thanks for the patch. As for the /tmp, probably storing it somewhere in BHYVE_STATE_DIR would be more clean. However, I'm concerned about libvirt dealing with the grub-bhyve specifics as it involves some assumptions about its behaviour ahd has limitations, like the one you pointed with installing from CD. My idea was to add the following behaviour: * bootloader specified and bootloader_args specified -- use that as is * bootloader not specified, bootloader_args specified -- call bhyveload $bootloader_args $default_bhyveloader_args * bootloader and bootloader_args not set -- use defaults (current behaviour) * bootloader specified, bootloader_args missing -- fail here Actually, I've implemented that already, but didn't send because it needs some more testing. The reason of my concern about adding a special handling of grub-bhyve case that, as I've mentioned, we have to make assumptions and there are also caveats you mentioned. Probably it'd worth to wait for bhyve to provide single-step VM boot, i.e. UEFI support, that should appear soon anyway. There are some comments inline.
Signed-off-by: Conrad Meyer <conrad.meyer@isilon.com> --- docs/drvbhyve.html.in | 28 ++++++++++-- docs/formatdomain.html.in | 4 +- po/libvirt.pot | 4 ++ src/bhyve/bhyve_command.c | 107 +++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 128 insertions(+), 15 deletions(-)
diff --git a/docs/drvbhyve.html.in b/docs/drvbhyve.html.in index 39afdf5..6e85800 100644 --- a/docs/drvbhyve.html.in +++ b/docs/drvbhyve.html.in @@ -37,8 +37,7 @@ bhyve+ssh://root@example.com/system (remote access, SSH tunnelled) <h3>Example config</h3> <p> The bhyve driver in libvirt is in its early stage and under active development. So it supports -only limited number of features bhyve provides. All the supported features could be found -in this sample domain XML. +only limited number of features bhyve provides. </p>
<p> @@ -50,8 +49,8 @@ up to 31 PCI devices.
<pre> <domain type='bhyve'> - <name>bhyve</name> - <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid> + <name>bhyve</name> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid> <memory>219136</memory> <currentMemory>219136</currentMemory> <vcpu>1</vcpu> @@ -157,5 +156,26 @@ An example of domain XML device entry for that will look like:</p> <p>Please refer to the <a href="storage.html">Storage documentation</a> for more details on storage management.</p>
+<h3><a name="grubbhyve">Using grub2-bhyve or Alternative Bootloaders</a></h3> + +<p>It's possible to boot non-FreeBSD guests by specifying an explicit +bootloader, e.g. <code>grub-bhyve(1)</code>. Arguments to the bootloader may be +specified as well. If no arguments are given and bootloader is +<code>grub-bhyve</code>, libvirt will try and boot from the first partition of +the disk image.</p> + +<pre> + ... + <bootloader>/usr/local/sbin/grub-bhyve</bootloader> + <bootloader_args>...</bootloader_args> + ... +</pre> + +<p>(Of course, to install from a CD a user will have to supply explicit +arguments to <code>grub-bhyve</code>.)</p> + +<p>Caveat: <code>bootloader_args</code> does not support any quoting. +Filenames, etc, must not have spaces or they will be tokenized incorrectly.</p> + </body> </html> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 0099ce7..b7b6c46 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -217,7 +217,9 @@ a BIOS, and instead the host is responsible to kicking off the operating system boot. This may use a pseudo-bootloader in the host to provide an interface to choose a kernel for the guest. - An example is <code>pygrub</code> with Xen. + An example is <code>pygrub</code> with Xen. The Bhyve hypervisor + also uses a host bootloader, either <code>bhyveload</code> or + <code>grub-bhyve</code>. </p>
<pre> diff --git a/po/libvirt.pot b/po/libvirt.pot index 0b44ad7..d8c9a4d 100644 --- a/po/libvirt.pot +++ b/po/libvirt.pot @@ -851,6 +851,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr ""
+#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index bea4a59..99956ae 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -300,6 +300,7 @@ virBhyveProcessBuildLoadCmd(virConnectPtr conn, { virCommandPtr cmd; virDomainDiskDefPtr disk; + bool bhyveload, grub_bhyve;
if (def->ndisks < 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -326,19 +327,105 @@ virBhyveProcessBuildLoadCmd(virConnectPtr conn, return NULL; }
- cmd = virCommandNew(BHYVELOAD); + if (def->os.bootloader == NULL) { + bhyveload = true; + grub_bhyve = false; + cmd = virCommandNew(BHYVELOAD); + } else { + bhyveload = false; + if (strstr(def->os.bootloader, "grub-bhyve") == 0) + grub_bhyve = true; + cmd = virCommandNew(def->os.bootloader); + }
- /* Memory */ - virCommandAddArg(cmd, "-m"); - virCommandAddArgFormat(cmd, "%llu", - VIR_DIV_UP(def->mem.max_balloon, 1024)); + if (bhyveload && def->os.bootloaderArgs == NULL) { + VIR_DEBUG("%s: bhyveload with default arguments", __func__); + + /* Memory (MB) */ + virCommandAddArg(cmd, "-m"); + virCommandAddArgFormat(cmd, "%llu", + VIR_DIV_UP(def->mem.max_balloon, 1024)); + + /* Image path */ + virCommandAddArg(cmd, "-d"); + virCommandAddArg(cmd, virDomainDiskGetSource(disk)); + + /* VM name */ + virCommandAddArg(cmd, def->name); + } else if (grub_bhyve && def->os.bootloaderArgs == NULL) { + char tmpmapfile[128] = "/tmp/grub-bhyve-device.map_XXXXXX"; + FILE *f; + int fd; + + VIR_DEBUG("%s: grub-bhyve with default arguments", __func__); + + /* + * XXX Default grub-bhyve has some BIG caveats, but MAY work for some + * typical configurations. In particular: + * + * - Can't create a new VM this way (no CD, no boot from CD) + * - Assumes a GRUB install on hd0,msdos1 + */
- /* Image path */ - virCommandAddArg(cmd, "-d"); - virCommandAddArg(cmd, virDomainDiskGetSource(disk)); + /* XXX cleanup this file. */ + fd = mkstemp(tmpmapfile);
This yields an error in 'syntax-check'. Running 'make syntax-check' allows to avoid some of the general code and formatting issues.
+ if (fd < 0) { + virReportError(VIR_ERR_OPEN_FAILED, tmpmapfile); + goto error; + } + + f = VIR_FDOPEN(fd, "wb+"); + if (f == NULL) { + VIR_FORCE_CLOSE(fd); + virReportError(VIR_ERR_OPEN_FAILED, tmpmapfile); + goto error; + } + + /* Grub device.map */ + fprintf(f, "(hd0) %s\n", virDomainDiskGetSource(disk)); + /* XXX CDs would look like: "(cd0) /path/to/CD" */ + + if (VIR_FCLOSE(f) < 0) { + virReportSystemError(errno, "%s", _("failed to close file")); + goto error; + }
- /* VM name */ - virCommandAddArg(cmd, def->name); + + virCommandAddArg(cmd, "--device-map"); + virCommandAddArg(cmd, tmpmapfile); + + /* Memory in MB */ + virCommandAddArg(cmd, "--memory"); + virCommandAddArgFormat(cmd, "%llu", + VIR_DIV_UP(def->mem.max_balloon, 1024)); + + /* To boot from CD, "cd0" here. */ + virCommandAddArg(cmd, "--root"); + virCommandAddArg(cmd, "hd0,msdos1"); + + /* VM name */ + virCommandAddArg(cmd, def->name); + } else if (def->os.bootloaderArgs == NULL) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Custom loader requires explicit %s configuration"), + "bootloader_args"); + goto error; + } else { + char **blargs, **arg; + + VIR_DEBUG("%s: custom loader '%s' with arguments", __func__, + def->os.bootloader); + + /* XXX: Handle quoted? */ + blargs = virStringSplit(def->os.bootloaderArgs, " ", 0); + for (arg = blargs; *arg; arg++) + virCommandAddArg(cmd, *arg); + virStringFreeList(blargs); + }
return cmd; + +error: + virCommandFree(cmd); + return NULL; } -- 1.9.3
_______________________________________________ freebsd-virtualization@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-virtualization To unsubscribe, send any mail to "freebsd-virtualization-unsubscribe@freebsd.org"
Thanks, Roman Bogorodskiy

On Fri, Oct 24, 2014 at 12:58 AM, Roman Bogorodskiy <bogorodskiy@gmail.com> wrote:
Conrad Meyer wrote: Hi Conrad.
Thanks for the patch. As for the /tmp, probably storing it somewhere in BHYVE_STATE_DIR would be more clean.
Sure.
However, I'm concerned about libvirt dealing with the grub-bhyve specifics as it involves some assumptions about its behaviour ahd has limitations, like the one you pointed with installing from CD.
Sure. However, the user can always override the assumptions. And I think the CD case is actually quite easy to fix, if that's a blocking issue.
My idea was to add the following behaviour:
* bootloader specified and bootloader_args specified -- use that as is * bootloader not specified, bootloader_args specified -- call bhyveload $bootloader_args $default_bhyveloader_args * bootloader and bootloader_args not set -- use defaults (current behaviour) * bootloader specified, bootloader_args missing -- fail here
Ok. I think the grub-bhyve stuff is just a special case of the 4th bullet here; but otherwise my patch matches up with this behavior.
Actually, I've implemented that already, but didn't send because it needs some more testing.
Ok. I am happy to guinea-pig bhyve improvements for libvirt, if you need it.
The reason of my concern about adding a special handling of grub-bhyve case that, as I've mentioned, we have to make assumptions and there are also caveats you mentioned. Probably it'd worth to wait for bhyve to provide single-step VM boot, i.e. UEFI support, that should appear soon anyway.
Any idea how soon? Months? A year? 5 years? I'm not comfortable postponing improvements indefinitely for vaporware. In the wonderful bhyve-UEFI future, we can ignore/warn about <bootloader>.
There are some comments inline.
Thanks!
- /* Image path */ - virCommandAddArg(cmd, "-d"); - virCommandAddArg(cmd, virDomainDiskGetSource(disk)); + /* XXX cleanup this file. */ + fd = mkstemp(tmpmapfile);
This yields an error in 'syntax-check'. Running 'make syntax-check' allows to avoid some of the general code and formatting issues.
I did run syntax-check, but did not see any error around there. syntax-check has lots of console output; does it log somewhere else too? Thanks, Conrad

Conrad Rad wrote:
On Fri, Oct 24, 2014 at 12:58 AM, Roman Bogorodskiy <bogorodskiy@gmail.com> wrote:
Conrad Meyer wrote: Hi Conrad.
Thanks for the patch. As for the /tmp, probably storing it somewhere in BHYVE_STATE_DIR would be more clean.
Sure.
However, I'm concerned about libvirt dealing with the grub-bhyve specifics as it involves some assumptions about its behaviour ahd has limitations, like the one you pointed with installing from CD.
Sure. However, the user can always override the assumptions. And I think the CD case is actually quite easy to fix, if that's a blocking issue.
My idea was to add the following behaviour:
* bootloader specified and bootloader_args specified -- use that as is * bootloader not specified, bootloader_args specified -- call bhyveload $bootloader_args $default_bhyveloader_args * bootloader and bootloader_args not set -- use defaults (current behaviour) * bootloader specified, bootloader_args missing -- fail here
Ok. I think the grub-bhyve stuff is just a special case of the 4th bullet here; but otherwise my patch matches up with this behavior.
Actually, I've implemented that already, but didn't send because it needs some more testing.
Ok. I am happy to guinea-pig bhyve improvements for libvirt, if you need it.
The reason of my concern about adding a special handling of grub-bhyve case that, as I've mentioned, we have to make assumptions and there are also caveats you mentioned. Probably it'd worth to wait for bhyve to provide single-step VM boot, i.e. UEFI support, that should appear soon anyway.
Any idea how soon? Months? A year? 5 years? I'm not comfortable postponing improvements indefinitely for vaporware. In the wonderful bhyve-UEFI future, we can ignore/warn about <bootloader>.
There are some comments inline.
Thanks!
- /* Image path */ - virCommandAddArg(cmd, "-d"); - virCommandAddArg(cmd, virDomainDiskGetSource(disk)); + /* XXX cleanup this file. */ + fd = mkstemp(tmpmapfile);
This yields an error in 'syntax-check'. Running 'make syntax-check' allows to avoid some of the general code and formatting issues.
I did run syntax-check, but did not see any error around there. syntax-check has lots of console output; does it log somewhere else too?
Hm, that's strange. I didn't check if it logs stuff somewhere but console as it stops on errors anyway. With your patch applied, I have the following: ... prohibit_mixed_case_abbreviations 0.00 prohibit_mixed_case_abbreviations prohibit_mkstemp src/bhyve/bhyve_command.c:371: fd = mkstemp(tmpmapfile); maint.mk: use mkostemp with O_CLOEXEC instead of mkstemp gmake: *** [sc_prohibit_mkstemp] Error 1 (18:08) novel@kloomba:~/code/libvirt[bload] %> PS I've dropped freebsd-virtualization@ from CC, I guess it's moving out of scope of that maillist. Roman Bogorodskiy

On Fri, Oct 24, 2014 at 6:11 AM, Conrad Rad <cse.cem@gmail.com> wrote:
Any idea how soon? Months? A year? 5 years? I'm not comfortable postponing improvements indefinitely for vaporware. In the wonderful bhyve-UEFI future, we can ignore/warn about <bootloader>.
Hi, I have to agree with Conrad here. I hope that any perceived future direction of bhyve is not going to be used as an excuse to block some of the libvirt patches that Conrad is submitting. The stuff that Conrad is working on overlaps some of the shortcomings in libvirt/bhyve that I mentioned here: https://lists.freebsd.org/pipermail/freebsd-virtualization/2014-October/0028... Fixing these issues in libvirt will make libvirt + bhyve more usable today. When the bhyve-UEFI stuff comes out in future, that will be even better, but there are a few people (me and others) who are trying to put together FreeBSD + bhyve systems today that are viable alternatives to Linux + KVM for managing many VM's. bhyve is rapidly improving, but the lack of libvirt support means that a huge ecosystem of software built for libvirt + KVM cannot be used for bhyve. I hope we can start improving libvirt today to eliminate this problem. -- Craig

On Fri, Oct 24, 2014 at 03:28:33PM -0700, Craig Rodrigues wrote:
On Fri, Oct 24, 2014 at 6:11 AM, Conrad Rad <cse.cem@gmail.com> wrote:
Any idea how soon? Months? A year? 5 years? I'm not comfortable postponing improvements indefinitely for vaporware. In the wonderful bhyve-UEFI future, we can ignore/warn about <bootloader>.
Hi,
I have to agree with Conrad here. I hope that any perceived future direction of bhyve is not going to be used as an excuse to block some of the libvirt patches that Conrad is submitting. The stuff that Conrad is working on overlaps some of the shortcomings in libvirt/bhyve that I mentioned here: https://lists.freebsd.org/pipermail/freebsd-virtualization/2014-October/0028...
Fixing these issues in libvirt will make libvirt + bhyve more usable today. When the bhyve-UEFI stuff comes out in future, that will be even better,
Libvirt has a goal that we never break application compatibility, which includes the way the XML is configured for guests. So when reviewing patches like this series it is important to try to have an awareness of what further patches may be coming down the pipe in the future, so we can avoid painting ourselves into a corner. So this question of Roman's isn't really about blocking patches for future vapourware, but rather about making sure that decisions we make today don't cause us undue problems with UEFI does arrive at some point later. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

Sponsored by: EMC / Isilon storage division Signed-off-by: Conrad Meyer <conrad.meyer@isilon.com> --- po/af.po | 4 ++++ po/am.po | 4 ++++ po/ar.po | 4 ++++ po/as.po | 4 ++++ po/be.po | 4 ++++ po/bg.po | 4 ++++ po/bn.po | 4 ++++ po/bn_IN.po | 4 ++++ po/bo.po | 4 ++++ po/bs.po | 4 ++++ po/ca.po | 4 ++++ po/cs.po | 4 ++++ po/cy.po | 4 ++++ po/da.po | 4 ++++ po/de.po | 4 ++++ po/el.po | 4 ++++ po/en_GB.po | 4 ++++ po/es.po | 4 ++++ po/et.po | 4 ++++ po/eu_ES.po | 4 ++++ po/fa.po | 4 ++++ po/fi.po | 4 ++++ po/fr.po | 4 ++++ po/gl.po | 4 ++++ po/gu.po | 4 ++++ po/he.po | 4 ++++ po/hi.po | 4 ++++ po/hr.po | 4 ++++ po/hu.po | 4 ++++ po/hy.po | 4 ++++ po/id.po | 4 ++++ po/is.po | 4 ++++ po/it.po | 4 ++++ po/ja.po | 4 ++++ po/ka.po | 4 ++++ po/kn.po | 4 ++++ po/ko.po | 4 ++++ po/ku.po | 4 ++++ po/lo.po | 4 ++++ po/lt.po | 4 ++++ po/lv.po | 4 ++++ po/mk.po | 4 ++++ po/ml.po | 4 ++++ po/mr.po | 4 ++++ po/ms.po | 4 ++++ po/my.po | 4 ++++ po/nb.po | 4 ++++ po/nl.po | 4 ++++ po/nn.po | 4 ++++ po/nso.po | 4 ++++ po/or.po | 4 ++++ po/pa.po | 4 ++++ po/pl.po | 4 ++++ po/pt.po | 4 ++++ po/pt_BR.po | 4 ++++ po/ro.po | 4 ++++ po/ru.po | 4 ++++ po/si.po | 4 ++++ po/sk.po | 4 ++++ po/sl.po | 4 ++++ po/sq.po | 4 ++++ po/sr.po | 4 ++++ po/sr@latin.po | 4 ++++ po/sv.po | 4 ++++ po/ta.po | 4 ++++ po/te.po | 4 ++++ po/th.po | 4 ++++ po/tr.po | 4 ++++ po/uk.po | 4 ++++ po/ur.po | 4 ++++ po/vi.po | 4 ++++ po/vi_VN.po | 4 ++++ po/zh_CN.po | 4 ++++ po/zh_TW.po | 4 ++++ po/zu.po | 4 ++++ 75 files changed, 300 insertions(+) diff --git a/po/af.po b/po/af.po index 0e1374d..6e54827 100644 --- a/po/af.po +++ b/po/af.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/am.po b/po/am.po index 8230ec8..c664b6b 100644 --- a/po/am.po +++ b/po/am.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ar.po b/po/ar.po index fed8f1f..3745c56 100644 --- a/po/ar.po +++ b/po/ar.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/as.po b/po/as.po index b2bba9a..1e8ecad 100644 --- a/po/as.po +++ b/po/as.po @@ -915,6 +915,10 @@ msgstr "উৎস পথৰ অবিহনে cdrom ডিভাইচ সম msgid "domain should have at least one disk defined" msgstr "ডমেইনৰ অন্তত এটা ডিস্ক বিৱৰিত থাকিব লাগিব" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "PCI বাচ 0 স্লট 1 ইমপ্লিচিট LPC PCI-ISA ব্ৰিজৰ বাবে সংৰক্ষিত" diff --git a/po/be.po b/po/be.po index 1f4b856..3b5ff79 100644 --- a/po/be.po +++ b/po/be.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/bg.po b/po/bg.po index 05d9e5d..0d75cb5 100644 --- a/po/bg.po +++ b/po/bg.po @@ -855,6 +855,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/bn.po b/po/bn.po index ab15fc4..3c8cf38 100644 --- a/po/bn.po +++ b/po/bn.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/bn_IN.po b/po/bn_IN.po index 88dd968..ac3af06 100644 --- a/po/bn_IN.po +++ b/po/bn_IN.po @@ -876,6 +876,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/bo.po b/po/bo.po index cfbee90..55c561b 100644 --- a/po/bo.po +++ b/po/bo.po @@ -851,6 +851,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/bs.po b/po/bs.po index 80c8ac2..90381b3 100644 --- a/po/bs.po +++ b/po/bs.po @@ -855,6 +855,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ca.po b/po/ca.po index 2ccbfdc..f14e08a 100644 --- a/po/ca.po +++ b/po/ca.po @@ -858,6 +858,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/cs.po b/po/cs.po index 35a9ba6..dd44065 100644 --- a/po/cs.po +++ b/po/cs.po @@ -862,6 +862,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/cy.po b/po/cy.po index 51e11b8..466965b 100644 --- a/po/cy.po +++ b/po/cy.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/da.po b/po/da.po index 04d39ad..a820ecb 100644 --- a/po/da.po +++ b/po/da.po @@ -856,6 +856,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/de.po b/po/de.po index 64cf6fe..f15b826 100644 --- a/po/de.po +++ b/po/de.po @@ -911,6 +911,10 @@ msgstr "Benannte Einheiten-Aliasnamen werden nicht unterstützt" msgid "domain should have at least one disk defined" msgstr "Domain XML muss zumindest ein <disk> Element enthalten." +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/el.po b/po/el.po index c62c443..fdd00d4 100644 --- a/po/el.po +++ b/po/el.po @@ -869,6 +869,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/en_GB.po b/po/en_GB.po index 833044a..55beffd 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -916,6 +916,10 @@ msgstr "Named device aliases are not supported" msgid "domain should have at least one disk defined" msgstr "Domain XML must contain at least one <disk> element." +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/es.po b/po/es.po index 8a54e10..7946ae0 100644 --- a/po/es.po +++ b/po/es.po @@ -900,6 +900,10 @@ msgstr "Los dispositivos llamados alias no tienen soporte" msgid "domain should have at least one disk defined" msgstr "XML de dominio debe contener al menos un elemento <disk>." +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/et.po b/po/et.po index bd5d59f..b74b89d 100644 --- a/po/et.po +++ b/po/et.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/eu_ES.po b/po/eu_ES.po index 3939c44..3e0f2f8 100644 --- a/po/eu_ES.po +++ b/po/eu_ES.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/fa.po b/po/fa.po index dba48be..00782ce 100644 --- a/po/fa.po +++ b/po/fa.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/fi.po b/po/fi.po index 2e487f7..c2eb1cd 100644 --- a/po/fi.po +++ b/po/fi.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/fr.po b/po/fr.po index 4e46d32..05ed448 100644 --- a/po/fr.po +++ b/po/fr.po @@ -899,6 +899,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/gl.po b/po/gl.po index 7e089a0..ee0c2a8 100644 --- a/po/gl.po +++ b/po/gl.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/gu.po b/po/gu.po index fea7041..d050c35 100644 --- a/po/gu.po +++ b/po/gu.po @@ -913,6 +913,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/he.po b/po/he.po index e236131..786699d 100644 --- a/po/he.po +++ b/po/he.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/hi.po b/po/hi.po index d918984..b3dc6d8 100644 --- a/po/hi.po +++ b/po/hi.po @@ -890,6 +890,10 @@ msgstr "नामित युक्ति एलियास समर्थि msgid "domain should have at least one disk defined" msgstr "डोमेन XML कम से कम एक <disk> तत्व शामिल करना अनिवार्य है." +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/hr.po b/po/hr.po index 3dda86b..d532f83 100644 --- a/po/hr.po +++ b/po/hr.po @@ -855,6 +855,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/hu.po b/po/hu.po index f0cd18f..5dc6b83 100644 --- a/po/hu.po +++ b/po/hu.po @@ -855,6 +855,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/hy.po b/po/hy.po index 182b4ef..4d1fc59 100644 --- a/po/hy.po +++ b/po/hy.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/id.po b/po/id.po index 97578be..c758356 100644 --- a/po/id.po +++ b/po/id.po @@ -856,6 +856,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/is.po b/po/is.po index 321b801..5b16607 100644 --- a/po/is.po +++ b/po/is.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/it.po b/po/it.po index 5e52e2f..77c1368 100644 --- a/po/it.po +++ b/po/it.po @@ -867,6 +867,10 @@ msgstr "non è supportato il collegamento a caldo dell'unità" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ja.po b/po/ja.po index 52c8b86..801398a 100644 --- a/po/ja.po +++ b/po/ja.po @@ -919,6 +919,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ka.po b/po/ka.po index 51fb83d..dab5f16 100644 --- a/po/ka.po +++ b/po/ka.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/kn.po b/po/kn.po index 74589ab..e74ba4f 100644 --- a/po/kn.po +++ b/po/kn.po @@ -900,6 +900,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ko.po b/po/ko.po index 06c5f63..7f216ff 100644 --- a/po/ko.po +++ b/po/ko.po @@ -882,6 +882,10 @@ msgstr "원본 경로가 없는 CD-ROM 장치를 지원하지 않습니다" msgid "domain should have at least one disk defined" msgstr "도메인은 최소 하나의 디스크를 정의해야 합니다" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "PCI 버스 0 슬롯 1은 암시적 LPC PCI-ISA 브릿지에 예약되어 있습니다" diff --git a/po/ku.po b/po/ku.po index 0ca4331..7a30d94 100644 --- a/po/ku.po +++ b/po/ku.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/lo.po b/po/lo.po index ee3285c..1237bfe 100644 --- a/po/lo.po +++ b/po/lo.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/lt.po b/po/lt.po index 3547478..e9410d9 100644 --- a/po/lt.po +++ b/po/lt.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/lv.po b/po/lv.po index da15417..db3fc85 100644 --- a/po/lv.po +++ b/po/lv.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/mk.po b/po/mk.po index bca6175..cba9c7d 100644 --- a/po/mk.po +++ b/po/mk.po @@ -856,6 +856,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ml.po b/po/ml.po index a316f8f..6dd9a56 100644 --- a/po/ml.po +++ b/po/ml.po @@ -905,6 +905,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/mr.po b/po/mr.po index 4feb3ca..1f40e27 100644 --- a/po/mr.po +++ b/po/mr.po @@ -912,6 +912,10 @@ msgstr "स्रोत मार्गविना cdrom साधन समर msgid "domain should have at least one disk defined" msgstr "डोमेनकडे किमान एक डिस्क ठरविलेले पाहिजे" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "PCI बस 0 स्लॉट 1 आरक्षित आहे, सूचीत PC PCI-ISA ब्रिजकरिता" diff --git a/po/ms.po b/po/ms.po index f3dd1e7..9618322 100644 --- a/po/ms.po +++ b/po/ms.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/my.po b/po/my.po index 92a4af8..0e225fb 100644 --- a/po/my.po +++ b/po/my.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/nb.po b/po/nb.po index ff77e7c..9bf88ef 100644 --- a/po/nb.po +++ b/po/nb.po @@ -855,6 +855,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/nl.po b/po/nl.po index f906e10..a8f76fc 100644 --- a/po/nl.po +++ b/po/nl.po @@ -867,6 +867,10 @@ msgstr "Benoemde apparaat aliassen worden niet ondersteund" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/nn.po b/po/nn.po index 1fdb298..e8de23c 100644 --- a/po/nn.po +++ b/po/nn.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/nso.po b/po/nso.po index ca73df5..3569368 100644 --- a/po/nso.po +++ b/po/nso.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/or.po b/po/or.po index 4f99a8b..995544e 100644 --- a/po/or.po +++ b/po/or.po @@ -876,6 +876,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/pa.po b/po/pa.po index 9f8c9d9..e9fd8db 100644 --- a/po/pa.po +++ b/po/pa.po @@ -895,6 +895,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/pl.po b/po/pl.po index fb7e20c..1718bfd 100644 --- a/po/pl.po +++ b/po/pl.po @@ -867,6 +867,10 @@ msgstr "Aliasy nazwanych urządzeń są nieobsługiwane" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/pt.po b/po/pt.po index a5a1f50..671f2c2 100644 --- a/po/pt.po +++ b/po/pt.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index f261bbd..d70c20e 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -902,6 +902,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ro.po b/po/ro.po index b7efaf0..9321cee 100644 --- a/po/ro.po +++ b/po/ro.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ru.po b/po/ru.po index 3b6b6a6..2272f7f 100644 --- a/po/ru.po +++ b/po/ru.po @@ -918,6 +918,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/si.po b/po/si.po index 18f0dea..2fe3215 100644 --- a/po/si.po +++ b/po/si.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/sk.po b/po/sk.po index 8d55137..d9f26c9 100644 --- a/po/sk.po +++ b/po/sk.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/sl.po b/po/sl.po index 9425c9d..bf5d86f 100644 --- a/po/sl.po +++ b/po/sl.po @@ -854,6 +854,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/sq.po b/po/sq.po index 3a597d0..bac1d70 100644 --- a/po/sq.po +++ b/po/sq.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/sr.po b/po/sr.po index f54d52f..a2b1ff5 100644 --- a/po/sr.po +++ b/po/sr.po @@ -871,6 +871,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/sr@latin.po b/po/sr@latin.po index c9ae98f..586230f 100644 --- a/po/sr@latin.po +++ b/po/sr@latin.po @@ -871,6 +871,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/sv.po b/po/sv.po index 0a1e320..f2e5bb6 100644 --- a/po/sv.po +++ b/po/sv.po @@ -860,6 +860,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/ta.po b/po/ta.po index 61170be..4dfb2df 100644 --- a/po/ta.po +++ b/po/ta.po @@ -919,6 +919,10 @@ msgstr "மூலப் பாதையில்லாத cdrom சாதனம msgid "domain should have at least one disk defined" msgstr "டொமைனுக்கு குறைந்தது ஒரு வட்டேனும் வரையறுக்கப்பட்டிருக்க வேண்டும்" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "PCI பஸ் 0 ஸ்லாட் 1 மறைமுக LPC PCI-ISA பிரிட்ஜுக்காக ஒதுக்கப்பட்டது" diff --git a/po/te.po b/po/te.po index 2ad29f3..8d3f27b 100644 --- a/po/te.po +++ b/po/te.po @@ -880,6 +880,10 @@ msgstr "పేరుగల పరికర మారుపేర్లు తో msgid "domain should have at least one disk defined" msgstr "డొమైన్ XML తప్పక వొక <disk> మూలకం కలిగివుండాలి." +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/th.po b/po/th.po index 8d6c983..ffb4c19 100644 --- a/po/th.po +++ b/po/th.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/tr.po b/po/tr.po index 5502581..76b1fad 100644 --- a/po/tr.po +++ b/po/tr.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/uk.po b/po/uk.po index ba17e24..36e5338 100644 --- a/po/uk.po +++ b/po/uk.po @@ -923,6 +923,10 @@ msgstr "підтримки пристроїв cdrom без шляху до дж msgid "domain should have at least one disk defined" msgstr "для домену слід визначити принаймні один диск" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "Слот 1 каналу PCI 0 зарезервовано для неявного містка LPC PCI-ISA" diff --git a/po/ur.po b/po/ur.po index e15d614..74a926f 100644 --- a/po/ur.po +++ b/po/ur.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/vi.po b/po/vi.po index 4974c2c..8f93aaa 100644 --- a/po/vi.po +++ b/po/vi.po @@ -867,6 +867,10 @@ msgstr "lưu trữ bí mật không được hỗ trợ" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/vi_VN.po b/po/vi_VN.po index 1e9af39..2e335bc 100644 --- a/po/vi_VN.po +++ b/po/vi_VN.po @@ -867,6 +867,10 @@ msgstr "lưu trữ bí mật không được hỗ trợ" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index afc2e3b..a2464e3 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -886,6 +886,10 @@ msgstr "不支持命名的设备别名" msgid "domain should have at least one disk defined" msgstr "域 XML 必须包含至少一个 <disk> 元素" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/zh_TW.po b/po/zh_TW.po index 812901c..b034bb8 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -859,6 +859,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" diff --git a/po/zu.po b/po/zu.po index 8a04324..83f3147 100644 --- a/po/zu.po +++ b/po/zu.po @@ -853,6 +853,10 @@ msgstr "" msgid "domain should have at least one disk defined" msgstr "" +#: src/bhyve/bhyve_command.c:407 +msgid "Custom loader requires explicit %s configuration" +msgstr "" + #: src/bhyve/bhyve_device.c:50 msgid "PCI bus 0 slot 1 is reserved for the implicit LPC PCI-ISA bridge" msgstr "" -- 1.9.3
participants (5)
-
Conrad Meyer
-
Conrad Rad
-
Craig Rodrigues
-
Daniel P. Berrange
-
Roman Bogorodskiy