VMware (简体中文) - ArchWiki

# VMware (简体中文)

From ArchWiki
Jump to navigation Jump to search

相关文章

- Category:Hypervisors
- 在 VMware 中安装 Arch
- VirtualBox
- KVM
- QEMU
- Xen
- Moving an existing install into (or out of) a virtual machine

翻译状态： 本文是英文页面 VMware 的翻译，最后翻译时间：2017-08-18，点击这里可以查看翻译后英文页面的改动。

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

注意:

- 这篇文章适用于最新的 VMware 正式版，即 VMware Workstation Pro / Player 12.5.
- 对于旧版本的 VMware，建议安装本体后追加安装 vmware-patchAUR 包

## 安装

安装 依赖项:

- fuse2 - 提供 vmware-vmblock-fuse
- gksuAUR - 支持需要 root 权限的操作（比如内存分配、注册许可证等等）
- gtkmm - 支持 GUI
- linux-headers - 模块编译所需
- ncurses5-compat-libsAUR - 支持安装程序的 `--console` 选项
- libcanberra - 支持事件提示音

下载最新的 VMware Workstation Pro 或Player (或者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包)，而不是直接使用 `/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` 处是你的许可密钥。

Note: 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。

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

### 无法识别 USB 设备

提示： 可以通过 vmware-patchAUR 解决。

如果不使用#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

然后重新启动`vmware` systemd服务。

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

Note: 也许会需要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[broken link: 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_LIBS`为`yes`不起作用，或者在终端内执行`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 SpeedStep和AMD 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/`是空的话，删除它。

Category:

- Virtualization (简体中文)

Hidden category:

- Pages with broken package links