summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorDouglas Deslauriers <Douglas.Deslauriers@vector.com>2025-04-29 11:30:02 -0400
committerSharlatan Hellseher <sharlatanus@gmail.com>2026-08-14 11:07:36 +0100
commit910e426076ea078bd8a2bed658999250e37d46c3 (patch)
treea78ffcdefd75459292f778737ca26266867da8e4 /doc
parent637a34743d87b25d39f4a6c685b52b49b703e59a (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.texi27
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
43757project} which provides for communication between the host and guest
43758operating system. This service manages and runs that daemon.
43759
43760It 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"})
43767The @command{vmtoolsd} pid file.
43768
43769@item @code{requires-xorg?} (default: @code{#f})
43770When @code{#t}, the @command{vmtoolsd} requires the xorg-server to be running
43771before the command is started. This is the case for the @command{vmtoolsd}
43772command from the @code{vmware-open-vm-tools-gtk} package.
43773
43774@item @code{vmware-open-vm-tools} (default: @code{vmware-open-vm-tools})
43775The @code{vmware-open-vm-tools} package to use for the @command{vmtoolsd}
43776command.
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