VMware (简体中文)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.png本页面需要更新翻译,内容可能已经与英文脱节。要贡献翻译,请访问简体中文翻译组Tango-preferences-desktop-locale.png

附注: please use the first argument of the template to provide more detailed indications.

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

注意:
  • 这篇文章时针对最新的VMware正式版,即VMware Workstation Pro 和Player 12.
  • 而对于旧版本,可以使用vmware-patchAUR

安装

安装 依赖项:

下载最新的VMware Workstation ProPlayer (或者beta版本,当可用时).

开始安装:

# sh VMware-edition-version.release.architecture.bundle
提示: Some other useful flags:
  • --eulas-agreed - Skip the EULAs
  • --console - Use the console UI.
  • -I, --ignore-errors - Ignore fatal errors.
  • --set-setting vmware-workstation serialNumber XXXXX-XXXXX-XXXXX-XXXXX-XXXXX - Set the serial number during install (good for scripted installs).
  • --required - Only ask mandatory questions (results in silent install when combined with --eulas-agreed and --console).


System service scripts directory设置为/etc/init.d (默认值)

注意: 安装过程中会收到"No rc*.d style init script directories"错误。这可以安全忽略,因为Arch使用的是systemd.
提示: 从终端上(重新)构建模块,使用:
# vmware-modconfig --console --install-all

配置

提示: AUR 中也包含了一个叫做 vmware-patchAUR 的软件包会自动完成本节内容(它同时支持旧版本的 VMware )。

VMware module模块补丁和安装

注意: Due to Workstation 12 taking advantage of the mainlined kernel modules, patching the VMCI/VSOCK sources is no longer required.

VMware Workstation 12 支持内核 4.2.

Systemd 服务

”(可选)“ 你也可以创建一个 .service 文件 (也可以用AUR中的vmware-systemd-servicesAUR包),而不是直接使用 /etc/init.d/vmware (start|stop|status|restart) and /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

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

启动程序

启动VMware Workstation Pro:

$ vmware

或VMware Player (Pro):

$ 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

Extracting the installer

To view the contents of the installer .bundle:

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

使用修改过的 BIOS

If and when you decide to modify the extracted BIOS you can make your virtual machine use it by moving it to ~/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"

写时复制 (CoW)

CoW comes with some advantages, but can negatively affect performance with large files that have small random writes (例如数据库文件和虚拟机镜像):

$ chattr +C ~/vmware/<Virtual machine name>/<Virtual machine name>.vmx
Note: From the chattr man page: "For btrfs, the C flag should be set only on new or empty files. If set on a file which already has data blocks, it is undefined when the blocks assigned to the file will be fully stable. If set on a directory, only new files will be affected."

使用 DKMS 管理模块

The Dynamic Kernel Module Support (DKMS) can be used to manage Workstation modules and to void from re-running vmware-modconfig each time the kernel changes. The following example uses a custom Makefile to compile and install the modules through vmware-modconfig. Afterwards they are removed from the current kernel tree.

准备

首先从 Community repository 安装 dkms

# pacman -S dkms

然后为 Makefiledkms.conf 创建源目录:

# mkdir /usr/src/vmware-modules-11/

Build configuration

Fetch the files from Git or use the ones below.

1) 使用 Git
$ cd /tmp
$ git clone git://github.com/bawaaaaah/dkms-workstation.git
$ sed -i 's/9/11/' dkms-workstation/dkms.conf
# cp dkms-workstation/Makefile dkms-workstation/dkms.conf /usr/src/vmware-modules-11/
2) 手动安装

The dkms.conf describes the module names and the compilation/installation procedure. AUTOINSTALL="yes" tells the modules to be recompiled/installed automatically each time:

/usr/src/vmware-modules-11/dkms.conf
PACKAGE_NAME="vmware-modules"
PACKAGE_VERSION="11"

MAKE[0]="make all"
CLEAN="make clean"

BUILT_MODULE_NAME[0]="vmmon"
BUILT_MODULE_LOCATION[0]="modules"

BUILT_MODULE_NAME[1]="vmnet"
BUILT_MODULE_LOCATION[1]="modules"

BUILT_MODULE_NAME[2]="vmblock"
BUILT_MODULE_LOCATION[2]="modules"

BUILT_MODULE_NAME[3]="vmci"
BUILT_MODULE_LOCATION[3]="modules"

BUILT_MODULE_NAME[4]="vsock"
BUILT_MODULE_LOCATION[4]="modules"

DEST_MODULE_LOCATION[0]="/extra/vmware"
DEST_MODULE_LOCATION[1]="/extra/vmware"
DEST_MODULE_LOCATION[2]="/extra/vmware"
DEST_MODULE_LOCATION[3]="/extra/vmware"
DEST_MODULE_LOCATION[4]="/extra/vmware"

AUTOINSTALL="yes"

and now the Makefile:

/usr/src/vmware-modules-11/Makefile
KERNEL := $(KERNELRELEASE)
HEADERS := /usr/lib/modules/$(KERNEL)/build/include
GCC := $(shell vmware-modconfig --console --get-gcc)
DEST := /lib/modules/$(KERNEL)/vmware

TARGETS := vmmon vmnet vmblock vmci vsock

LOCAL_MODULES := $(addsuffix .ko, $(TARGETS))

all: $(LOCAL_MODULES)
	mkdir -p modules/
	mv *.ko modules/
	rm -rf $(DEST)
	depmod

$(HEADERS)/linux/version.h:
	ln -s $(HEADERS)/generated/uapi/linux/version.h $(HEADERS)/linux/version.h

%.ko: $(HEADERS)/linux/version.h
	vmware-modconfig --console --build-mod -k $(KERNEL) $* $(GCC) $(HEADERS) vmware/
	cp -f $(DEST)/$@ .

clean: rm -rf modules/

安装

The modules can then be installed with:

# dkms install vmware-modules/11 -k $(uname -r)

Enable 3D graphics on Intel and Optimus

Some graphics drivers are blacklisted by default, due to poor and/or unstable 3D acceleration. After enabling Accelerate 3D graphics, the log may show something like:

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

This means the following:

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

疑难解答

/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 服务章节

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

安装 linux-headers

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

无法识别 USB 设备

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


如果不使用systemd service来处理服务,you need to manually start the vmware-usbarbitrator binary as root each time.

启动:

# vmware-usbarbitrator

停止:

# vmware-usbarbitrator --kill

The installer fails to start

If you just get back to the prompt when opening the .bundle, then you probably have a deprecated or broken version of the VMware installer and you should remove it (you may also refer to the uninstallation section of this article):

# rm -r /etc/vmware-installer

无法为Guests下载VMware Tools

If after #Preventing crashes and freezes when checking for updates you are still unable to download the VMware Tools ISOs, you may either try running vmware or vmplayer as root, or downloading them directly from the VMware repository.

Navigate to: "application name / version / build ID / linux / packages/" and download the appropriate Tools.

Extract with:

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

And install using the VMware installer:

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

Incorrect login/password when trying to access VMware remotely

VMware Workstation 9 provides the possibility to remotely manage Shared VMs through the vmware-workstation-server service. However, this will fail with the error "incorrect username/password" due to incorrect PAM configuration of the vmware-authd service. To fix it, edit /etc/pam.d/vmware-authd like this:

/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

and restart VMware services with:

# systemctl restart vmware

Now you can connect to the server with the credentials provided during the installation.

Note: libxslt may be required for starting virtual machines.

Issues with ALSA output

To fix sound quality issues or enabling proper HD audio output, first run:

$ aplay -L

If interested in playing 5.1 surround sound from the guest, look for surround51:CARD=vendor_name,DEV=num, if experiencing quality issues, look for front:CARD=vendor_name,DEV=num. Finally put the name in the .vmx:

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

OSS emulation should also be disabled.

Kernel-based Virtual Machine (KVM) is running

To disable KVM on boot, you can use something like:

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

Segmentation fault at startup due to old Intel microcode

Old Intel microcode may result in the following kind of segmentation fault at startup:

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

Install intel-ucode and make /boot/intel-ucode.img to be loaded by the bootloader.

See Microcode for more information.

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

This is due to incomplete support of power management features (Intel SpeedStep and AMD PowerNow!/Cool'n'Quiet) in VMware Linux that vary the CPU frequency. In March 2012, with the release of linux 3.3-1 the maximum frequency Performance governor was replaced with the dynamic Ondemand. When the host CPU frequency changes, the Guest system clock runs too quickly or too slowly, but may also render the whole Guest unbootable.

To prevent this, the maximum host CPU frequency can be specified, and Time Stamp Counter (TSC) disabled, in the global configuration:

/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.
Tip: To periodically correct the time (once per minute), in the Options tab of VMware Tools, enable: "Time synchronization between the virtual machine and the host operating system".

Guests系统启动后网络不可用

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

卸载

To uninstall VMware you need the product name (vmware-workstation 或是 vmware-player)。列出所有的产品:

# vmware-installer -l

and uninstall with (--required skips the confirmation):

# vmware-installer -u product --required
Tip: Use --console for the console UI.

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

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

你可能还想看看剩余模块在/usr/lib/modules/kernel_name/misc/模块目录.