【问题标题】:Error installing vmware-tools 9.9 after upgrade to linux-image-3.13.0-46升级到 linux-image-3.13.0-46 后安装 vmware-tools 9.9 时出错
【发布时间】:2015-04-19 04:37:16
【问题描述】:

将我的客户 ubuntu 升级到 linux-image-3.13.0-46 后,安装 vmware-tools 时出现错误,我无法再共享文件夹。

我在 Windows 8 和 Ubuntu 14.04 LTS 主机上都运行了 vmware player 7.0.0 build-2305329,在安装过程中出现以下错误注销:

                 from /tmp/modconfig-NVbKuD/vmhgfs-only/inode.c:29:
include/linux/kernel.h:793:27: error: ‘struct dentry’ has no member named ‘d_alias’
  const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                           ^

这个问题有解决办法吗?

谢谢

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,并建议您在serverfault.comunix.stackexchange.comsuperuser.com 上提问!

标签: linux ubuntu-14.04 vmware-player vmware-tools


【解决方案1】:

vmware-tools-distrib-9.9.2-2496486:

我已通过转到 vmhgfs.tar 所在的目录(在我的情况下为 /usr/lib/vmware-tools/modules/source),解压缩 tar 并手动编辑 inode.c 来解决此问题。

在第 1925 行(只需搜索“d_alias”即可找到确切的行),您需要添加一个 if。最后看起来是这样的:

#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
                           d_alias) {
#else
                           d_u.d_alias) {
#endif

然后在 1983 行左右(再次搜索“d_alias”):

#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
         struct dentry *dentry = list_entry(pos, struct dentry, d_alias);
#else
         struct dentry *dentry = list_entry(pos, struct dentry, d_u.d_alias);
#endif

警告:不确定内核版本,但我已将 3,13,0 放在那里,尽管我的 Ubuntu 报告:

# uname -a
Linux md-ubuntu 3.13.0-46-generic #76-Ubuntu SMP Thu Feb 26 18:52:13 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

这在 3.13.0-45 上运行良好。

因此,如果您降级内核,上述 hack 可能无法正常工作。

然后你需要再次打包 tar 存档(只需将旧的移开:

# mv vmhgfs.tar vmhgfs.tar.orig

然后再次打包目录:

# tar cvf vmhgfs.tar vmhgfs-only

)

希望对你有帮助。

【讨论】:

  • 在 VMWare Workstation 11.1.0 和 Linux linux6405 3.13.0-46-generic #76-Ubuntu SMP Thu Feb 26 18:52:13 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 上工作
  • 它在 VMWare Fusion 6.0.5(在 MacBook Pro 上)上为我工作。谢谢!
  • 在 VMwareTools-9.9.0-2304977.tar.gz 中,在 Linux ubuntu 3.16.0-31-generic 上,每次运行安装脚本时似乎都会重新创建 vmhgfs.tar .因此,您必须仔细监控交互式安装中何时创建 tar,一旦创建了 tar,进行更改,然后继续交互式安装脚本...
  • @xwl - 我从不使用交互式安装脚本。我曾经解压VMwareTools* tar 文件,然后将cd 解压到它的目录中(在我的机器上称为vmware-tools-distrib)并运行vmware-install.pl 脚本
  • 在 VMware 10、VMwareTools-9.6.2-1688356 和 Linux 3.13.0-46-generic #77-Ubuntu 上,它对我有用。除了我在 1903 行只有一次更改而不是 2 次。
【解决方案2】:

This 补丁应该可以解决问题。

编辑 Working Gist patch

使用说明:

cd vmware-tools-distrib/lib/modules/source/
tar -xvf vmhgfs.tar
cd vmhgfs-only
patch inode.c < inode.patch
cd ..
mv vmhgfs.tar vmhgfs.tar.orig
tar cvf vmhgfs.tar vmhgfs-only
cd vmware-tools-distrib
sudo ./vmware-install.pl

【讨论】:

  • 我关注了Quick Start,但它并没有解决问题。当我应用补丁时,我看到一条消息 *** Skipping vmhgfs/vmhgfs-d_count-kernel-3.11-tools-9.6.0.patch: did not apply cleanly
  • 你能尝试在没有任何包装器的情况下应用这个补丁并告诉精确的输出吗?将 vmhgfs-d_count-kernel-3.11-tools-9.6.0.patch 复制到 vmhgfs 文件夹,cd 到它并运行 'patch -p1
  • 补丁好像与VMwareTools-9.9.0-2304977.tar.gz File inode.c is read-only; trying to patch anyway patching file inode.c Hunk #1 succeeded at 31 with fuzz 1. Hunk #2 FAILED at 1893. Hunk #3 FAILED at 1946. 2 out of 3 hunks FAILED -- saving rejects to file inode.c.rej的inode.c不匹配
  • 好的,让我们采取另一种方法。您可以在编译期间创建一个带有完整错误跟踪的要点吗?以“来自/tmp/modconfig-NVbKuD/vmhgfs-only/inode.c:29:”结尾的那个
  • Here 是 update-and-patch-and-compile.sh 错误日志的要点。我还添加了手动运行补丁命令创建的 icon.c.orig、icon.c 和 icon.c.rej。该错误在 icon.c 的第 29 行显示了一个问题,该问题在第一次补丁更改之前(第 31 行),因此该补丁可能无法解决问题。
【解决方案3】:

对于 VMWare Fusion,该错误已在 7.1.2 版本 [1] 中修复。 vmware-tools 的版本是 9.9.3。

[1] VMware Fusion 7.1.2 发行说明https://www.vmware.com/support/fusion/doc/fusion-712-release-notes.html

【讨论】:

    【解决方案4】:

    VMware 支持并推荐 open-vm-tools 用于 Ubuntu。因此,如果您在使用 VMware Tools 时遇到问题,可以轻松安装 open-vm-tools。 希望能帮助到你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多