diff options
| author | Douglas Deslauriers <Douglas.Deslauriers@vector.com> | 2025-04-29 11:30:02 -0400 |
|---|---|---|
| committer | Sharlatan Hellseher <sharlatanus@gmail.com> | 2026-08-14 11:07:36 +0100 |
| commit | 910e426076ea078bd8a2bed658999250e37d46c3 (patch) | |
| tree | a78ffcdefd75459292f778737ca26266867da8e4 /doc | |
| parent | 637a34743d87b25d39f4a6c685b52b49b703e59a (diff) | |
services: vmware-vmtoolsd: Add vmware-vmtoolsd service.
Reasoning on running these executables outside a VMWare hypervisor is
difficult, which mean we can't implement service tests in current state
of the art in upstream QEMU.
Essentially the first thing any `open-vm-tools' executable checks is
whether it is executing in a VMWare hypervisor via
`CPUID_VMWARE_HYPERVISOR_VENDOR_STRING' [1]. This would fail for any
machine not running inside VMWare.
Marionette evaluations in Guix use QEMU to run the virtual machines that
some tests run on. QEMU emulates and allow configuration of some CPUID
flags and vendor strings. It does not emulate the hypervisor flag, or
allow configuration of the hypervisor vendor flag, which would be
required for this program to run and output anything observable, other
than a non-zero exit code.
In the case someone added upstream QEMU support for custom CPUID
hypervisor flags and vendor strings, these executables would initialize
a log file, but could not test anything meaningful without a hypercall
interface. QEMU sort-of emulates such an interface when it is told to
act like the Xen hypervisor, but doesn't seem to support the required
`vmcall', `vmmcall', or `inl' x86 assembly instruction communication
mechanism between the host and guest.
The Linux KVM supports a limited set of hypercalls [2], but certainly
not the ones required for these executables, the same applies for
Hurd. Since the KVM project already has a functional serial interface
between the guest and host [3], it is a low possibility upstream would
want to greatly expand the `vmcall' hypercall support in any case.
An alternative path would be to add the `USE_VALGRIND' define when
compiling the `vmware-open-vm-tools' package, which skips the hypervisor
CPUID flag checking, but still would require proper hypercall support to
test anything useful. Additionally, this would require another package,
or perhaps a "testing" output of the `vmware-open-vm-tools' pacakge,
which would be a nearly entire duplicate of the executables and would be
used exclusively for whichever test is written.
1. <https://github.com/vmware/open-vm-tools/blob/stable-13.1.x/open-vm-tools/lib/vmCheck/vmcheck.c#L335>
2. <https://docs.kernel.org/virt/kvm/x86/hypercalls.html>
3. <https://linux-kvm.org/page/VMchannel_Requirements>
* gnu/services/virtualization.scm
(vmware-vmtoolsd-shepherd-service): new procedures.
(vmware-vmtoolsd-service-type): new service type
(vmware-vmtoolsd-configuration): new struct.
update copyright commentary.
* doc/guix.texi (Virtualization Services): document it.
Merges: guix/guix!5098
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/guix.texi | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 99cef6fce3c..c5fed97da08 100644 --- a/doc/guix.texi +++ b/doc/guix.texi | |||
| @@ -43751,6 +43751,33 @@ How often to run the node cleaning job. The default is once per day, at | |||
| 43751 | @end table | 43751 | @end table |
| 43752 | @end deftp | 43752 | @end deftp |
| 43753 | 43753 | ||
| 43754 | @defvar vmware-vmtoolsd-service-type | ||
| 43755 | @command{vmtoolsd} is a daemon from | ||
| 43756 | @url{https://github.com/vmware/open-vm-tools/, the VMWare open-vm-tools | ||
| 43757 | project} which provides for communication between the host and guest | ||
| 43758 | operating system. This service manages and runs that daemon. | ||
| 43759 | |||
| 43760 | It takes a @code{vmware-vmtoolsd-configuration} object. | ||
| 43761 | @end defvar | ||
| 43762 | |||
| 43763 | @deftp {Data Type} vmware-vmtoolsd-configuration | ||
| 43764 | |||
| 43765 | @table @asis | ||
| 43766 | @item @code{pid-file} (default: @code{"/var/run/vmware-vmtoolsd.pid"}) | ||
| 43767 | The @command{vmtoolsd} pid file. | ||
| 43768 | |||
| 43769 | @item @code{requires-xorg?} (default: @code{#f}) | ||
| 43770 | When @code{#t}, the @command{vmtoolsd} requires the xorg-server to be running | ||
| 43771 | before the command is started. This is the case for the @command{vmtoolsd} | ||
| 43772 | command from the @code{vmware-open-vm-tools-gtk} package. | ||
| 43773 | |||
| 43774 | @item @code{vmware-open-vm-tools} (default: @code{vmware-open-vm-tools}) | ||
| 43775 | The @code{vmware-open-vm-tools} package to use for the @command{vmtoolsd} | ||
| 43776 | command. | ||
| 43777 | |||
| 43778 | @end table | ||
| 43779 | @end deftp | ||
| 43780 | |||
| 43754 | @node Version Control Services | 43781 | @node Version Control Services |
| 43755 | @subsection Version Control Services | 43782 | @subsection Version Control Services |
| 43756 | 43783 | ||
