ESXi4.xでサポート外のデバイスを使用する。

ESXiもバージョンアップされる割には対応デバイスが未だにお寒くて、蟹なネットワークアダプタが使えないとか、環境を構築しようとするとそれなりに面倒くさい。

非公式だけれど、「vm-help.com」なんてのがあって、ある程度のドライバはここから入手できる。

ASRockせんせーの890GX Extreme 4の蟹チップが認識するか試してみたメモ。

ESXi4.x用ドライバの取得

890GX Extreme 4に載っているネットワークチップはRTL8111。

Linuxとかだとドライバ的にはR8168を使う事になるのかな。

vm-help.comには「Customizing your ESXi install with oem.tgz」というページがあって、ここからドライバを入手する事が出来る。

Realtek RTL8111のドライバは一杯あってどれを選べば良いのか迷うけれど、とりあえずmcvax氏の「RTL8111_8168-8.018.00_P55_integr_SATA_Ctrl.(AHCI).oem.tgz」を取得。

ドライバの適用

ESXiにドライバを適用するには様々な方法があるようだ。Googleせんせーに尋ねると色々と出てくるけれど、imageddファイルを直接弄るのは少し面倒。

自環境はML115を使用している関係で、USBメモリにESXiをインストールして使用することにしている。

後述する理由もあって、ESXiをインストールしたUSBメモリをUbuntu等のLinuxマシンにマウントして書き換える方法を取ってみる。

利用するUbuntuはVMWare上の仮想環境にインストールしたもの。VMWare Toolsを適用しているので、Windows側からのファイルもD&Dでコピーできて便利だ(笑)。

この仮想環境にESXiをインストールしたUSBメモリをマウントすると

のように4つのパーティションがマウントされる。

このうち第2パーティション(Hypervisor1)内にoem.tgzと言うファイルが存在する。ドライバを適用するにはこのファイルを書き換えれば良い。元からあるoem.tgzはバックアップしておくと良いかもしれない。

今回はRTL8111のドライバ単体を適用するだけなので、先程取得した「RTL8111_8168-8.018.00_P55_integr_SATA_Ctrl.(AHCI).oem.tgz」を「oem.tgz」にリネームして置き換えた。

このUSBメモリを890GX Extreme 4に刺してESXiを起動。管理画面からネットワークの設定が行えれば取りあえずRTL8111が認識されたことになる。

ネットワークの設定を行ってvSphere Clientでアクセスしてみると

RTL8111/8168Bとして認識している。

ちなみに、今回はネットワークチップの部分しか見ていない。

890GX Extreme 4でESXiが問題なく使えるかどうかは検証していないのであしからず。

== 2011.09.05 追記 ==

RTL8111ドライバを組み込んだ環境でFreeBSD8.2のVMを作成してみたが、PuTTY・Teratermからsshで接続しようとすると「デコードすると文字化けした」のようなエラーが出てNGとなる。

pingは通るしFTPなんかも問題なし、sshだけがNG。おまけにVMのFreeBSDから他のFreeBSDへsloginは可能だし(その逆も可)、他のOSではどうなのかとCentOS5のVMで調べてみたが問題が出ない。

ちなみに、同環境をESXi5.0に置き換えて上記現象が出たFreeBSDのVM動作させてみたら、こっちはすんなりPuTTYで接続できた。

と言う事で、ESXi4.xの非公式ドライバは何かあるっぽい。

====

複数のドライバを適用する場合

幾つかのドライバを適用する場合は少し作業を行って一つのoem.tgzファイルにまとめる必要がある。

ドライバにもよるが、基本的にoem.tgzのファイル配置は

  • .
    • etc
      • vmware
        • pci.ids
        • simple.map
    • usr
      • lib
        • vmware
          • vmkmod
            ドライバ

のようになっている。

どこか適当なところにディレクトリを作成して元からあるoem.tgzや他のoem.tzgをコピー

tar zxvf oem.tgz

で展開してやれば上記構成でディレクトリが出来るので、後はここにドライバをまとめていけば良い。

但し、

  • etc/vmware/pci.ids
  • etc/vmware/simple.map

の各ファイルについてはドライバ毎のエントリを追記する必要があるため、上書きしないように注意すること。

各ドライバの中にも上記2ファイルが同梱されているので参考にしながら、該当ドライバのエントリを追加する。(ドライバによっては追記の必要が無い場合もある)

pci.idsファイルはLinuxのハードウェア情報データベースと呼ばれる物と同等。RTL8111だと

10ec  Realtek Semiconductor Co., Ltd.
    0139  Zonet Zen3200
(snip)
    8168  RTL8111/8168B PCI Express Gigabit Ethernet controller
    8169  RTL-8169

のような形で記述されている。(認識されるとvSphere Clientの表示などにこの通り表示される。)

simple.mapファイルはPCIカードが返すベンダID・プロダクトIDによってどのドライバをロードするかを記述したファイルで、

10ec:8168 0000:0000 network r8168.o

のように記述されている。

これらの追記が終わったら、「etc」ディレクトリや「usr」ディレクトリがある場所で

tar zcvf oem.tgz *

としてoem.tgzにまとめた後、ESXiをインストールしたUSBメモリに適用してやれば良い。

ちなみに、こうやってUSBメモリを変更した後でddで吸い上げればimageddも作成できるし、imageddが出来ればISOイメージも出来ますな。

面倒だから試していないけれど。

ESXiのドライバをビルドするには

ESXiのドライバをビルドするにはどうすればいいのだろうと少し調べてみた。

状況的にESXiはLinuxの亜種と考えてよさそうだ。

ドライバもLinux用の物を拾ってきて、ESXi用のツールチェインを使用してビルドするらしい。

ビルド環境はCentOSx64環境との事だが、CentOS6で試したら既存のドライバもエラーでビルドできなかったので5系とした。

ESXiのツールチェインは「VMware ESX/ESXi 4.1 OSS Open Source Code」から取得する。

「VMware-esx-4.1-GA_part1.oss.tgz」の中に「vmkdrivers-gpl.tgz」と言うファイルがあるので、これを取り出してCentOS上に展開して使用する。

ビルド用コマンドは「build-vmkdrivers.sh」なので、これを実行すれば既存(vmkdrivers-gpl.tgz内)のドライバはビルドできるはずだ。

ドライバのビルドは面倒(というか良く判らず)

現在メインで使用しているFOXCONNのAD9AにはAtherosのAR8131が載っている。

Linuxではatl1cドライバを使用するようだが、色々調べてもatl1e(AR8121)はあってもatl1cは見つからない。

「www.kernel.org」からLinuxのカーネルソースを拾ってきてatl1cのソースを取得、ESXiのツールチェイン上でビルドしてみた。

ESXiに合わせて手を入れる必要があるんだろうとは思っていたけれど、案の定エラーが一杯出た。

この辺ドキュメントが無いから良く判らず。

既存のドライバを見ながら手を入れることになるのだろうけれど、面倒そうだから取りあえず放置決定(ぉぃ。


コメント

タイトルとURLをコピーしました