2000 年 5 月 31 日 (水) 自宅

さて、[S]Vmware 2.0 の ports が更新されていたため、 以前はテスト版 ports を使っていたのだが、 ports-current を FreeBSD-current 上で使ってみることにしたのでありました ([S]UNIX USER の記事でもテスト版ベースでした)。

ところがこれが結構難しかった。 いきなり、起動した途端にこんなメッセージが出てきたのでありました。 しかも、Vmware の起動画面のイメージが表示されず、 単に白いウィンドウが表示されるだけ。うーむ。

Cannot open vmware executable file.  Possibly an installation error?

"Cannot open vmware executable file. Possibly an installation error?" と言われても困るんですけど…。 で、かまわず実行を続けて、 「Power On」を選択すると、 今度はこんな謎のメッセージが表示されてしまいます。

Could not open file /usr/local/lib/vmware/lib/vmm (No such file or directory)

確かに /usr/local/lib/vmware/lib/vmm なんてファイルはないんだけどさ、 前はそんなファイルなくても全く問題なく動いていたんだけどなぁ?

結局、結論は ktrace (1) することで発見されました。 FreeBSD-current では、linux エミュレータを有効にしていると、 何となく /usr/compat/linux/proc に、 Linux の procfs らしきものが出来ていて、 しかもきちんと cpuinfo というファイルが出来ているため、 emulator/vmware2 の files/vmware の中の、 Linux procfs 検知のための次のコードを通ってしまうのです (ちなみに、 生粋の FreeBSD procfs である /proc には、 cpuinfo などというファイルはありません)。

if [ ! -e @@LINUX_DIR@@/proc/cpuinfo ]; then
    echo "************************************************************"
    echo "It seems Linux procfs is not mounted on @@LINUX_DIR@@/proc."
    echo "VMware does not work without Linux procfs mounted."
    echo
    echo "For details, see linprocfs(5) manpage."
    echo "************************************************************"
    exit 1
fi

ところが実際は、 この Linux procfs がインチキ臭い。 FreeBSD-current は man linproc でわかるように、 最初から Linux procfs サポートを持っているのですが、 これは明示的にマウントしないと使えないようだ。 ところが、問題の状態では、 df を取ると次のようになっている。

ringo# df
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/ad0s1a   8130540  7185700   294397    96%    /
/dev/ad0s1e   3105518  2703101   153976    95%    /0
procfs              4        4        0   100%    /proc

従って、この状態では Linux procfs はマウントされていないのです。 そこで、/etc/fstab に次のように書き足してみます (最終行が追加した行)。

# Device	Mountpoint		FStype		Options		Dump	Pass#
/dev/ad0s1b	none			swap		sw		0	0
/dev/ad0s1a	/			ufs		rw		1	1
/dev/ad0s1e	/0			ufs		rw		2	2
/dev/acd0c	/cdrom			cd9660		ro,noauto	0	0
/dev/ad8s1	/flash			msdos		rw,noauto	0	0
proc		/proc			procfs		rw		0	0
linproc		/usr/compat/linux/proc	linprocfs	rw		0	0

で、ここで mount /usr/compat/linux/proc するなり、 再起動するなりすると、 /modules/linprocfs.ko で提供される Linux procfs がマウントされる。 この場合の df は次のようになる。

ringo# df
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/ad0s1a   8130540  7185701   294396    96%    /
/dev/ad0s1e   3105518  2703101   153976    95%    /0
procfs              4        4        0   100%    /proc
linprocfs           4        4        0   100%    /usr/compat/linux/proc

双方の内容は、次のように全く異なったものとなっています。

ringo% ls /proc/
0       156     217     245     260     269     287     309     4
1       2       218     256     261     27      293     319     46
116     201     219     257     262     272     298     321     5
132     215     220     258     263     277     3       338     520
153     216     244     259     268     282     304     345     curproc
ringo% ls /proc/1
cmdline ctl     file    mem     note    notepg  rlimit  status
ringo% ls /usr/compat/linux/proc/
0       156     217     245     260     269     287     309     4       meminfo
1       2       218     256     261     27      293     319     46      self
116     201     219     257     262     272     298     321     5
132     215     220     258     263     277     3       338     521
153     216     244     259     268     282     304     345     cpuinfo
ringo% ls /usr/compat/linux/proc/1
exe     mem

で、この状態から vmware を実行すると、 きちんと実行できるのです。 実は、最初のエラーは、 /usr/compat/linux/proc/vmwareのプロセスID/exe がオープンできなかったために出ていたエラーだったのです。 めでたしめでたし。


このサイトへのリンクには何ら許可は必要ありません。 ただし、無断で写真をダウンロードして他の場所に掲載したり、 画像加工の素材として利用するなど、再配布に当たる行為はしないようにしてください。 また、このサイトへのリンクであることを明示すること無しに <img src="..."> などで他のページの内部に画像ファイルを取り込むことも、 ご遠慮下さい。