VMware上のUbuntu13.04でvmware-toolsが動かなかったので
タイトル通り vmware-tools が動かなかったのです。というより、
- カーネルが 3.8 になったので vmware-tools をビルドしようとしたら
- linux-headers に version.h が無いと怒られ失敗し
- ln -s でリンクを貼ってビルドし直したんだけど
- カーネル 2.8 の方法でビルドしようとしやがるので当たり前のように失敗する
というどうしようもない状態に陥っていました。
ちなみに vmware-tools のバージョンは 9.5.0.19712 (build-958366) だったらしい。
多分バージョンによってはビルドできる。
が、いまどき VMware Player で Ubuntu を動かすライトユーザーとしては
いちいち VMware® さんに個人情報を送信して有料版体験版をダウンロードし、
そこから vmware-tools だけを失敬してアップデート…
などという苦行を強いられるのはさすがにもう嫌なので、
思い切って open-vm-tools に乗り換えてみました。
ようするにオープンソース版の vmware-tools らしい。
$ sudo apt-get install open-vm-tools # 設定ファイルを置き換えるかどうか訊かれる。とりあえず全部置き換えた $ sudo /etc/init.d/vmware-tools stop # バッティング予防に既存の vmware-tools を停止 $ sudo /etc/init.d/open-vm-tools restart # open-vm-tools 再起動
ここまでで特にエラーは無かったのだけれど、
共有フォルダが有効にならないという比較的フェイタルな事態に遭遇。
「これだから…」などという自分勝手な呆れ感を抱きながらグーグリングしていると
http://ubuntuforums.org/showthread.php?t=1596743 というアメリカ語の記事を発見。
どうやら共有できないのではなく、自動でマウントしてくれないらしい。
上記URLに掲載されてる open-vm-tools (シェルスクリプト) をためらいもなく実行すると
Syntax Error と怒って仕事してくれなかった上に、
よくよく見るとオリジナルのスクリプトとあまりにも構造が違っていたので
手動で改造した結果がこちら。
#!/bin/sh ### BEGIN INIT INFO # Provides: open-vm-tools # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # X-Start-Before: # X-Stop-After: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: Runs the open-vm-tools services # Short-Description: Runs the open-vm-tools services ### END INIT INFO . /lib/lsb/init-functions exit_if_not_in_vm () { if [ ! -x /usr/bin/vmware-checkvm ] || ! /usr/bin/vmware-checkvm > /dev/null 2>&1 then echo "Not starting as we're not running in a vm." exit 0 fi } case "${1}" in start) # Check if we're running inside VMWare exit_if_not_in_vm log_daemon_msg "Loading open-vm-tools modules" log_progress_msg "vmhgfs"; modprobe vmhgfs log_progress_msg "vmxnet"; modprobe vmxnet # ここに2行追加 log_daemon_msg "Mounting hgfs" mount -t vmhgfs .host:/ /mnt/hgfs log_end_msg 0 log_daemon_msg "Remove pcnet32 module, if vmxnet is loaded" # check if vmxnet module is loaded loaded="$(lsmod | grep -o vmxnet)" if [ "$loaded" = "vmxnet" ]; then # Removes pcnet32 module if vmxnet module is loaded modprobe -r vmxnet log_progress_msg "Removing pcnet32"; modprobe -r pcnet32 modprobe vmxnet fi log_end_msg 0 log_daemon_msg "Starting open-vm daemon" "vmtoolsd" /usr/bin/vmtoolsd --background /var/run/vmtoolsd.pid log_end_msg 0 ;; stop) # Check if we're running inside VMWare exit_if_not_in_vm # ここにも2行追加 # ※ vmtoolsd のプロセスをころる前に umount するとエラーを吐くとコメントで情報を頂いたので位置だけ変更 log_daemon_msg "Unmounting /mnt/hgfs" umount /mnt/hgfs log_daemon_msg "Stopping open-vm guest daemon" "vmtoolsd" if [ -f /var/run/vmtoolsd.pid ] then kill $(cat /var/run/vmtoolsd.pid) fi log_end_msg 0 log_daemon_msg "Removing open-vm-tools modules" log_progress_msg "vmhgfs"; modprobe -r vmhgfs log_progress_msg "vmxnet"; modprobe -r vmxnet log_end_msg 0 ;; force-reload|restart) ${0} stop sleep 1 ${0} start ;; *) log_success_msg "Usage: ${0} {start|stop|restart|force-reload}" exit 1 ;; esac
実際には mount,umount
コマンドをそれぞれ start,stop
に追加するだけなんですが、
mount -t vmhgfs .host:/ /mnt/hgfs
ってなんだよ覚えられる気がしないよ。
起動時に毎回このコマンドを実行するのかと思うと何かこみ上げてくるものがありますね。
$ sudo /etc/init.d/open-vm-tools start * Loading open-vm-tools modules [ OK ] * Mounting hgfs [ OK ] * Remove pcnet32 module, if vmxnet is loaded [ OK ] * Starting open-vm daemon vmtoolsd [ OK ] $ ls /mnt/hgfs/ C/ D/ E/ J/
何はともあれ、これで共有フォルダがゲスト側から見えるようになりました。
結論:
- VMware Player ユーザには open-vm-tools のほうがいい
- デフォルトで自動マウントするようにして欲しい
- 作業が中断されて2時間経った