4年に1度、特定のPCのリモートからの起動制御がしたくなる。 今年はそれがDellのOptiPlex 960であった。
これまで、リモートからの起動にはWoLを、 起動後のOSの制御にはpxegrubを利用して来たため 今回もそのようにしようと考えたのだが、 やはり一筋縄ではいかなかったため、 その方法をメモ代わりに記することにする。
OptiPlex 960ではWoL(Wake on Lan)のために以下の前半2箇所のBIOS設定が、 WoL時のみPXEするためにさらに2箇所の設定が必要であった。
grub legacyはかなり前から開発が停止しており、 新しいほうのgrubはPXEには対応していないようである。 そのため、素ではギガビットのネットワークインタフェースに 対応しておらず、何らかのパッチを取り込まねばならない。 最初、OptiPlex 960に対応するドライバを探して組みこもうとしていたが、 OptiPlex 960のネットワークインタフェースはe1000eであった。 tg3やe1000のパッチは存在するが、e1000eは見つからない。 さて、開発版gpxeのドライバを移植するのも面倒だしどうしようかと考えていたところ、 opensolarisのサイトにUNDI版のドライバがあるらしいことに気がついた。
UNDIとは、PXEにおいてハードウェアに依存せず ネットワークインタフェースを 利用できるようにする仕組みらしい。 ならば、これを利用できるようにすれば、 将来さらにハードウェアが変わったときにも 苦労することなくリモートからの起動制御を 行うことができると考えた。
しかし実際のところ、opensolarisのサイトのgrubは もともとのgrub-0.97と異なる点が多く、 動かすのに苦労することとなった。 結局、よく分からないまま適当に プログラムの変更を行っていくうちに、 動作するものとなったため、 他の環境でも動作するかは不明である。
tar zxf grub-0.97.tar.gz cd grub-0.97
patch -p1 < ../grub-0.97-undi.patch
patch -p1 < ../ext3_256byte_inode.diff
./configure --enable-diskless --enable-undi
(一応"--enable-undi"の代わりに"--enable-e1000"や "--enable-tg3"とすることで、それぞれのドライバが 組みこまれるように作ったつもりだが、動くかどうかは試していない)
make
多少の警告メッセージは出るが、動くので良しとする
先のmakeでコンパイルは済んでおり、"stage2/pxegrub" というファイルが作成されているはずである。 DHCPサーバで指定する先のTFTPサーバの適切なディレクトリにこのpxegrubを置けば、 クライアントPCから利用可能になるはずであるが、 そのためには、WoL, DHCP, TFTP, grubの設定ファイルの準備が必要である。