VMware (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 VMware翻译。上次翻译日期:2017-08-18。如果英文版本有所更改,则您可以帮助同步翻译。

本文是关于在 Arch 中安装 VMware,你也许想寻找的是 在 VMware 中安装 Arch Linux

注意:
  • 这篇文章适用于最新的 VMware 正式版,即 VMware Workstation Pro / Player 12.5.
  • 对于旧版本的 VMware,建议安装本体后追加安装 vmware-patchAUR[损坏的链接:package not found]

安装

安装 依赖项:

下载最新的 VMware Workstation ProPlayer (或者beta版,如果有的话)。

开始安装:

# sh VMware-edition-version.release.architecture.bundle
提示: 一些常用的选项:
  • --eulas-agreed - 跳过各种许可协议
  • --console - 使用命令行界面,而非 GUI
  • --custom - 允许自定义安装目录,比如/usr/local(记得修改#Systemd 服务一节下,vmware-usbarbitrator.service中的路径)
  • -I, --ignore-errors - 忽略致命错误
  • --set-setting=vmware-workstation serialNumber XXXXX-XXXXX-XXXXX-XXXXX-XXXXX - 设置安装时使用的序列号(有利于脚本化安装)
  • --required - 只询问必要的问题(当结合--eulas-agreed--console时可以实现静默安装)

当安装程序询问 System service scripts directory 的设置时,输入 /etc/init.d 即可。

注意: 安装过程中会收到"No rc*.d style init script directories"错误。这可以安全忽略,因为Arch使用的是systemd.
提示: 如需重新编译模块,用这条命令:
# vmware-modconfig --console --install-all

配置

内核模块

VMware Workstation 12.5 最高支持内核 4.8.

Systemd 服务

(可选) 你也可以创建一个 .service 文件 (也可以用AUR中的vmware-systemd-servicesAUR[损坏的链接:package not found]包),而不是直接使用 /etc/init.d/vmware (start|stop|status|restart) 和 /usr/bin/vmware-usbarbitrator 来管理服务:

/etc/systemd/system/vmware.service
[Unit]
Description=VMware daemon
Requires=vmware-usbarbitrator.service
Before=vmware-usbarbitrator.service
After=network.target

[Service]
ExecStart=/etc/init.d/vmware start
ExecStop=/etc/init.d/vmware stop
PIDFile=/var/lock/subsys/vmware
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
/etc/systemd/system/vmware-usbarbitrator.service
[Unit]
Description=VMware USB Arbitrator
Requires=vmware.service
After=vmware.service

[Service]
ExecStart=/usr/bin/vmware-usbarbitrator
ExecStop=/usr/bin/vmware-usbarbitrator --kill
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

如果你想在另一个Workstation服务器控制台上连接此次安装的VMware Workstation,请添加下面的服务

/etc/systemd/system/vmware-workstation-server.service
[Unit]
Description=VMware Workstation Server
Requires=vmware.service
After=vmware.service

[Service]
ExecStart=/etc/init.d/vmware-workstation-server start
ExecStop=/etc/init.d/vmware-workstation-server stop
PIDFile=/var/lock/subsys/vmware-workstation-server
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

之后您就可以在启动时enable它们.

Workstation Server服务

服务vmware-workstation-server.service将调用wssc-adminTool,即使后者已经被重命名作vmware-wssc-adminTool.

这将阻止该服务启动。创建一个文件链接可以修复这个问题:

# ln -s wssc-adminTool /usr/lib/vmware/bin/vmware-wssc-adminTool

启动程序

启动VMware Workstation Pro:

$ vmware

或Player:

$ vmplayer

提示和技巧

输入Workstation Pro许可密钥

从终端

# /usr/lib/vmware/bin/vmware-vmx-debug --new-sn XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

XXXXX-XXXXX-XXXXX-XXXXX-XXXXX 处是你的许可密钥。

注意: The -debug binary informs the user of an incorrect license.

从 GUI

如果以上方法无效,你可以试试:

# /usr/lib/vmware/bin/vmware-enter-serial

解压缩 VMware BIOS

$ objcopy /usr/lib/vmware/bin/vmware-vmx -O binary -j bios440 --set-section-flags bios440=a bios440.rom.Z
$ perl -e 'use Compress::Zlib; my $v; read STDIN, $v, '$(stat -c%s "./bios440.rom.Z")'; $v = uncompress($v); print $v;' < bios440.rom.Z > bios440.rom

解压缩安装程序

查看安装程序.bundle的内容:

$ sh VMware-edition-version.release.architecture.bundle --extract /tmp/vmware-bundle/

使用修改过的 BIOS

如果你决定修改解压出的BIOS,你可以通过将其移动至~/vmware/<Virtual machine name>来让虚拟机使用它:

$ mv bios440.rom ~/vmware/Virtual_machine_name/

然后在 <Virtual machine name>.vmx 文件中加入它的名称:

~/vmware/Virtual_machine_name/Virtual_machine_name.vmx
bios440.filename = "bios440.rom"

在Intel和Optimus上启用3D图形

由于不理想和(或)不稳定的3D加速,某些图形驱动是默认被阻止的。当启用Accelerate 3D graphics后,log中应该会出现:

Disabling 3D on this host due to presence of Mesa DRI driver.  Set mks.gl.allowBlacklistedDrivers = TRUE to override.

这表示:

~/.vmware/preferences
mks.gl.allowBlacklistedDrivers = TRUE

疑难解答

错误:Kernel headers for version 4.x-xxxx were not found. If you installed them[...]

安装 linux-headers

注意: 更新内核和头文件会需要你启动新的内核以匹配头文件的版本。这是一个相对常见的错误。

无法识别 USB 设备

提示: 可以通过 vmware-patchAUR[损坏的链接:package not found] 解决。

如果不使用#Systemd 服务来处理服务,你每次都需要以root身份手动启动vmware-usbarbitrator.

启动:

# vmware-usbarbitrator

停止:

# vmware-usbarbitrator --kill

当远程访问VMware时,遇到不正确的用户名/密码错误

VMware Workstation通过vmware-workstation-server服务来提供远程管理共享的虚拟机的功能。然而,这将以错误"incorrect username/password"而告终,因为vmware-authd服务中,PAM的相关配置出错了。通过编辑/etc/pam.d/vmware-authd来解决问题:

/etc/pam.d/vmware-authd
#%PAM-1.0
auth     required       pam_unix.so
account  required       pam_unix.so
password required       pam_permit.so
session  required       pam_unix.so

然后重新启动vmwaresystemd服务。

现在你能通过安装时提供的身份信息来登录这个服务器了。

注意: 也许会需要libxslt来启动虚拟机

ALSA输出的问题

修复音质问题或正确启用高清音频输出。首先执行:

$ aplay -L

如果希望在客户机中播放5.1 立体声,寻找surround51:CARD=vendor_name,DEV=num;如果存在音质问题,寻找front:CARD=vendor_name,DEV=num。最后将名称加入到.vmx文件中:

~/vmware/Virtual_machine_name/Virtual_machine_name.vmx
sound.fileName="surround51:CARD=Live,DEV=0"
sound.autodetect="FALSE"

OSS模拟也应该被禁用.

错误:Kernel-based Virtual Machine (KVM) is running

禁止KVM自动启动,你可以:

/etc/modprobe.d/vmware.conf
blacklist kvm
blacklist kvm-amd   # For AMD CPUs
blacklist kvm-intel # For Intel CPUs

组件问题

错误:/dev/vmmon not found

完整的错误是:

Could not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module `vmmon' is loaded.

这意味着未加载vmmon模块.参见#Systemd 服务章节

错误:/dev/vmci not found

完整的错误是:

Failed to open device "/dev/vmci": No such file or directory
Please make sure that the kernel module 'vmci' is loaded.

尝试重新编译VMware内核模块:

# vmware-modconfig --console --install-all

在Linux 4.9后内核模块无法编译

对于VMware Workstation Pro 12.5.2,模块的源码必须作出修改,以便于在Linux 4.9上编译 [1]

# cd /usr/lib/vmware/modules/source
# tar xf vmmon.tar
# mv vmmon.tar vmmon.old.tar
# sed -i 's/uvAddr, numPages, 0, 0/uvAddr, numPages, 0/g' vmmon-only/linux/hostif.c
# tar cf vmmon.tar vmmon-only
# rm -r vmmon-only
# tar xf vmnet.tar
# mv vmnet.tar vmnet.old.tar
# sed -i 's/addr, 1, 1, 0/addr, 1, 0/g' vmnet-only/userif.c
# tar cf vmnet.tar vmnet-only
# rm -r vmnet-only

VMware模块在Linux内核4.11+上(在GCC7下)编译失败

运行vmware-modconfig时返回:

Failed to get gcc information.

详细的错误信息能在日志中被找到:

modconfig| I125: Got gcc version "6.3.1".
modconfig| I125: GCC major version 6 does not match Kernel GCC major version 7.
modconfig| I125: The GCC compiler "/sbin/gcc" cannot be used for the target kernel.

为跳过检查,使用下面的解决方案:

# sed 's/gcc version 7/gcc version 6/' /proc/version > /tmp/version
# mount --bind /tmp/version /proc/version
# vmware-modconfig --console --install-all
# umount /proc/version && rm /tmp/version

VMware 模块在 Linux 4.13 版内核上编译失败

VMware Workstation Pro 12.5.7 版本的内核模块代码需要做出一定修改,才能够成功地为 4.13 版 Linux 内核编译。出处:[2]

# cd /usr/lib/vmware/modules/source
# tar xf vmnet.tar
# mv vmnet.tar vmnet.old.tar
# sed -i 's/atomic_inc(&clone->users);/clone = skb_get(clone);/g' vmnet-only/bridge.c
# tar cf vmnet.tar vmnet-only
# rm -r vmnet-only

安装程序启动失败

如果你回到了执行.bundle时的终端提示,则这个版本的VMware Installer也许坏掉了或者不完整,你应该删掉它(你也许也应该参照#卸载一节中的内容):

# rm -r /etc/vmware-installer

用户界面初始化失败

你也许会看到这样的错误:

Extracting VMware Installer...done.
No protocol specified
No protocol specified
User interface initialization failed.  Exiting.  Check the log for details.

这可以通过安装ncurses5-compat-libsAUR或者临时允许X拥有root权限来解决:

$ xhost +
$ sudo ./<vmware filename>.bundle
$ xhost -

VMware启动失败

旧的Intel微指令在启动时产生段错误

旧的Intel微指令可能会在启动时产生这样的段错误:

/usr/bin/vmware: line 31: 4941 Segmentation fault "$BINDIR"/vmware-modconfig --appname="VMware Workstation" --icon="vmware-workstation"

参阅Microcode了解如何更新微指令

版本号为12.5.4的vmplayer/vmware无法启动

[3]中所述,临时的解决方案是将包libpng降级至1.6.28-1版本,并将其加入IgnorePkg参数以忽略升级(参见/etc/pacman.conf)。

更方便的解决方案是令VMware使用系统的zlib而不是它自己的:

# cd /usr/lib/vmware/lib/libz.so.1
# mv libz.so.1 libz.so.1.old
# ln -s /usr/lib/libz.so.1 .

版本号为12.5.3-12.5.5的vmplayer/vmware无法启动

这貌似是文件/usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6中的问题,CXXABI_1.3.8缺失。

如果系统安装了gcc-libs或者gcc-libs-multilib[损坏的链接:replaced by gcc-libs],那个库就已经被安装了。因此,直接移除那个出错的文件将使vmplayer使用gcc-libs提供的版本。使用root执行:

# mv /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6 /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6.bak

同时有另一个解决方案:

# export VMWARE_USE_SHIPPED_LIBS='yes'

vmware 12的进程在启动之后立即终止,没有显示GUI

这是Mageia中已知的Bug,但是对于Arch,终端里似乎并没有任何错误信息输出。检阅位于/tmp/vmware-<id>里的日志文件,会发现启动vmware或vmplaer后,产生了VMWARE_SHIPPED_LIBS_LIST is not set, VMWARE_SYSTEM_LIBS_LIST is not set, VMWARE_USE_SHIPPED_LIBS is not set, VMWARE_USE_SYSTEM_LIBS is not set问题。进程在Unable to execute /usr/lib/vmware/bin/vmware-modconfig.后结束。解决方案是,以root身份执行:

# mv /etc/vmware/icu/icudt44l.dat /etc/vmware/icu/icudt44l.dat.bak

同时有另一个解决方案:

# export VMWARE_USE_SHIPPED_LIBS='yes'

如果在版本12.5.7上出现问题,并且移动icudt44l.dat或者设置VMWARE_USE_SHIPPED_LIBSyes不起作用,或者在终端内执行vmplayer无输出,尝试以root权限执行:

# cd /usr/lib/vmware/lib/libz.so.1
# mv libz.so.1 libz.so.1.old
# ln -s /usr/lib/libz.so.1 .

尽管设置了VMWARE_USE_SHIPPED_LIBS变量,VMware仍有可能找不到某些库文件,比如libfontconfig.so.1。查看VMware位于tmp目录中的日志来检查哪些库文件未被找到,并将对应的系统库文件拷贝至合适的路径:

# cp /usr/lib/libfontconfig.so.1 /usr/lib/vmware/lib/libfontconfig.so.1/

客户机问题

无法为客户机下载VMware Tools

访问VMware repository来手动下载这些工具。

导航至:"application name / version / build ID / linux / packages/"来下载合适的工具。

解压:

$ tar -xvf vmware-tools-name-version-buildID.x86_64.component.tar

并通过VMware安装程序安装:

# vmware-installer --install-component=/path/vmware-tools-name-version-buildID.x86_64.component

如果上述步骤不管用,尝试安装ncurses5-compat-libsAUR

错误:Guests have incorrect system clocks or are unable to boot: "[...]timeTracker_user.c:234 bugNr=148722"

这是由于在VMware Linux中不完整的对电源管理功能的支持导致的CPU频率的变化(Intel SpeedStepAMD PowerNow!/Cool'n'Quiet)。2012年,随着linux 3.3-1的发布,最大CPU频率Performance的管理者被动态的Ondemand替代。当宿主的CPU频率变化时,客户机的时钟会运行过快或过慢,同时也可能会导致客户机无法启动。

为规避该问题,宿主CPU的最高频率可以被指定,并禁用时间戳计数器(TSC)。在整体设置中:

/etc/vmware/config
host.cpukHz = "X"  # The maximum speed in KHz, e.g. 3GHz is "3000000".
host.noTSC = "TRUE" # Keep the Guest system clock accurate even when
ptsc.noTSC = "TRUE" # the time stamp counter (TSC) is slow.
提示: 若要每隔一分钟修正一次时钟,在VMware Tools下的Options选项卡中,启用: "Time synchronization between the virtual machine and the host operating system".

Guests系统启动后网络不可用

这可能是 vmnet 模块没有加载 [4]。又见#Systemd 服务自动加载。

卸载

为卸载VMware你首先需要知道产品名称(vmware-workstation 或是 vmware-player)。列出所有的产品:

# vmware-installer -l

然后通过下面的指令卸载(使用--required跳过所有的确认):

# vmware-installer -u product --required
提示: 加上--console来使用终端UI

记得要disable和删除.service文件:

# rm /etc/systemd/system/vmware.service
# rm /etc/systemd/system/vmware-usbarbitrator.service

你可能还需要清理在/usr/lib/modules/kernel_name/misc/下的冗余文件,并且如果目录/etc/init.d/是空的话,删除它。