DELL OptiPlex 960でpxegrubを使う話(UNDI)

4年に1度、特定のPCのリモートからの起動制御がしたくなる。 今年はそれがDellのOptiPlex 960であった。

これまで、リモートからの起動にはWoLを、 起動後のOSの制御にはpxegrubを利用して来たため 今回もそのようにしようと考えたのだが、 やはり一筋縄ではいかなかったため、 その方法をメモ代わりに記することにする。

WoLとPXEのためのBIOS設定

OptiPlex 960ではWoL(Wake on Lan)のために以下の前半2箇所のBIOS設定が、 WoL時のみPXEするためにさらに2箇所の設定が必要であった。

  1. Power Management内のLow Power Mode のチェックを外す
  2. Power ManagementのRemote Wake Upの Enable with Boot to NICにチェックを入れる (WoLのみでよいならEnableでよい)
  3. System ConfigurationのIntegrated NICのEnable With PXEにチェックを入れる (WoLだけで良いならEnableのみの方)
  4. GeneralのBoot Sequenceの最後にOnboard Network Controllerを入れる

UNDIによるネットワークインタフェースの利用

grub legacyはかなり前から開発が停止しており、 新しいほうのgrubはPXEには対応していないようである。 そのため、素ではギガビットのネットワークインタフェースに 対応しておらず、何らかのパッチを取り込まねばならない。 最初、OptiPlex 960に対応するドライバを探して組みこもうとしていたが、 OptiPlex 960のネットワークインタフェースはe1000eであった。 tg3やe1000のパッチは存在するが、e1000eは見つからない。 さて、開発版gpxeのドライバを移植するのも面倒だしどうしようかと考えていたところ、 opensolarisのサイトにUNDI版のドライバがあるらしいことに気がついた。

UNDIとは、PXEにおいてハードウェアに依存せず ネットワークインタフェースを 利用できるようにする仕組みらしい。 ならば、これを利用できるようにすれば、 将来さらにハードウェアが変わったときにも 苦労することなくリモートからの起動制御を 行うことができると考えた。

しかし実際のところ、opensolarisのサイトのgrubは もともとのgrub-0.97と異なる点が多く、 動かすのに苦労することとなった。 結局、よく分からないまま適当に プログラムの変更を行っていくうちに、 動作するものとなったため、 他の環境でも動作するかは不明である。

UNDI版pxegrubの作り方

  1. ソースの入手
    1. grub-0.97.tar.gz
    2. UNDI用のパッチ
    3. ext2のinode用のパッチ(VineLinuxに入っていたもの)
  2. ソースの展開
    1. grub-0.97.tar.gzの展開
    2. tar zxf grub-0.97.tar.gz
      cd grub-0.97
      
    3. UNDIその他ドライバのパッチをあてる
    4. patch -p1 < ../grub-0.97-undi.patch
      
    5. extのinodeサイズのパッチをあてる
    6. patch -p1 < ../ext3_256byte_inode.diff
      
  3. pxegrubの作成
    1. どのドライバを組みこむかなどの設定
    2. ./configure --enable-diskless --enable-undi
      

      (一応"--enable-undi"の代わりに"--enable-e1000"や "--enable-tg3"とすることで、それぞれのドライバが 組みこまれるように作ったつもりだが、動くかどうかは試していない)

    3. コンパイル
    4. make
      

      多少の警告メッセージは出るが、動くので良しとする

  4. その後
  5. 先のmakeでコンパイルは済んでおり、"stage2/pxegrub" というファイルが作成されているはずである。 DHCPサーバで指定する先のTFTPサーバの適切なディレクトリにこのpxegrubを置けば、 クライアントPCから利用可能になるはずであるが、 そのためには、WoL, DHCP, TFTP, grubの設定ファイルの準備が必要である。

元ネタ