【发布时间】:2017-04-24 20:42:15
【问题描述】:
我正在研究一个使用 Java API 访问 VCenter 上的 VMWare 虚拟机的 Java 类。
Java API 允许我们连接到 VCenter,访问来宾 VM (CentOS7) 并列出目录中的文件,除了 /tmp 目录之外没有任何问题。
使用参考: 文档:GuestFileManager
// filePathToCheck = "/tmp/some-file-to-find.txt
ManagedObjectReference fileManager = ...; // GuestFileManager
ManagedObjectReference vmGuest = ...; // VirtualMachine
String fileToCheckName = FilenameUtils.getName(filePathToCheck); // -> some-file-to-find.txt
String guestDirectory = filePathToCheck.replace(fileToCheckName,""); // -> /tmp/
guestFiles = vimPort.listFilesInGuest(fileManager, vmGuest, auth, guestDirectory, null, null, null);
我正在使用 GuestFileManager.listFilesInGuest() 并发现对于 /tmp 以外的任何目录,我都可以列出目录中的文件,与它们在 ssh 会话中的显示完全相同。
使用 listFilesInGuest() 查看路径“/tmp”目录,我得到一个列表:
.
..
vmware-root (directory)
即使我的 ssh 会话显示:
.
..
finishedinstall
.font-unix
.ICE-unix
systemd-private-f2b5415058d14dbfa4306235d53fed88-vmtoolsd.service-QN0Muw
.Test-unix
.X11-unix
.XIM-unix
我在 vmware-root 上找到了它,它显示在
/tmp/systemd-private-f2b5415058d14dbfa4306235d53fed88-vmtoolsd.service-QN0Muw/tmp/vmware-root
导航到该文件夹会显示在 listFilesInGuest() 中找到的文件:
.
..
vmware-root
这很好,我们在真空中操作,但程序将需要从其他程序安装程序和接口读取、修改或执行临时目录中的文件,这些安装程序和接口使用“/tmp”目录而不是 VMWare 的隐藏位置。
我找不到任何有关重新配置 VMWare 工具的方法的文档,也找不到使用 API 进入 /tmp 目录的方法,我希望 SO 中的某个人会遇到并为此找到成功的路径VMWare 功能。
编辑:通过进一步的测试,我发现这个“特殊”的 tmp 目录只发生在 posix 中,Windows 上的 VMWareTools API 的导航方式与我在所有操作系统中的预期一样。
【问题讨论】:
-
尝试禁用私有 tmp 目录。 vmtoolsd 服务应该有一些设置文件。例如:upwork.link/apache2/…
-
@Icarus3 :你是对的,在 /usr/lib/systemd/system/vmtoolsd.service 中有一个地方设置 PrivateTmp=true 在工具安装期间设置。我进入了一个测试虚拟机并将设置更改为 PrivateTmp=false,重启后私有“tmp”目录消失了,对“/tmp”的引用可以正常工作。在 VMWare 工具安装和设置期间,此设置似乎不是可选的,因此需要使用此更改设置 VM 模板,或者需要使用配置脚本来完成。将您的评论变成答案,我会接受。
-
我也从 bbs.archlinux.org 找到了提示:“systemd-private-xxxxxx 目录是什么?”带有注释“它们是由 PrivateTmp=true(通常是 ntpd)的服务创建的。它们应该在 /usr/lib/tmpfiles.d/tmp.conf 中指定的时间(30默认天数)”
标签: java linux unix vmware-tools vix