[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:25090] VMware の起動スクリプトについて



岡本です。

potatoでVMwareを使用しているのですが、OSブート時にエラーとなり
VMwareを起動できない状態になっています。

<エラーメッセージ>
Virtual machine monitor                     failed
Virtual bidirectional parallel port         failed
Virtual ethernet                            failed
Bridged networking on /dev/vmnet0           failed
<エラーメッセージ終わり>

そこで、分からないながらも/etc/init.d/vmwareを調査していくうちに
特定の行をコメントアウトすると正しくモジュールがロードされ、VMwareが
実行できることが分かりました。

vmware_exec() {
  local msg="$1"  # IN
  local func="$2" # IN
  shift 2

  echo -n '   '"$msg"

  # On Caldera 2.2, SIGHUP is sent to all our children when this script exits
  # I wanted to use shopt -u huponexit instead but their bash version
  # 1.14.7(1) is too old
  if [ "$VMWARE_DEBUG" = 'yes' ]; then
    (trap '' SIGHUP; "$func" "$@")
  else
    (trap '' SIGHUP; "$func" "$@") >/dev/null 2>&1
  fi
#  if [ "$?" -gt 0 ]; then
#    vmware_failed
#    echo
#    return 1
#  fi

  vmware_success
  echo
  return 0
}

(trap '' SIGHUP; "$func" "$@")の結果を判定するif文でエラーとなり
スクリプトを抜けてしまってるようなのですが、なぜそうなるのかが分かりません。

trap '' SIGHUPでシグナルを無視して、$funcは$2で渡された個々のモジュールを
ロードするための関数で、その関数にさらにshift 2した後の残りの引数を$@で
渡しているところまでは理解しているのですが、$funcの結果がなぜエラーになるの
でしょうか?vmware_execは下記のように呼び出されています。一例ですが。

vmware_exec 'Virtual machine monitor' vmware_start_vmmon

一つ目の引数はただのメッセージで、二つ目が$funcで呼び出す関数です。
vmware_start_vmmonの内容は以下の通りです。

vmware_start_vmmon() {
   /sbin/insmod -s -f "$driver" || exit 1

   exit 0
}

$driverにはvmmonが入ります。ここのinsmodは成功して0を返しているはず何ですが
なぜ、if文で0より大きいと判定されているのか謎です。DebianでVMwareを使っている
人はみんな問題なく使えているのでしょうか?同じような問題に遭遇して回避なさった
方がおられましたらご教示お願いします。

VMwareのバージョンは2.0.3で、カーネルは2.2.17です。

--

岡本@兵庫県神戸市
masaki@xxxxxxxxxxxxxxxxx