VMware に Arch Linux をインストール
この記事では Player (Plus), Fusion, Workstation などの VMware 製品での Arch Linux のインストールを扱います。
目次
カーネルドライバー
vmw_balloon
- 物理メモリ管理ドライバー。物理ページを回収して膨らむ"バルーン"のように働き、ゲストのページを予約して無効にすることでホストマシンのページを開放して他のゲストに割り当てられるようにします。縮小させることでゲストが使用できる物理メモリを増やすことも可能です。開放された仮想マシンのメモリはゲストを終了することなくホストで再利用することができます。vmw_pvscsi
- VMware の Paravirtual SCSI (PVSCSI) HBA のドライバー。vmw_vmci
- Virtual Machine Communication Interface。VMCI 仮想デバイスによるホストと仮想環境のゲスト間での高速通信を有効にします。vsock
- Virtual Socket Protocol。TCP/IP ソケットプロトコルと似ていて、仮想マシンとハイパーバイザまたはホスト間での通信ができるようにします。vmw_vsock_vmci_transport
- 仮想ソケットの VMCI 転送の実装。vmwgfx
- 3D アクセラレーションのためのドライバー。VMware SVGA2 仮想ハードウェアのための KMS 有効済み DRM ドライバーです。vmxnet3
- VMware の vmxnet3 仮想イーサネット NIC のドライバー。open-vm-tools
10.0 から fuse ベースの hgfs 実装が追加されており、カーネルのバージョン 4.0 からサポートされています。
VMware Tools vs Open-VM-Tools
2007年に、VMware は VMware Tools の大部分を Open-VM-Tools として LGPL でリリースしました。別途 Arch Linux 用の公式 Tools はありません。
当初は VMware Tools が、時間同期などの機能がある、ネットワークやストレージに最適のドライバを提供していました。しかし現在では、ネットワークや scsi アダプターが linux カーネルの一部になったことで、VMware Tools には追加機能や"古い" vmxnet アダプターのサポートだけが求められるようになりました。
VMware Tools と Open-VM-Tools のどちらを使う場合でも xf86-video-vmware のインストールが必要です。
Open-VM-Tools
モジュール
open-vm-tools-dkmsAUR パッケージには以下のモジュールが含まれています:
vmblock
- ファイルシステムドライバー。ホストシステムとゲストマシン間のドラッグアンドドロップを有効にします (vmware-vmblock-fuse
ユーティリティが取って代わります)。vmci
- 仮想マシン通信インターフェイス (VMCI)、同じホストでの仮想マシン同士や仮想マシンとホスト間で高いパフォーマンスを発揮するインターフェイス。vmhgfs
- レガシーなファイルシステムドライバー。ホストシステムと仮想マシン間のファイル・ディレクトリ共有を有効にします。vsock
- VMCI ソケット。vmsync
- 実験的なファイルシステム同期ドライバ。バックアップやスナップショットの作成時にファイルシステムの静止を有効にします。vmxnet
- 古い VMXNET ネットワークアダプター用のドライバ。
ユーティリティ
open-vm-tools パッケージには以下のユーティリティが含まれています:
vmtoolsd
- 仮想マシンの状態レポートに反応するサービス。vmware-checkvm
- 仮想マシン上でプログラムが起動しているか確認するツール。vmware-toolbox-cmd
- 統計などのホストの仮想マシン情報を取得するツール。vmware-user-suid-wrapper
- ホストと仮想マシン間でクリップボード共有(コピーペースト)を有効にするツール。vmware-vmblock-fuse
- FUSE でホストと仮想マシン間のドラッグ&ドロップを有効にするユーティリティ。vmware-xferlogs
- ログやデバッグ情報を仮想マシンのログファイルに記録する。vmhgfs-fuse
- vmhgfs 共有フォルダをマウントするユーティリティ。
インストール
公式リポジトリから open-vm-tools を、AUR から open-vm-tools-dkmsAUR をインストールしてください。
Open-VM-Tools は /etc/arch-release
からバージョン情報を読み取りますが、空になっています:
# cat /proc/version > /etc/arch-release
マルチユーザーターゲット
multi-user.target
で起動する場合、以下の手順に従って下さい。graphical.target
で起動する場合は graphical.target
の方のセクションを見て下さい。
vmtoolsd
サービスを起動し、必要ならばブート時にそれを有効にしてください:
# systemctl start vmtoolsd # systemctl enable vmtoolsd
グラフィカルターゲット
グラフィカル環境を起動する場合、以下の手順に従って VMware ツールを有効化してください。
vmware-vmblock-fuse.service
Systemd サービスを有効化してください。
open-vm-tools-dkmsAUR をインストールした場合は dkms.service
Systemd サービスを有効化してください。カーネルのアップデート後に自動的にカーネルモジュールがリコンパイルされます。
上記の設定で上手く動作しない場合は gtkmm3 をインストールしてみてください。
ウィンドウのリサイズで解像度を更新
X の中から /usr/bin/vmware-user-suid-wrapper
を 起動 してください。
公式 VMware Tools
モジュール
vmblock
- ファイルシステムドライバー。ホストシステムとゲストマシン間のドラッグアンドドロップを有効にします (vmware-vmblock-fuse
ユーティリティが取って代わります)。vmci
- ホストとゲスト間のハイパフォーマンス通信インターフェイス。vmmon
- 仮想マシンモニター。vmnet
- ネットワークドライバー。vsock
- VMCI ソケット。
インストール (ゲストから)
依存パッケージをインストールしてください: base-devel (ビルド用), net-tools (インストーラが使用する ifconfig
用), linux-headers (カーネルヘッダー)。
インストーラを正しく動作させるために偽の init ディレクトリを作成:
# for x in {0..6}; do mkdir -p /etc/init.d/rc${x}.d; done
インストーラをマウント:
# mount /dev/cdrom /mnt
(/root
などに) 展開:
# tar xf /mnt/VMwareTools*.tar.gz -C /root
起動:
# perl /root/vmware-tools-distrib/vmware-install.pl
以下のビルドエラーは無視しても大丈夫です:
- VMNEXT 3 仮想ネットワークカード
- "Warning: This script could not find mkinitrd or update-initramfs and cannot remake the initrd file!"
- Fuse components not found on the system.
vmware-vmblock-fuse
systemd サービスを有効化:
# abs community/open-vm-tools # cp /var/abs/community/open-vm-tools/vmware-* /usr/lib/systemd/system # systemctl enable vmware-vmblock-fuse.service
仮想マシンを再起動:
# systemctl reboot
ログインして VMware Tools を起動:
# /etc/init.d/rc6.d/K99vmware-tools start
Xorg の設定
依存パッケージをインストールしてください: xf86-input-vmmouse, xf86-video-vmware, mesa。
graphical target
で起動している場合ほとんど完了です。/etc/xdg/autostart/vmware-user.desktop
が実行されて、仮想マシンでする必要があることはほぼセットアップされます。
しかしながら、multi-user.target
で起動している場合、または通常とは異なるセットアップ (例: マルチモニタ) を使っている場合、vmtoolsd.service
を有効にする必要があります:
# systemctl enable vmtoolsd
さらに、ドライバーをロードする権限を与えて下さい:
/etc/X11/Xwrapper.config
needs_root_rights=yes
ヒントとテクニック
vmhgfs-fuse
ユーティリティによる共有フォルダ
Edit virtual machine settings > Options > Shared Folders > Always enabled を選択して新しい共有を作成してファイルを共有してください。
vmware-hgfsclient コマンドを実行することで共有フォルダが確認できます:
$ vmware-hgfsclient
確認できたらフォルダをマウントします:
# mkdir <shared folders root directory> # vmhgfs-fuse -o allow_other -o auto_unmount .host:/<shared_folder> <shared folders root directory>
他の vmhgfs-fuse
のマウントオプションは -h
フラグを使えば確認できます:
# vmhgfs-fuse -h
fstab
共有のルールを追加:
/etc/fstab
.host:/<shared_folder> /home/user1/shares fuse.vmhgfs-fuse defaults 0 0
共有フォルダを作成・マウント:
# mkdir /home/user1/shares # mount /home/user1/shares
Systemd
以下の .service
を作成してください:
/etc/systemd/system/<shared folders root directory>-<shared_folder>.service
[Unit] Description=Load VMware shared folders Requires=vmware-vmblock-fuse.service After=vmware-vmblock-fuse.service ConditionPathExists=.host:/<shared_folder> ConditionVirtualization=vmware [Service] Type=oneshot RemainAfterExit=yes ExecStart= ExecStart=/usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount .host:/<shared_folder> <shared folders root directory> [Install] WantedBy=multi-user.target
<shared folders root directory>
フォルダが存在することを確認してください。フォルダが存在しない場合は作成する必要があります:
# mkdir -p <shared folders root directory>
<shared folders root directory>-<shared_folder>.service
マウントターゲットを有効化してください。
全ての共有フォルダを自動的にマウントしたい場合は <shared_folder> は省いてください。
vmhgfs モジュールによるレガシーな共有フォルダ
Edit virtual machine settings > Options > Shared Folders > Always enabled を選択して新しい共有を作成してください。
vmware-hgfsclient コマンドを実行することで共有フォルダを確認できるはずです:
$ vmware-hgfsclient
/etc/fstab
に共有フォルダのルールを追加してください:
/etc/fstab
.host:/<shared_folder> /home/user1/shares vmhgfs defaults 0 0
共有フォルダを作成・マウント:
# mkdir /home/user1/shares # mount /home/user1/shares
一時的にマウントすることも可能です:
# mount -t vmhgfs .host:/<shared_folder> /home/user1/shares
起動時に共有フォルダを有効にする
共有フォルダを動かすには vmhgfs
ドライバがロードされていなければなりません。以下の .service
を作成してください:
/etc/systemd/system/mnt-hgfs.mount
[Unit] Description=Load VMware shared folders ConditionPathExists=.host:/<shared_folder> ConditionVirtualization=vmware [Mount] What=.host:/<shared_folder> Where=/home/user1/shares Type=vmhgfs Options=defaults,noatime [Install] WantedBy=multi-user.target
/etc/systemd/system/mnt-hgfs.automount
[Unit] Description=Load VMware shared folders ConditionPathExists=.host:/<shared_folder> ConditionVirtualization=vmware [Automount] Where=/home/user1/shares [Install] WantedBy=multi-user.target
マウントターゲットを有効にしてください:
# systemctl enable mnt-hgfs.automount
mlocate DB の剪定
mlocate を使うとき、locate DB
で共有ディレクトリをインデックスするのは意味がありません。除去するディレクトリを /etc/updatedb
の PRUNEPATHS
に追加してください。
3D アクセラレーション
3D アクセラレーションを有効にするには Edit virtual machine settings -> Hardware -> Display から Accelerate 3D graphics のチェックボックスを有効にしてください
OpenGL と GLSL のサポート
新しいカーネルモジュールで OpenGL と GLSL をアップデートすることで、Arch によるバージョンを上書きすることが可能です。
執筆時点で、OpenGL 3.3 と GLSL 3.30 がサポートされています。詳しくは https://bbs.archlinux.org/viewtopic.php?id=202713 を見て下さい。
時刻同期
仮想マシンで時刻同期を設定することは重要です。複数の仮想マシンによって CPU が共有されることにより、物理的なホストに比べて仮想マシンでは時刻の変動が発生しやすいためです。
時刻同期を設定する方法は2つあります: ホストマシンをソースにするか外部のサーバをソースにするかです。
時刻のソースとしてホストマシンを使う
時刻ソースとしてホストを使うには:
# vmware-toolbox-cmd timesync enable
ホストマシンがスリープから復帰した後にゲストの時計を同期させるには:
# hwclock --hctosys --localtime
時刻のソースとして外部サーバを使う
NTP を見て下さい。
準仮想化 SCSI アダプター
VMware Paravirtual SCSI (PVSCSI) アダプター はオーバーヘッドが少なく大きなパフォーマンスブーストを得られる VMware ESXi のストレージアダプタです。
次の手順に従って下さい: /etc/mkinitcpio.conf
ファイルを開き MODULES 行に以下を追加する:
MODULES=(...vmw_pvscsi...)
その後、次のコマンドを実行:
# mkinitcpio -p linux
仮想マシンをシャットダウンして scsi アダプタータイプを変更してください: VMware Paravirtual
。警告が表示されても無視してかまいません。
トラブルシューティング
マウスの問題
マウスに関する以下の問題が発生することがあります:
- カーソルをウィンドウに載せた時に自動グラブ機能が動作しない
- 入力にラグが発生する
- アプリケーションによってクリックが認識されない
- 仮想マシンに入ったり出たりするときにマウスカーソルが飛ぶ
- マウスの位置がゲスト VM のときの場所に飛ぶ
xf86-input-vmmouse パッケージを削除してみてください。マウスとキーボードの入力は xf86-input-vmmouse と xf86-input-libinput だけで扱えます。
以下の設定を .vmx
設定ファイルに追加してみてください (Mouse position jumps to where it left the guest VM):
~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx
mouse.vusb.enable = "TRUE" mouse.vusb.useBasicMouse = "FALSE" usb.generic.allowHID = "TRUE"
VMware は自動的にゲーム用にマウスを最適化します。問題が発生した場合、最適化を無効にするのを推奨します: Edit > Preferences > Input > Optimize mouse for games: Never。
また、60-libinput.conf
で catchall
イベントを 無効 にする必要もあるかもしれません:
/usr/share/X11/xorg.conf.d/60-libinput.conf
#Section "InputClass" # Identifier "libinput pointer catchall" # MatchIsPointer "on" # MatchDevicePath "/dev/input/event*" # Driver "libinput" #EndSection
ボタンが機能しない
デフォルトで動作しない場合、mouse.vusb.useBasicMouse = "FALSE"
を .vmx
に追加することで全てのマウスボタンが動作するはずです。
~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx
mouse.vusb.useBasicMouse = "FALSE"
ブートの問題
起動時間が遅い
VMWare のメモリ hot-add 機能が有効になっていると以下のエラーが起こることがあります。
- add_memory failed
- acpi_memory_enable_device() error
mem.hotadd = "FALSE"
を .vmx
に設定することでメモリ hot-add 機能を無効にできます。
~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx
mem.hotadd = "FALSE"
シャットダウンや再起動がハングアップする
vmtoolsd サービスのタイムアウトを変更してください (デフォルトは90秒)。
/etc/systemd/system/vmtoolsd.service.d/timeout.conf
[Service] TimeoutStopSec=1
自動スケールの問題
システムサービスを有効にしても解像度が変更されず引き伸ばされる場合、mkinitcpio.conf
にモジュールを追加する必要があります。
/etc/mkinitcpio.conf
MODULES="vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx"
忘れずに次を実行してください:
# mkinitcpio -p linux
GNOME3 のレンダリング問題
UI の一部が Clutter (検索、ドックなど) で消えないという再描写問題を修正するには、以下を編集する必要があります:
/etc/environment
CLUTTER_PAINT=disable-clipped-redraws:disable-culling
ドラッグアンドドロップとコピーアンドペースト
ドラッグアンドドロップ (コピーアンドペースト) 機能を使うには open-vm-tools と gtkmm3 パッケージをインストールする必要があります。
ログイン時に /etc/xdg/autostart/vmware-user.desktop
によって vmware-user-suid-wrapper を起動しようとしても、gtkmm との関係によって失敗することがあります。FS#43159 を見て下さい。
Workstation 11 で共有 VM として実行するときの問題
Workstation 11 には Arch ゲストを共有 VM として動作させゲストで vmtoolsd が実行しているときに vmware-hostd がクラッシュするというバグが存在しています。バグを回避するための open-vm-tools のパッチが こちら にあります。
システムのアップグレード後に共有フォルダがマウントされない
open-vm-tools にのみ発生する問題です。vmhgfs モジュールは AUR の open-vm-tools-dkmsAUR に入っているため、pacman -Syu
コマンドで自動的にアップデートされることはありません。システムのアップグレードをする前に手動で open-vm-tools-dkmsAUR をアップデートするようにしてください。
マウントされなくなったら、共有ファイルシステムの自動マウントを削除して、アップグレードをしてから mkinitcpio -p linux
を実行する必要があります。