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

First-time libvirt contributor here. Apologies if I've made beginner mistakes, etc. If something needs fixing, please let me know and I'll try and take care of it expediently. First, the bhyve driver expected and assumed an OS type of 'hvm'. I think this was incorrect. Bhyve does not provide a BIOS API and instead uses a host bootloader to paravirtualize guests. This patch changes the OS type Bhyve expects to 'xen' and updates tests to match. Second, 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 Conrad Meyer (2): bhyve: Support /domain/bootloader configuration for non-FreeBSD guests. Generated PO files for 'bhyve: Support /domain/bootloader' docs/drvbhyve.html.in | 30 +++++- 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_capabilities.c | 2 +- src/bhyve/bhyve_command.c | 107 +++++++++++++++++++-- tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-base.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-console.xml | 2 +- .../bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml | 2 +- .../bhyvexml2argv-disk-virtio.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml | 2 +- .../bhyvexml2xmlout-metadata.xml | 2 +- 89 files changed, 439 insertions(+), 26 deletions(-) -- 1.9.3

Also, flip Bhyve /domain/os/type support from HVM to Xen. Bhyve only supports paravirtualized guests, and 'xen' is closest to that. 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 | 30 +++++- docs/formatdomain.html.in | 4 +- po/libvirt.pot | 4 + src/bhyve/bhyve_capabilities.c | 2 +- src/bhyve/bhyve_command.c | 107 +++++++++++++++++++-- tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-base.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-console.xml | 2 +- .../bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml | 2 +- .../bhyvexml2argv-disk-virtio.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml | 2 +- .../bhyvexml2xmlout-metadata.xml | 2 +- 14 files changed, 139 insertions(+), 26 deletions(-) diff --git a/docs/drvbhyve.html.in b/docs/drvbhyve.html.in index 39afdf5..c6c79d7 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,13 +49,13 @@ 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> <os> - <type>hvm</type> + <type>xen</type> </os> <features> <apic/> @@ -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_capabilities.c b/src/bhyve/bhyve_capabilities.c index 132ce91..b37a24f 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -85,7 +85,7 @@ virBhyveCapsBuild(void) false, false)) == NULL) return NULL; - if ((guest = virCapabilitiesAddGuest(caps, "hvm", + if ((guest = virCapabilitiesAddGuest(caps, "xen", VIR_ARCH_X86_64, "bhyve", NULL, 0, NULL)) == NULL) 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; } diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml index 2be970e..bda6ab5 100644 --- a/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml @@ -4,7 +4,7 @@ <memory>219136</memory> <vcpu>1</vcpu> <os> - <type>hvm</type> + <type>xen</type> </os> <features> <apic/> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-base.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-base.xml index 3d23375..9ae8194 100644 --- a/tests/bhyvexml2argvdata/bhyvexml2argv-base.xml +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-base.xml @@ -4,7 +4,7 @@ <memory>219136</memory> <vcpu>1</vcpu> <os> - <type>hvm</type> + <type>xen</type> </os> <devices> <disk type='file'> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-console.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-console.xml index 35206b5..f2492b3 100644 --- a/tests/bhyvexml2argvdata/bhyvexml2argv-console.xml +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-console.xml @@ -4,7 +4,7 @@ <memory>219136</memory> <vcpu>1</vcpu> <os> - <type>hvm</type> + <type>xen</type> </os> <devices> <disk type='file'> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml index d70219c..b30c76f 100644 --- a/tests/bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml @@ -4,7 +4,7 @@ <memory>219136</memory> <vcpu>1</vcpu> <os> - <type>hvm</type> + <type>xen</type> </os> <devices> <disk type='file' device='cdrom'> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.xml index 773d55e..83dbd3c 100644 --- a/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.xml +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.xml @@ -4,7 +4,7 @@ <memory>219136</memory> <vcpu>1</vcpu> <os> - <type>hvm</type> + <type>xen</type> </os> <devices> <disk type='file'> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml index b262eb7..b2714c6 100644 --- a/tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml @@ -4,7 +4,7 @@ <memory>219136</memory> <vcpu>1</vcpu> <os> - <type>hvm</type> + <type>xen</type> </os> <devices> <disk type='file'> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml index 6436301..09a793b 100644 --- a/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml @@ -4,7 +4,7 @@ <memory>219136</memory> <vcpu>1</vcpu> <os> - <type>hvm</type> + <type>xen</type> </os> <devices> <disk type='file'> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml index cd4f25b..fff6aa8 100644 --- a/tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml @@ -4,7 +4,7 @@ <memory>219136</memory> <vcpu>1</vcpu> <os> - <type>hvm</type> + <type>xen</type> </os> <devices> <disk type='file'> diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml index 77e18d4..08ff7d2 100644 --- a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml @@ -9,7 +9,7 @@ <currentMemory unit='KiB'>219136</currentMemory> <vcpu placement='static'>1</vcpu> <os> - <type arch='x86_64'>hvm</type> + <type arch='x86_64'>xen</type> <boot dev='hd'/> </os> <clock offset='utc'/> -- 1.9.3

On 23.10.2014 21:58, Conrad Meyer wrote:
Also, flip Bhyve /domain/os/type support from HVM to Xen. Bhyve only supports paravirtualized guests, and 'xen' is closest to that. 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 | 30 +++++- docs/formatdomain.html.in | 4 +- po/libvirt.pot | 4 + src/bhyve/bhyve_capabilities.c | 2 +- src/bhyve/bhyve_command.c | 107 +++++++++++++++++++-- tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-base.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-console.xml | 2 +- .../bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml | 2 +- .../bhyvexml2argv-disk-virtio.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml | 2 +- tests/bhyvexml2argvdata/bhyvexml2argv-serial.xml | 2 +- .../bhyvexml2xmlout-metadata.xml | 2 +- 14 files changed, 139 insertions(+), 26 deletions(-)
diff --git a/docs/drvbhyve.html.in b/docs/drvbhyve.html.in index 39afdf5..c6c79d7 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,13 +49,13 @@ 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> <os> - <type>hvm</type> + <type>xen</type> </os> <features> <apic/> @@ -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 ""
There's no need for this. The po/* files are regenerated on the release.
diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 132ce91..b37a24f 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -85,7 +85,7 @@ virBhyveCapsBuild(void) false, false)) == NULL) return NULL;
- if ((guest = virCapabilitiesAddGuest(caps, "hvm", + if ((guest = virCapabilitiesAddGuest(caps, "xen", VIR_ARCH_X86_64, "bhyve", NULL, 0, NULL)) == NULL) 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__);
VIR_DEBUG() itself will report what function has it been called from.
+ + /* 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";
This doesn't look nice. I'd prefer char *tmpmapfile combined with virAsprintf() and VIR_FREE().
+ 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);
No, we use mkostemp( .. , O_CLOEXEC) instead.
+ 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);
I don't think it's safe to pass arbitrary arguments from XML. I find this too critical to ACK the patch, buy maybe further discussion can change my mind.
+ }
return cmd; + +error: + virCommandFree(cmd); + return NULL;
Michal

I don't think it's safe to pass arbitrary arguments from XML. I find this too critical to ACK the patch, buy maybe further discussion can change my mind.
Michal, You're reviewing a 4-revision old version of this patch, see v5 for the most recent set. However, this bit is still present in v5. What is <bootloader_args> in the XML is for, if not arbitrary arguments? Thanks, Conrad

On 29.10.2014 02:01, Conrad Meyer wrote:
I don't think it's safe to pass arbitrary arguments from XML. I find this too critical to ACK the patch, buy maybe further discussion can change my mind.
Michal,
You're reviewing a 4-revision old version of this patch, see v5 for the most recent set. However, this bit is still present in v5. What is <bootloader_args> in the XML is for, if not arbitrary arguments?
Oh right. I was getting through a lot of e-mails and I didn't notice you've posted v5. And yes, you're right - <bootloader_args/> is designed for that. Okay then. Let me see how v5 went. Michal

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

On 23.10.2014 21:58, Conrad Meyer wrote:
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(+)
Again, this is not needed. Michal
participants (2)
-
Conrad Meyer
-
Michal Privoznik