[libvirt] [PATCHv3 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: v3: - Based on latest git as of less than an hour ago; tested HDD booting a Linux guest several times. - Added first cut at CD booting. I'm not sure grub-bhyve supports this (was not able to to test it). - make 'syntax-check' clean - Per Roman (off-list), split up virBhyveProcessBuildLoadCmd into a few smaller functions. - Also per Roman (off-list), use virCommandAddArgSet() for bootloader_args. (Without the nasty cast, my compiler complains.) 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 | 5 ++ po/am.po | 5 ++ po/ar.po | 5 ++ po/as.po | 5 ++ po/be.po | 5 ++ po/bg.po | 5 ++ po/bn.po | 5 ++ po/bn_IN.po | 5 ++ po/bo.po | 5 ++ po/bs.po | 5 ++ po/ca.po | 5 ++ po/cs.po | 5 ++ po/cy.po | 5 ++ po/da.po | 5 ++ po/de.po | 5 ++ po/el.po | 5 ++ po/en_GB.po | 5 ++ po/es.po | 5 ++ po/et.po | 5 ++ po/eu_ES.po | 5 ++ po/fa.po | 5 ++ po/fi.po | 5 ++ po/fr.po | 5 ++ po/gl.po | 5 ++ po/gu.po | 5 ++ po/he.po | 5 ++ po/hi.po | 5 ++ po/hr.po | 5 ++ po/hu.po | 5 ++ po/hy.po | 5 ++ po/id.po | 5 ++ po/is.po | 5 ++ po/it.po | 5 ++ po/ja.po | 5 ++ po/ka.po | 5 ++ po/kn.po | 5 ++ po/ko.po | 5 ++ po/ku.po | 5 ++ po/libvirt.pot | 5 ++ po/lo.po | 5 ++ po/lt.po | 5 ++ po/lv.po | 5 ++ po/mk.po | 5 ++ po/ml.po | 5 ++ po/mr.po | 5 ++ po/ms.po | 5 ++ po/my.po | 5 ++ po/nb.po | 5 ++ po/nl.po | 5 ++ po/nn.po | 5 ++ po/nso.po | 5 ++ po/or.po | 5 ++ po/pa.po | 5 ++ po/pl.po | 5 ++ po/pt.po | 5 ++ po/pt_BR.po | 5 ++ po/ro.po | 5 ++ po/ru.po | 5 ++ po/si.po | 5 ++ po/sk.po | 5 ++ po/sl.po | 5 ++ po/sq.po | 5 ++ po/sr.po | 5 ++ po/sr@latin.po | 5 ++ po/sv.po | 5 ++ po/ta.po | 5 ++ po/te.po | 5 ++ po/th.po | 5 ++ po/tr.po | 5 ++ po/uk.po | 5 ++ po/ur.po | 5 ++ po/vi.po | 5 ++ po/vi_VN.po | 5 ++ po/zh_CN.po | 5 ++ po/zh_TW.po | 5 ++ po/zu.po | 5 ++ src/bhyve/bhyve_command.c | 204 ++++++++++++++++++++++++++++++++++++++++++---- src/bhyve/bhyve_driver.c | 5 ++ src/bhyve/bhyve_process.c | 5 ++ src/bhyve/bhyve_utils.h | 1 + 82 files changed, 604 insertions(+), 23 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 (or a CD if one exists). Caveat: Assumes the HDD boots from the msdos1 partition. I think this is a pretty reasonable assumption for a VM. (DrvBhyve with Bhyveload already assumes that the first disk should be booted.) I've tested the HDD boot and it seems to work. 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 | 204 ++++++++++++++++++++++++++++++++++++++++++---- src/bhyve/bhyve_driver.c | 5 ++ src/bhyve/bhyve_process.c | 5 ++ src/bhyve/bhyve_utils.h | 1 + 7 files changed, 228 insertions(+), 23 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..fcaf077 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -26,6 +26,7 @@ #include <net/if_tap.h> #include "bhyve_command.h" +#include "datatypes.h" #include "viralloc.h" #include "virfile.h" #include "virstring.h" @@ -294,51 +295,218 @@ virBhyveProcessBuildDestroyCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED, return cmd; } -virCommandPtr -virBhyveProcessBuildLoadCmd(virConnectPtr conn, - virDomainDefPtr def) +static virCommandPtr +virBhyveProcessBuildBhyveloadCmd(virDomainDefPtr def, virDomainDiskDefPtr disk) { virCommandPtr cmd; - virDomainDiskDefPtr disk; + char **blargs; - if (def->ndisks < 1) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("domain should have at least one disk defined")); + cmd = virCommandNew(BHYVELOAD); + + if (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 { + /* XXX: Handle quoted? */ + blargs = virStringSplit(def->os.bootloaderArgs, " ", 0); + virCommandAddArgSet(cmd, (const char * const *)blargs); + virStringFreeList(blargs); + } + + return cmd; +} + +static virCommandPtr +virBhyveProcessBuildCustomLoaderCmd(virDomainDefPtr def) +{ + virCommandPtr cmd; + char **blargs; + + if (def->os.bootloaderArgs == NULL) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Custom loader requires explicit %s configuration"), + "bootloader_args"); return NULL; } - disk = def->disks[0]; + cmd = virCommandNew(def->os.bootloader); + + VIR_DEBUG("%s: custom loader '%s' with arguments", __func__, + def->os.bootloader); + + /* XXX: Handle quoted? */ + blargs = virStringSplit(def->os.bootloaderArgs, " ", 0); + virCommandAddArgSet(cmd, (const char * const *)blargs); + virStringFreeList(blargs); + + return cmd; +} + +static bool +virBhyveUsableDisk(virConnectPtr conn, virDomainDiskDefPtr disk) +{ if (virStorageTranslateDiskSourcePool(conn, disk) < 0) - return NULL; + return false; if ((disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) && (disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unsupported disk device")); - return NULL; + return false; } if ((virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_FILE) && (virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_VOLUME)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unsupported disk type")); - return NULL; + return false; } - cmd = virCommandNew(BHYVELOAD); + return true; +} - /* Memory */ - virCommandAddArg(cmd, "-m"); +static virCommandPtr +virBhyveProcessBuildGrubbhyveCmd(virDomainDefPtr def, virConnectPtr conn) +{ + bhyveConnPtr privconn = conn->privateData; + virDomainDiskDefPtr disk, cd; + virCommandPtr cmd; + size_t i; + FILE *f; + int rc; + + if (def->os.bootloaderArgs != NULL) + return virBhyveProcessBuildCustomLoaderCmd(def); + + /* Search disk list for CD or HDD device. */ + cd = disk = NULL; + for (i = 0; i < def->ndisks; i++) { + if (!virBhyveUsableDisk(conn, def->disks[i])) + continue; + + if (cd == NULL && + def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_CDROM) { + cd = def->disks[i]; + VIR_INFO("%s: Picking %s as boot CD", __func__, + virDomainDiskGetSource(cd)); + } + + if (disk == NULL && + def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) { + disk = def->disks[i]; + VIR_INFO("%s: Picking %s as HDD", __func__, + virDomainDiskGetSource(disk)); + } + } + + cmd = virCommandNew(def->os.bootloader); + + VIR_DEBUG("%s: grub-bhyve with default arguments", __func__); + + /* + * XXX Default grub-bhyve has some minor caveats, but MAY work for some + * typical configurations. In particular: + * + * - For HDD boot, assumes a GRUB install on hd0,msdos1 + */ + + VIR_FREE(privconn->grub_devicesmap_file); + rc = virAsprintf(&privconn->grub_devicesmap_file, + "%s/grub-bhyve-device.map_%ju", BHYVE_STATE_DIR, + (uintmax_t)getpid()); + if (rc < 0) + goto error; + + f = fopen(privconn->grub_devicesmap_file, "wb"); + if (f == NULL) { + virReportSystemError(errno, _("Failed to open '%s'"), + privconn->grub_devicesmap_file); + goto error; + } + + /* Grub device.map (just for boot) */ + if (disk) + fprintf(f, "(hd0) %s\n", virDomainDiskGetSource(disk)); + + if (cd != NULL) { + fprintf(f, "(cd) %s\n", virDomainDiskGetSource(cd)); + + VIR_WARN("Trying to boot cd with grub-bhyve. If this is " + "not what you wanted, specify <bootloader_args>."); + + virCommandAddArg(cmd, "--root"); + virCommandAddArg(cmd, "cd"); + } else { + VIR_WARN("Trying to boot hd0,msdos1 with grub-bhyve. If this is " + "not what you wanted, specify <bootloader_args>."); + + virCommandAddArg(cmd, "--root"); + virCommandAddArg(cmd, "hd0,msdos1"); + } + + if (VIR_FCLOSE(f) < 0) { + virReportSystemError(errno, "%s", _("failed to close file")); + goto error; + } + + virCommandAddArg(cmd, "--device-map"); + virCommandAddArg(cmd, privconn->grub_devicesmap_file); + + /* Memory in MB */ + virCommandAddArg(cmd, "--memory"); 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); return cmd; + + error: + virCommandFree(cmd); + return NULL; +} + +virCommandPtr +virBhyveProcessBuildLoadCmd(virConnectPtr conn, + virDomainDefPtr def) +{ + virDomainDiskDefPtr disk; + + if (def->ndisks < 1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("domain should have at least one disk defined")); + return NULL; + } + + if (def->os.bootloader == NULL) { + disk = def->disks[0]; + + if (!virBhyveUsableDisk(conn, disk)) + return NULL; + + if (def->ndisks > 1) { + VIR_WARN("%s: drvbhyve attempting to boot from device %s of multiple-" + "device configuration", __func__, + virDomainDiskGetSource(disk)); + } + + return virBhyveProcessBuildBhyveloadCmd(def, disk); + } else if (strstr(def->os.bootloader, "grub-bhyve") != NULL) { + return virBhyveProcessBuildGrubbhyveCmd(def, conn); + } else { + return virBhyveProcessBuildCustomLoaderCmd(def); + } } diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index eb0d455..5642f85 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1128,6 +1128,11 @@ bhyveStateCleanup(void) if (bhyve_driver == NULL) return -1; + if (bhyve_driver->grub_devicesmap_file != NULL) { + ignore_value(unlink(bhyve_driver->grub_devicesmap_file)); + VIR_FREE(bhyve_driver->grub_devicesmap_file); + } + virObjectUnref(bhyve_driver->domains); virObjectUnref(bhyve_driver->caps); virObjectUnref(bhyve_driver->xmlopt); diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 0bbe388..3689a6a 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -266,6 +266,11 @@ virBhyveProcessStop(bhyveConnPtr driver, virPidFileDelete(BHYVE_STATE_DIR, vm->def->name); virDomainDeleteConfig(BHYVE_STATE_DIR, NULL, vm); + if (driver->grub_devicesmap_file != NULL) { + ignore_value(unlink(driver->grub_devicesmap_file)); + VIR_FREE(driver->grub_devicesmap_file); + } + return ret; } diff --git a/src/bhyve/bhyve_utils.h b/src/bhyve/bhyve_utils.h index 848f9a1..c9c4a2c 100644 --- a/src/bhyve/bhyve_utils.h +++ b/src/bhyve/bhyve_utils.h @@ -40,6 +40,7 @@ struct _bhyveConn { virCapsPtr caps; virDomainXMLOptionPtr xmlopt; char *pidfile; + char *grub_devicesmap_file; virSysinfoDefPtr hostsysinfo; virObjectEventStatePtr domainEventState; -- 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 (or a CD if one exists).
Caveat: Assumes the HDD boots from the msdos1 partition. I think this is a pretty reasonable assumption for a VM. (DrvBhyve with Bhyveload already assumes that the first disk should be booted.)
I've tested the HDD boot and it seems to work.
I've tried to boot from CD and had a problem with that. It generates a command like that: /usr/local/sbin/grub-bhyve -v --root cd --device-map /usr/local/var/run/libvirt/bhyve/grub-bhyve-device.map_63694 --memory 512 linux3 and the error is: Could not create VM linux3 Error in initializing VM Map file looks this way: (hd0) /home/novel/linux.img (cd) /home/novel/ubuntu-14.04-server-amd64.iso Any idea what could be wrong with that?
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 | 204 ++++++++++++++++++++++++++++++++++++++++++---- src/bhyve/bhyve_driver.c | 5 ++ src/bhyve/bhyve_process.c | 5 ++ src/bhyve/bhyve_utils.h | 1 + 7 files changed, 228 insertions(+), 23 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> +
I think it would be also great to add a complete domain XML for Linux guest into 'Example guest domain XML configurations' section.
+<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..fcaf077 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -26,6 +26,7 @@ #include <net/if_tap.h>
#include "bhyve_command.h" +#include "datatypes.h" #include "viralloc.h" #include "virfile.h" #include "virstring.h" @@ -294,51 +295,218 @@ virBhyveProcessBuildDestroyCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED, return cmd; }
-virCommandPtr -virBhyveProcessBuildLoadCmd(virConnectPtr conn, - virDomainDefPtr def) +static virCommandPtr +virBhyveProcessBuildBhyveloadCmd(virDomainDefPtr def, virDomainDiskDefPtr disk) { virCommandPtr cmd; - virDomainDiskDefPtr disk; + char **blargs;
- if (def->ndisks < 1) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("domain should have at least one disk defined")); + cmd = virCommandNew(BHYVELOAD); + + if (def->os.bootloaderArgs == NULL) { + VIR_DEBUG("%s: bhyveload with default arguments", __func__);
Adding __func__ here is not needed because it'll be included in the log message as well, e.g.: 2014-10-26 10:16:28.285+0000: 34498181120: info : virBhyveProcessBuildGrubbhyveCmd:410 : virBhyveProcessBuildGrubbhyveCmd: Picking /home/novel/linux.img as HDD (Yes, it's a different log entry, but idea is the same).
+ + /* 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 { + /* XXX: Handle quoted? */ + blargs = virStringSplit(def->os.bootloaderArgs, " ", 0); + virCommandAddArgSet(cmd, (const char * const *)blargs); + virStringFreeList(blargs);
As this block is used two times without changes, I'm wondering if it's worth to move it out into a function as well or is it small enough for that...
+ } + + return cmd; +} + +static virCommandPtr +virBhyveProcessBuildCustomLoaderCmd(virDomainDefPtr def) +{ + virCommandPtr cmd; + char **blargs; + + if (def->os.bootloaderArgs == NULL) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Custom loader requires explicit %s configuration"), + "bootloader_args"); return NULL; }
- disk = def->disks[0]; + cmd = virCommandNew(def->os.bootloader); + + VIR_DEBUG("%s: custom loader '%s' with arguments", __func__, + def->os.bootloader);
Ditto wrt __func__.
+ + /* XXX: Handle quoted? */ + blargs = virStringSplit(def->os.bootloaderArgs, " ", 0); + virCommandAddArgSet(cmd, (const char * const *)blargs); + virStringFreeList(blargs); + + return cmd; +} + +static bool +virBhyveUsableDisk(virConnectPtr conn, virDomainDiskDefPtr disk) +{
if (virStorageTranslateDiskSourcePool(conn, disk) < 0) - return NULL; + return false;
if ((disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) && (disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unsupported disk device")); - return NULL; + return false; }
if ((virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_FILE) && (virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_VOLUME)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unsupported disk type")); - return NULL; + return false; }
- cmd = virCommandNew(BHYVELOAD); + return true; +}
- /* Memory */ - virCommandAddArg(cmd, "-m"); +static virCommandPtr +virBhyveProcessBuildGrubbhyveCmd(virDomainDefPtr def, virConnectPtr conn) +{ + bhyveConnPtr privconn = conn->privateData; + virDomainDiskDefPtr disk, cd; + virCommandPtr cmd; + size_t i; + FILE *f; + int rc; + + if (def->os.bootloaderArgs != NULL) + return virBhyveProcessBuildCustomLoaderCmd(def); + + /* Search disk list for CD or HDD device. */ + cd = disk = NULL; + for (i = 0; i < def->ndisks; i++) { + if (!virBhyveUsableDisk(conn, def->disks[i])) + continue; + + if (cd == NULL && + def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_CDROM) { + cd = def->disks[i]; + VIR_INFO("%s: Picking %s as boot CD", __func__,
Ditto wrt __func__.
+ virDomainDiskGetSource(cd)); + } + + if (disk == NULL && + def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) { + disk = def->disks[i]; + VIR_INFO("%s: Picking %s as HDD", __func__, + virDomainDiskGetSource(disk));
Ditto wrt __func__. Wondering if it would make sense to break the loop if cd != NULL and disk != NULL after the iteration as we pick the first match anyway?
+ } + } + + cmd = virCommandNew(def->os.bootloader); + + VIR_DEBUG("%s: grub-bhyve with default arguments", __func__);
Ditto wrt __func__.
+ + /* + * XXX Default grub-bhyve has some minor caveats, but MAY work for some + * typical configurations. In particular: + * + * - For HDD boot, assumes a GRUB install on hd0,msdos1 + */ + + VIR_FREE(privconn->grub_devicesmap_file); + rc = virAsprintf(&privconn->grub_devicesmap_file, + "%s/grub-bhyve-device.map_%ju", BHYVE_STATE_DIR, + (uintmax_t)getpid());
Could you please elaborate on deciding to store this filename in privconn? In this case we need to make sure that it's not a subject for races. Probably other option would be to make it per-domain based, as it's a per-domain resource anyway?
+ if (rc < 0) + goto error; + + f = fopen(privconn->grub_devicesmap_file, "wb"); + if (f == NULL) { + virReportSystemError(errno, _("Failed to open '%s'"), + privconn->grub_devicesmap_file); + goto error; + } + + /* Grub device.map (just for boot) */ + if (disk) + fprintf(f, "(hd0) %s\n", virDomainDiskGetSource(disk)); + + if (cd != NULL) { + fprintf(f, "(cd) %s\n", virDomainDiskGetSource(cd)); + + VIR_WARN("Trying to boot cd with grub-bhyve. If this is " + "not what you wanted, specify <bootloader_args>.");
IIRC, the common style is not to end messages with a period.
+ virCommandAddArg(cmd, "--root"); + virCommandAddArg(cmd, "cd"); + } else { + VIR_WARN("Trying to boot hd0,msdos1 with grub-bhyve. If this is " + "not what you wanted, specify <bootloader_args>.");
Dittro wrt period.
+ virCommandAddArg(cmd, "--root"); + virCommandAddArg(cmd, "hd0,msdos1"); + } + + if (VIR_FCLOSE(f) < 0) { + virReportSystemError(errno, "%s", _("failed to close file")); + goto error; + } + + virCommandAddArg(cmd, "--device-map"); + virCommandAddArg(cmd, privconn->grub_devicesmap_file); + + /* Memory in MB */ + virCommandAddArg(cmd, "--memory"); 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);
return cmd; + + error: + virCommandFree(cmd); + return NULL; +} + +virCommandPtr +virBhyveProcessBuildLoadCmd(virConnectPtr conn, + virDomainDefPtr def) +{ + virDomainDiskDefPtr disk; + + if (def->ndisks < 1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("domain should have at least one disk defined")); + return NULL; + } + + if (def->os.bootloader == NULL) { + disk = def->disks[0]; + + if (!virBhyveUsableDisk(conn, disk)) + return NULL; + + if (def->ndisks > 1) { + VIR_WARN("%s: drvbhyve attempting to boot from device %s of multiple-" + "device configuration", __func__, + virDomainDiskGetSource(disk));
Dittro wrt __func__ and formatting is one space off.
+ } + + return virBhyveProcessBuildBhyveloadCmd(def, disk); + } else if (strstr(def->os.bootloader, "grub-bhyve") != NULL) { + return virBhyveProcessBuildGrubbhyveCmd(def, conn); + } else { + return virBhyveProcessBuildCustomLoaderCmd(def); + } } diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index eb0d455..5642f85 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1128,6 +1128,11 @@ bhyveStateCleanup(void) if (bhyve_driver == NULL) return -1;
+ if (bhyve_driver->grub_devicesmap_file != NULL) { + ignore_value(unlink(bhyve_driver->grub_devicesmap_file)); + VIR_FREE(bhyve_driver->grub_devicesmap_file); + } + virObjectUnref(bhyve_driver->domains); virObjectUnref(bhyve_driver->caps); virObjectUnref(bhyve_driver->xmlopt); diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 0bbe388..3689a6a 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -266,6 +266,11 @@ virBhyveProcessStop(bhyveConnPtr driver, virPidFileDelete(BHYVE_STATE_DIR, vm->def->name); virDomainDeleteConfig(BHYVE_STATE_DIR, NULL, vm);
+ if (driver->grub_devicesmap_file != NULL) { + ignore_value(unlink(driver->grub_devicesmap_file)); + VIR_FREE(driver->grub_devicesmap_file); + } + return ret; }
diff --git a/src/bhyve/bhyve_utils.h b/src/bhyve/bhyve_utils.h index 848f9a1..c9c4a2c 100644 --- a/src/bhyve/bhyve_utils.h +++ b/src/bhyve/bhyve_utils.h @@ -40,6 +40,7 @@ struct _bhyveConn { virCapsPtr caps; virDomainXMLOptionPtr xmlopt; char *pidfile; + char *grub_devicesmap_file; virSysinfoDefPtr hostsysinfo;
virObjectEventStatePtr domainEventState; -- 1.9.3
Roman Bogorodskiy

On Sun, Oct 26, 2014 at 7:00 AM, Roman Bogorodskiy <bogorodskiy@gmail.com> wrote:
Conrad Meyer wrote:
I've tested the HDD boot and it seems to work.
I've tried to boot from CD and had a problem with that. It generates a command like that:
/usr/local/sbin/grub-bhyve -v --root cd --device-map /usr/local/var/run/libvirt/bhyve/grub-bhyve-device.map_63694 --memory 512 linux3
and the error is:
Could not create VM linux3 Error in initializing VM
Map file looks this way:
(hd0) /home/novel/linux.img (cd) /home/novel/ubuntu-14.04-server-amd64.iso
Any idea what could be wrong with that?
It looks like the map files I've seen from GRUB documentation (and I've also tried cd0 and couldn't get grub-bhyve to boot that), but that might be legacy GRUB only. Maybe just (hd1) and root=(hd1) will work. I don't know.
@@ -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> +
I think it would be also great to add a complete domain XML for Linux guest into 'Example guest domain XML configurations' section.
Okay, will do.
+ if (def->os.bootloaderArgs == NULL) { + VIR_DEBUG("%s: bhyveload with default arguments", __func__);
Adding __func__ here is not needed because it'll be included in the log message as well, e.g.:
2014-10-26 10:16:28.285+0000: 34498181120: info : virBhyveProcessBuildGrubbhyveCmd:410 : virBhyveProcessBuildGrubbhyveCmd: Picking /home/novel/linux.img as HDD
(Yes, it's a different log entry, but idea is the same).
Sure, thanks. I will fix up this and the other __func__ / style / period issues.
+ /* XXX: Handle quoted? */ + blargs = virStringSplit(def->os.bootloaderArgs, " ", 0); + virCommandAddArgSet(cmd, (const char * const *)blargs); + virStringFreeList(blargs);
As this block is used two times without changes, I'm wondering if it's worth to move it out into a function as well or is it small enough for that...
I was on the fence. I think the risk of someone coming along and accidentally implementing quoting for only one of the sections is fairly low.
+ virDomainDiskGetSource(cd)); + } + + if (disk == NULL && + def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) { + disk = def->disks[i]; + VIR_INFO("%s: Picking %s as HDD", __func__, + virDomainDiskGetSource(disk));
Ditto wrt __func__.
Wondering if it would make sense to break the loop if cd != NULL and disk != NULL after the iteration as we pick the first match anyway?
Because of performance concerns, or for clarity? The number of disks you might typically have in a VM is so small, I think simpler code is maybe nicer. But if it's unclear, it can be changed.
+ + /* + * XXX Default grub-bhyve has some minor caveats, but MAY work for some + * typical configurations. In particular: + * + * - For HDD boot, assumes a GRUB install on hd0,msdos1 + */ + + VIR_FREE(privconn->grub_devicesmap_file); + rc = virAsprintf(&privconn->grub_devicesmap_file, + "%s/grub-bhyve-device.map_%ju", BHYVE_STATE_DIR, + (uintmax_t)getpid());
Could you please elaborate on deciding to store this filename in privconn? In this case we need to make sure that it's not a subject for races. Probably other option would be to make it per-domain based, as it's a per-domain resource anyway?
Domain-based would be better; privconn was just a guess based on 'pidfile'. Do we have some per-domain private data yet? And if so, where is it? Thanks for taking a look. Best, Conrad

Conrad Meyer wrote:
On Sun, Oct 26, 2014 at 7:00 AM, Roman Bogorodskiy <bogorodskiy@gmail.com> wrote:
Conrad Meyer wrote:
I've tested the HDD boot and it seems to work.
I've tried to boot from CD and had a problem with that. It generates a command like that:
/usr/local/sbin/grub-bhyve -v --root cd --device-map /usr/local/var/run/libvirt/bhyve/grub-bhyve-device.map_63694 --memory 512 linux3
and the error is:
Could not create VM linux3 Error in initializing VM
Map file looks this way:
(hd0) /home/novel/linux.img (cd) /home/novel/ubuntu-14.04-server-amd64.iso
Any idea what could be wrong with that?
It looks like the map files I've seen from GRUB documentation (and I've also tried cd0 and couldn't get grub-bhyve to boot that), but that might be legacy GRUB only.
Maybe just (hd1) and root=(hd1) will work. I don't know.
My problem was that that Linux installer ISO shows GRUB interactive menu. Looks like CDROM support is not very useful is this case :( We need to teach virsh console to work for the loader also; that should be easy for bhyveload, however, grub-bhyve doesn't seem to support that, so it needs to be updated as well.
@@ -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> +
I think it would be also great to add a complete domain XML for Linux guest into 'Example guest domain XML configurations' section.
Okay, will do.
+ if (def->os.bootloaderArgs == NULL) { + VIR_DEBUG("%s: bhyveload with default arguments", __func__);
Adding __func__ here is not needed because it'll be included in the log message as well, e.g.:
2014-10-26 10:16:28.285+0000: 34498181120: info : virBhyveProcessBuildGrubbhyveCmd:410 : virBhyveProcessBuildGrubbhyveCmd: Picking /home/novel/linux.img as HDD
(Yes, it's a different log entry, but idea is the same).
Sure, thanks. I will fix up this and the other __func__ / style / period issues.
+ /* XXX: Handle quoted? */ + blargs = virStringSplit(def->os.bootloaderArgs, " ", 0); + virCommandAddArgSet(cmd, (const char * const *)blargs); + virStringFreeList(blargs);
As this block is used two times without changes, I'm wondering if it's worth to move it out into a function as well or is it small enough for that...
I was on the fence. I think the risk of someone coming along and accidentally implementing quoting for only one of the sections is fairly low.
+ virDomainDiskGetSource(cd)); + } + + if (disk == NULL && + def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) { + disk = def->disks[i]; + VIR_INFO("%s: Picking %s as HDD", __func__, + virDomainDiskGetSource(disk));
Ditto wrt __func__.
Wondering if it would make sense to break the loop if cd != NULL and disk != NULL after the iteration as we pick the first match anyway?
Because of performance concerns, or for clarity? The number of disks you might typically have in a VM is so small, I think simpler code is maybe nicer. But if it's unclear, it can be changed.
+ + /* + * XXX Default grub-bhyve has some minor caveats, but MAY work for some + * typical configurations. In particular: + * + * - For HDD boot, assumes a GRUB install on hd0,msdos1 + */ + + VIR_FREE(privconn->grub_devicesmap_file); + rc = virAsprintf(&privconn->grub_devicesmap_file, + "%s/grub-bhyve-device.map_%ju", BHYVE_STATE_DIR, + (uintmax_t)getpid());
Could you please elaborate on deciding to store this filename in privconn? In this case we need to make sure that it's not a subject for races. Probably other option would be to make it per-domain based, as it's a per-domain resource anyway?
Domain-based would be better; privconn was just a guess based on 'pidfile'. Do we have some per-domain private data yet? And if so, where is it?
Yes, we have that, there's bhyveDomainObjPrivate in bhyve_domain.h.
Thanks for taking a look.
Best, Conrad
Roman Bogorodskiy

On Fri, Oct 24, 2014 at 04:28:14PM -0400, 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 (or a CD if one exists).
Caveat: Assumes the HDD boots from the msdos1 partition. I think this is a pretty reasonable assumption for a VM. (DrvBhyve with Bhyveload already assumes that the first disk should be booted.)
I've tested the HDD boot and it seems to work.
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 | 204 ++++++++++++++++++++++++++++++++++++++++++---- src/bhyve/bhyve_driver.c | 5 ++ src/bhyve/bhyve_process.c | 5 ++ src/bhyve/bhyve_utils.h | 1 + 7 files changed, 228 insertions(+), 23 deletions(-)
Could you also add to tests/bhyvexml2argv{data/,test.c} so that you exercise the new code paths in tests.
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 ""
You can drop this chunk - we manually update the .pot file before release and when pushing to our translation system. 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 :|

On Mon, Oct 27, 2014 at 6:17 AM, Daniel P. Berrange <berrange@redhat.com> wrote:
On Fri, Oct 24, 2014 at 04:28:14PM -0400, Conrad Meyer wrote:
docs/drvbhyve.html.in | 28 ++++++- docs/formatdomain.html.in | 4 +- po/libvirt.pot | 4 + src/bhyve/bhyve_command.c | 204 ++++++++++++++++++++++++++++++++++++++++++---- src/bhyve/bhyve_driver.c | 5 ++ src/bhyve/bhyve_process.c | 5 ++ src/bhyve/bhyve_utils.h | 1 + 7 files changed, 228 insertions(+), 23 deletions(-)
Could you also add to tests/bhyvexml2argv{data/,test.c} so that you exercise the new code paths in tests.
Okay.
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 ""
You can drop this chunk - we manually update the .pot file before release and when pushing to our translation system.
Sure. Thanks, Conrad

Sponsored by: EMC / Isilon storage division Signed-off-by: Conrad Meyer <conrad.meyer@isilon.com> --- po/af.po | 5 +++++ po/am.po | 5 +++++ po/ar.po | 5 +++++ po/as.po | 5 +++++ po/be.po | 5 +++++ po/bg.po | 5 +++++ po/bn.po | 5 +++++ po/bn_IN.po | 5 +++++ po/bo.po | 5 +++++ po/bs.po | 5 +++++ po/ca.po | 5 +++++ po/cs.po | 5 +++++ po/cy.po | 5 +++++ po/da.po | 5 +++++ po/de.po | 5 +++++ po/el.po | 5 +++++ po/en_GB.po | 5 +++++ po/es.po | 5 +++++ po/et.po | 5 +++++ po/eu_ES.po | 5 +++++ po/fa.po | 5 +++++ po/fi.po | 5 +++++ po/fr.po | 5 +++++ po/gl.po | 5 +++++ po/gu.po | 5 +++++ po/he.po | 5 +++++ po/hi.po | 5 +++++ po/hr.po | 5 +++++ po/hu.po | 5 +++++ po/hy.po | 5 +++++ po/id.po | 5 +++++ po/is.po | 5 +++++ po/it.po | 5 +++++ po/ja.po | 5 +++++ po/ka.po | 5 +++++ po/kn.po | 5 +++++ po/ko.po | 5 +++++ po/ku.po | 5 +++++ po/libvirt.pot | 1 + po/lo.po | 5 +++++ po/lt.po | 5 +++++ po/lv.po | 5 +++++ po/mk.po | 5 +++++ po/ml.po | 5 +++++ po/mr.po | 5 +++++ po/ms.po | 5 +++++ po/my.po | 5 +++++ po/nb.po | 5 +++++ po/nl.po | 5 +++++ po/nn.po | 5 +++++ po/nso.po | 5 +++++ po/or.po | 5 +++++ po/pa.po | 5 +++++ po/pl.po | 5 +++++ po/pt.po | 5 +++++ po/pt_BR.po | 5 +++++ po/ro.po | 5 +++++ po/ru.po | 5 +++++ po/si.po | 5 +++++ po/sk.po | 5 +++++ po/sl.po | 5 +++++ po/sq.po | 5 +++++ po/sr.po | 5 +++++ po/sr@latin.po | 5 +++++ po/sv.po | 5 +++++ po/ta.po | 5 +++++ po/te.po | 5 +++++ po/th.po | 5 +++++ po/tr.po | 5 +++++ po/uk.po | 5 +++++ po/ur.po | 5 +++++ po/vi.po | 5 +++++ po/vi_VN.po | 5 +++++ po/zh_CN.po | 5 +++++ po/zh_TW.po | 5 +++++ po/zu.po | 5 +++++ 76 files changed, 376 insertions(+) diff --git a/po/af.po b/po/af.po index 0e1374d..75b1970 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/am.po b/po/am.po index 8230ec8..223f577 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/ar.po b/po/ar.po index fed8f1f..4c684de 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/as.po b/po/as.po index b2bba9a..8ee3656 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 ব্ৰিজৰ বাবে সংৰক্ষিত" @@ -1108,6 +1112,7 @@ msgid "cannot get host CPU capabilities" msgstr "হোস্ট CPU ৰ ক্ষমতা প্ৰাপ্ত কৰা সম্ভৱ নহয়" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' খুলিবলৈ ব্যৰ্থ" diff --git a/po/be.po b/po/be.po index 1f4b856..09f04b0 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/bg.po b/po/bg.po index 05d9e5d..69bbc6b 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 "" @@ -1049,6 +1053,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/bn.po b/po/bn.po index ab15fc4..58de029 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/bn_IN.po b/po/bn_IN.po index 88dd968..05c6f52 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 "" @@ -1069,6 +1073,7 @@ msgid "cannot get host CPU capabilities" msgstr "হোস্ট CPU-র ক্ষমতা প্রাপ্ত করা সম্ভব নয়" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' খুলতে ব্যর্থ" diff --git a/po/bo.po b/po/bo.po index cfbee90..51b8796 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 "" @@ -1044,6 +1048,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/bs.po b/po/bs.po index 80c8ac2..717c05d 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 "" @@ -1049,6 +1053,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/ca.po b/po/ca.po index 2ccbfdc..c4d5722 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 "" @@ -1051,6 +1055,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/cs.po b/po/cs.po index 35a9ba6..03171c5 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 "" @@ -1057,6 +1061,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Selhalo otevření '%s'" diff --git a/po/cy.po b/po/cy.po index 51e11b8..dd06957 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/da.po b/po/da.po index 04d39ad..6c2839b 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 "" @@ -1050,6 +1054,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/de.po b/po/de.po index 64cf6fe..8b60d4e 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 "" @@ -1107,6 +1111,7 @@ msgid "cannot get host CPU capabilities" msgstr "Kann CPU-Fähigkeiten des Hostes nicht abrufen" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Öffnen von '%s' fehlgeschlagen" diff --git a/po/el.po b/po/el.po index c62c443..09b3b11 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 "" @@ -1063,6 +1067,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/en_GB.po b/po/en_GB.po index 833044a..bc7582b 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 "" @@ -1112,6 +1116,7 @@ msgid "cannot get host CPU capabilities" msgstr "cannot get host CPU capabilities" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Failed to open '%s'" diff --git a/po/es.po b/po/es.po index 8a54e10..c5547b5 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 "" @@ -1096,6 +1100,7 @@ msgid "cannot get host CPU capabilities" msgstr "No es posible obtener capacidades de la CPU del equipo" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Falló al abrir '%s'" diff --git a/po/et.po b/po/et.po index bd5d59f..ac80bd1 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/eu_ES.po b/po/eu_ES.po index 3939c44..7d59966 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/fa.po b/po/fa.po index dba48be..2ef1b2a 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/fi.po b/po/fi.po index 2e487f7..2fc4258 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/fr.po b/po/fr.po index 4e46d32..290d834 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 "" @@ -1095,6 +1099,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/gl.po b/po/gl.po index 7e089a0..469411d 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/gu.po b/po/gu.po index fea7041..497f2e8 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 "" @@ -1106,6 +1110,7 @@ msgid "cannot get host CPU capabilities" msgstr "યજમાન CPU ક્ષમતાઓને મેળવી શકાતુ નથી" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' ને ખોલવામાં નિષ્ફળતા" diff --git a/po/he.po b/po/he.po index e236131..29f1d0d 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/hi.po b/po/hi.po index d918984..cb3ceb2 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 "" @@ -1085,6 +1089,7 @@ msgid "cannot get host CPU capabilities" msgstr "मेजबान CPU क्षमता पाने में विफल" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' खोलने में विफल" diff --git a/po/hr.po b/po/hr.po index 3dda86b..bcee6a8 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 "" @@ -1049,6 +1053,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/hu.po b/po/hu.po index f0cd18f..6129e8d 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 "" @@ -1049,6 +1053,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/hy.po b/po/hy.po index 182b4ef..e83a01d 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/id.po b/po/id.po index 97578be..0c207c5 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 "" @@ -1050,6 +1054,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/is.po b/po/is.po index 321b801..1a701d3 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/it.po b/po/it.po index 5e52e2f..d836aac 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 "" @@ -1062,6 +1066,7 @@ msgid "cannot get host CPU capabilities" msgstr "impossibile ottenere le funzioni della CPU dell'host" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Impossibile aprire '%s'" diff --git a/po/ja.po b/po/ja.po index 52c8b86..4a3930d 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 "" @@ -1112,6 +1116,7 @@ msgid "cannot get host CPU capabilities" msgstr "ホスト CPU ケイパビリティを取得できません" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' を開けませんでした" diff --git a/po/ka.po b/po/ka.po index 51fb83d..a0cf436 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/kn.po b/po/kn.po index 74589ab..0900a33 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 "" @@ -1093,6 +1097,7 @@ msgid "cannot get host CPU capabilities" msgstr "ಆತಿಥೇಯ CPU ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' ಅನ್ನು ತೆರೆಯುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ" diff --git a/po/ko.po b/po/ko.po index 06c5f63..7a988f2 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 브릿지에 예약되어 있습니다" @@ -1075,6 +1079,7 @@ msgid "cannot get host CPU capabilities" msgstr "호스트 CPU 기능을 가져올 수 없습니다" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' 열기 실패" diff --git a/po/ku.po b/po/ku.po index 0ca4331..6274c62 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/libvirt.pot b/po/libvirt.pot index d8c9a4d..2256a7c 100644 --- a/po/libvirt.pot +++ b/po/libvirt.pot @@ -1048,6 +1048,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/lo.po b/po/lo.po index ee3285c..f3f7ed6 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/lt.po b/po/lt.po index 3547478..b0fbd41 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/lv.po b/po/lv.po index da15417..af7c5d6 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/mk.po b/po/mk.po index bca6175..5ca76c0 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 "" @@ -1050,6 +1054,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/ml.po b/po/ml.po index a316f8f..83a036a 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 "" @@ -1098,6 +1102,7 @@ msgid "cannot get host CPU capabilities" msgstr "ഹോസ്റ്റ് സിപിയു വിശേഷതകള് ലഭ്യമാക്കുവാന് സാധ്യമല്ല" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' തുറക്കുന്നതില് പരാജയപ്പെട്ടു" diff --git a/po/mr.po b/po/mr.po index 4feb3ca..32e2db0 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 ब्रिजकरिता" @@ -1105,6 +1109,7 @@ msgid "cannot get host CPU capabilities" msgstr "यजमान CPU क्षमता प्राप्त करणे अशक्य" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' उघडणे अपयशी" diff --git a/po/ms.po b/po/ms.po index f3dd1e7..610f5ff 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/my.po b/po/my.po index 92a4af8..e7141f6 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/nb.po b/po/nb.po index ff77e7c..8dfa234 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 "" @@ -1049,6 +1053,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/nl.po b/po/nl.po index f906e10..2f104ca 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 "" @@ -1063,6 +1067,7 @@ msgid "cannot get host CPU capabilities" msgstr "kan host CPU mogelijkheden niet verkrijgen" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Openen van '%s' mislukte" diff --git a/po/nn.po b/po/nn.po index 1fdb298..2bb9278 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/nso.po b/po/nso.po index ca73df5..cbb1b23 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/or.po b/po/or.po index 4f99a8b..893654c 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 "" @@ -1069,6 +1073,7 @@ msgid "cannot get host CPU capabilities" msgstr "ହୋଷ୍ଟ CPU କ୍ଷମତା ପାଇବାରେ ବିଫଳ" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' କୁ ଖୋଲିବାରେ ବିଫଳ" diff --git a/po/pa.po b/po/pa.po index 9f8c9d9..41ca868 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 "" @@ -1088,6 +1092,7 @@ msgid "cannot get host CPU capabilities" msgstr "ਹੋਸਟ CPU ਅਨੁਕੂਲਤਾ ਲੈ ਨਹੀਂ ਸਕਦਾ" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' ਨੂੰ ਖੋਲਣ ਵਿੱਚ ਫੇਲ" diff --git a/po/pl.po b/po/pl.po index fb7e20c..e6b097f 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 "" @@ -1065,6 +1069,7 @@ msgid "cannot get host CPU capabilities" msgstr "nie można uzyskać możliwości procesora gospodarza" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Otwarcie \"%s\" nie powiodło się" diff --git a/po/pt.po b/po/pt.po index a5a1f50..50136bf 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index f261bbd..9c447e7 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 "" @@ -1095,6 +1099,7 @@ msgid "cannot get host CPU capabilities" msgstr "não foi possível obter as capacidades de CPU do host" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "falha ao abrir \"%s\"" diff --git a/po/ro.po b/po/ro.po index b7efaf0..112a5c2 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/ru.po b/po/ru.po index 3b6b6a6..5ed58d7 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 "" @@ -1111,6 +1115,7 @@ msgid "cannot get host CPU capabilities" msgstr "не удалось получить возможности процессора узла" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Не удалось открыть «%s»" diff --git a/po/si.po b/po/si.po index 18f0dea..0392baf 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/sk.po b/po/sk.po index 8d55137..8f64178 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/sl.po b/po/sl.po index 9425c9d..b1304bc 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 "" @@ -1048,6 +1052,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/sq.po b/po/sq.po index 3a597d0..a86cbc9 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/sr.po b/po/sr.po index f54d52f..60470e3 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 "" @@ -1066,6 +1070,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/sr@latin.po b/po/sr@latin.po index c9ae98f..9707c55 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 "" @@ -1066,6 +1070,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/sv.po b/po/sv.po index 0a1e320..e790729 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 "" @@ -1053,6 +1057,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/ta.po b/po/ta.po index 61170be..df65011 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 பிரிட்ஜுக்காக ஒதுக்கப்பட்டது" @@ -1112,6 +1116,7 @@ msgid "cannot get host CPU capabilities" msgstr "புரவல CPU செயல்திறன்களைப் பெற முடியவில்லை" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s'ஐ திறக்க முடியவில்லை" diff --git a/po/te.po b/po/te.po index 2ad29f3..140c53e 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 "" @@ -1075,6 +1079,7 @@ msgid "cannot get host CPU capabilities" msgstr "హోస్టు CPU సామర్ధ్యాలను పొందలేక పోయింది" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "'%s' తెరుచుటకు విఫలమైంది" diff --git a/po/th.po b/po/th.po index 8d6c983..541e394 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/tr.po b/po/tr.po index 5502581..cccc779 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/uk.po b/po/uk.po index ba17e24..dfe4ef7 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" @@ -1116,6 +1120,7 @@ msgid "cannot get host CPU capabilities" msgstr "не вдалося визначити можливості процесора основної системи" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Не вдалося відкрити «%s»" diff --git a/po/ur.po b/po/ur.po index e15d614..0ebbb19 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/vi.po b/po/vi.po index 4974c2c..002ae15 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 "" @@ -1063,6 +1067,7 @@ msgid "cannot get host CPU capabilities" msgstr "không thể lấy các khả năng CPU chủ" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Thất bại khi mở '%s'" diff --git a/po/vi_VN.po b/po/vi_VN.po index 1e9af39..a7f1f15 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 "" @@ -1063,6 +1067,7 @@ msgid "cannot get host CPU capabilities" msgstr "không thể lấy các khả năng CPU chủ" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "Thất bại khi mở '%s'" diff --git a/po/zh_CN.po b/po/zh_CN.po index afc2e3b..8f93ae1 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 "" @@ -1081,6 +1085,7 @@ msgid "cannot get host CPU capabilities" msgstr "无法获取主机 CPU 功能" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "打开 '%s' 失败" diff --git a/po/zh_TW.po b/po/zh_TW.po index 812901c..1157ff9 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 "" @@ -1053,6 +1057,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" diff --git a/po/zu.po b/po/zu.po index 8a04324..e286519 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 "" @@ -1047,6 +1051,7 @@ msgid "cannot get host CPU capabilities" msgstr "" #: src/bhyve/bhyve_process.c:115 src/lxc/lxc_process.c:1179 +#: src/bhyve/bhyve_command.c:383 #, c-format msgid "Failed to open '%s'" msgstr "" -- 1.9.3

On Fri, Oct 24, 2014 at 04:28:15PM -0400, Conrad Meyer wrote:
Sponsored by: EMC / Isilon storage division
Signed-off-by: Conrad Meyer <conrad.meyer@isilon.com>
For future reference you can just drop any changes to po files. We manage translations & merging via a separate process, so we don't do patches for them. 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 :|
participants (3)
-
Conrad Meyer
-
Daniel P. Berrange
-
Roman Bogorodskiy