PXEブートでインストール

篠原殿の情報を原文のまま、改行などを調整して掲載しました。

【solaris 8 のネットワークインストールに関する覚え書き】

【参考 】

(

  1. http://docs.sun.com
    (1) Solaris 8 のインストール 上級編 12 章
    (2) Solaris DHCP の管理:DHCP の管理
    (3) DHCP サービスを使用した Solaris ネットワークの起動とインストールのサポート
    (4) Solaris 8 のシステム管理(追補)10章 ディスクレスクライアントの管理
  2. http://solaris.sunfish.suginami.tokyo.jp/ いつも心に太陽を
  3. http://www.ukkii.com/solaris/index.html ノート PC に Solaris を
  4. http://solaris.bluecoara.net/ Solaris Fan
  5. http://www.linux.or.jp/JF 日本の linux 情報 JF から XFree86-Howto 他

【Preface】

Solaris 8 は PXE を用いて FD 及び CD ドライブを使用しないインストールが可能であることになっている。対応する機種は以下の条件を満たす機種になる。

  1. 起動デバイスとしてイーサネットを使える。
  2. 起動プロトコルに PXE が使える。

具体的には Intel 製の NIC を PCI 接続で持つ機種があげられる。現時点でこの条件を満たす NotePC は殆ど IBM Think Pad シリーズの intel 製内蔵NIC を持つ機種である場合が多い。という訳でここでは IBM Think Pad X21 に生贄になって貰った。

今回は特に内蔵の F Dや CD がない普通なら Solarisをインストールしようなど無謀以外の何者でもない NotePCに、内蔵イーサネットを起動デバイスにしてインストールサーバーからブートしインストールするという状況を想定している。また、ここに記す作業に加えてOSサービスを構成してNotePCを完全なディスクレスクライアントにしてしまえばそもそもインストールする必要もない。が、それではあまりに身も蓋も無いのでこれについては今後の課題ということでお茶を濁す。試行錯誤をしながら設定したら夜が明けてきたので勢いに乗って書いただけというのは内緒。手順が分かっていれば全ての作業はイメージの展開にかかる時間程度で済むはず。

【必要なもの】

生贄の NotePC

別に NotePC じゃなくてもいいのは当たり前だが、そもそもFDもCDも無いデスクトップもないだろうし、CDでブートできるならわざわざこんな手間暇かけてやるもんでもないと思う。

設定に関するドキュメントに使えるものが多いし(特にネットワークの関係と XFree86 に関する部分)後でマウントして使えるのでまずは Linux を別のパーティーションに入れておくと幸せになれる。そもそも Solaris が走るくらいなら Linux は楽勝の筈ということで 1G バイトくらいケチらずに参考文献のつもりで入れるべし。

インストールサーバ1台

原理上は PXE デーモンが動作する OS であればなんちゃら BSD でもフガホゲ Linux でも良い筈であるが、どうやってインストール用のイメージを展開するか考えるのも面倒だし、これ以上無謀なことをすると何時まで経ってもインストールから先に進まないので試していない。また OS が Solaris である場合はネットワークインストールやネットワークブートの設定を補助する各種コマンドが利用できるのでものぐさな私でも何とかなるという甘い見通しに従っただけである。何せ後述するようにインストール後に少なくともギガバイト単位で空き容量がいるので素直にデスクトップを一台用意した方が身のためである。サーバーのインストールについてはエンドユーザーインストールなんてケチなことを言っていると後から後からソフトを追加しなければいけないのでここは一つ全部入りでいく。

PXE を使用する為に DHCP 関連は必須、必修科目ではないがプライベート LAN 上で実行するなら DNS もあった方がよい。後からディスクレスブートを試してみたい場合は Solaris management application も黙ってインストールすべし。 そんなもの無くても楽勝だぜという向きはそもそもこれを読む必要もないと思う。上記併せてだいたい 1G バイトくらいとインストールイメージに CD 三枚分加えてもしブートサーバも設定するならそれに加えて最低 1G バイト、インストール後に全部で 2から4G バイトの空き容量が必要。

ハブもしくはスイッチ等のネットワーク機器

クロスケーブルがあればとりあえず2台のコンピュータを繋ぐことが出来るがやはり気分がでないのでちゃんと用意した方がよい。おまけの利点として大抵のスイッチはNICがちゃんと繋がっていれば”光る”ので何となく偉くなったような気分になれる。

【下拵え】

お馬鹿な私は整理しないとわからなくなるので、まずは大まかな流れを書く。

まずはインストールサーバーから。というか殆どこれだけである。インストールサーバーへのOSのインストールは終わったものとして取り扱う。必須なのは1)、3)、4)で後は好みに応じてNISでもNIS+でも好きなように。

1) インストール用イメージの展開
2) DNS の設定
3) DHCP サーバの設定
4) サーバー上でのインストールクライアントの設定
5) /etc/dfs/dfstabの設定
6) クライアントの準備

全ての作業は root 権限が必要となるので su するなり、 root でログインするなりして permission denied といわれて焦らないように。以下で”# ”で始まるものは実際の入力を元にしたものである。(一部 hostname 等は変更してある。)

1) インストールイメージの展開

これは作業自体は簡単だが時間がかかるので先にやる。展開している間に DNS と DHCP の設定を済ませてしまえば終わった頃にはすぐにインストールできるはず。最新の Solaris 8 についてくる DVD だとコマンド一発だが問答無用で WebStart になってしまうらしいので今回は CD から展開した。DVD の場合は(3)以下をする必要が無くなる。

(1) /export 配下にインストールイメージ用のディレクトリを作る。私は何の捻りもなく /export/instll にした。

ディレクトリの名前は何でもいいが後でディスクレスイメージのために使う名前は避けるのが大人というものだろう。要は root だの boot だのにしない方がいいということである。 Solaris 8 のシステム管理(追補)10章に詳細がある。

(2) Solaris8 software CD 1/2 をぶち込んでインストールイメージを展開する。

      #cd /cdrom/sol_8_202_ia/s2/Solaris_8/Tools
      #./setup_install_server /export/install
      

(3) Solaris8 software CD 2/2 をぶち込んでインストールイメージを展開する。

      #cd /cdrom/sol_8_202_ia_2/Solaris_8/Tools/
      #./add_to_install_server
      

(4) Solaris8 Language CD をぶち込んでインストールイメージを展開する。

      #cd /cdrom/sol_8_202_lang_ia/Tools/
      #./add_to_install_serve
      

他にも AnswerBook とか Software Companion とかもやろうと思えばいくらでも出来るらしいがディスクが足りないので却下である。

2) DNS の設定

sunfreeware から Bind8 の最新版を落としてきてインストールした。世の中は Bind9 に移行するらしいが Solaris 9 のインテル版がまだ出て無いのに Bind だけ9になるのも悔しいので Bind8 でやる。詳細は”JF”の DNS-howto を殆どそのまま写しただけであるが一応書いておく。この例ではブートサーバ上でDNSを動かしている。更に別のサーバーを立てる場合も手順は一緒である。

(1)loopback ネットワークの設定

所謂ローカルホスト、IPアドレスでいうところの127.0.0.1

(2)インストール用プライベートネットワークの設定

インストールサーバーと(今回はブートサーバーも兼用している)クライアント用ノートPCがぶらさがるネットワークを設定する。もし既にプライベートネットワークの設定が有るなら、クライアントの設定を追記すればよい。別のブートサーバを立てるのでなければインストールサーバーとクライアントは必ず同じネットワークかつサブネット上に有るようにする。なお、インストール時にはanonymousでnfsのマウントを許可するのでセキュリティ面では非常に危険であるため、DNSはプライベートLAN部分に限定する様にしておく。つまり"." "root.cashe"なんかは無し若しくはコメントアウトということである。

Linux は一通りの設定について Howto 文書というのがあって、日本向けの配布系だと (kondara とか Vine とか、他は使ったことがないので不明)local にインストールされて namazu で検索できる。これが結構 Solaris で設定をするときにも使える(マルチブートやソラリスとLinuxの共存のさせ方なんかも書いてある)ので1Gバイトくらいのパーティーションを一個作って入れておくと良い。lxrun を入れれば Solaris インストール後も linux 領域が使えるのでとにかく入れておく。

3) DHCP の設定

ここが一番作業量の多いところだった。手順としては以下のようになる。但し(3)の途中でインストールクライアントの設定を行う。

(1)DHCP server の基本設定
(2)インストールサーバーのためのベンダーオプションの設定
(3)マクロの作成
(4)ネットワークに関する設定
      

(1)Solaris DHCP manager をまず起動する。パスが通ってないのでフルバスで指定のこと。普通にインストールしていれば以下の場所に有る筈。

      
          # /usr/sadm/admin/bin/dhcpmgr

ウィザード形式で初期設定が出来るので全般の設定をする。詳細は ”いつも心に太陽を” 参照

(2)ネットワークの設定をする前にネットワークブートに必要なベンダーオプションを定義する。

以下に必要なベンダーオプションの一覧がある。docs.sun.com の Solaris 8 2/02 Update Collection - Japanese >> Solaris DHCP の管理 >> 4. DHCP の管理 >> DHCP サービスを使用した Solaris ネットワークの起動とインストールのサポート全部が必要な訳ではないが後でボートサーバーを構築するときに手間になるのも嫌だったので一辺にやる。

オプションタブを選んでメニューから作成でダイアログに必要事項を記入する。 カテゴリはベンダー、ベンダークライアントクラスは"SUNW.i86pc"とする。一個作ったら後はメニューから複製を選んで変更箇所だけを入れていけば必要な分だけ直に作れる。

(3)次にマクロを作成する。何故か一旦ネットワークの設定をしてしまうとマクロを後から変更できなかったので先に必要なマクロは作ってしまう。

ここで一旦作業を中断してまずインストールクライアントを設定する。実は以下の作業でクライアントが使うマクロのエントリがある程度まで登録されるので”しなくてもいいことはするものではない”のポリシーに従って自動でやらせてしまう。

4) サーバー上でのインストールクライアントの設定

      #./add_install_client -d -s <インストールサーバーのホストネーム>:/export/install/SUNW.i86pc i86pc

この後以下の様な出力が返ってくれば成功である。

          removing /tftpboot/inetboot.I86PC.Solaris_8-1
          removing /tftpboot/nbp.I86PC.Solaris_8-1
          bash-2.03# ./add_install_client -d -s hoge:/export/install/ SUNW.i86pc 
          i86pc
          copying inetboot to /tftpboot
          copying nbp to /tftpboot
          
          To enable SUNW.i86pc in the DHCP server,
          add an entry to the server with the following data:
          
          Install server      (SinstNM)  : hoge                 <ーインストールサーバーのホスト
          ネーム
          Install server IP   (SinstIP4) : 192.168.xxx.xxx      <ーインストールサーバー
          の IP Address
          Install server path (SinstPTH) : /export/install/
          Root server name    (SrootNM)  : hoge
          Root server IP      (SrootIP4) : 192.168.xxx.xxx
          Root server path    (SrootPTH) : 
          /cdrom/sol_8_202_ia/s2/Solaris_8/Tools/Boot
          
          To enable PXE boot, create a macro definition called
          PXEClient:Arch:00000:UNDI:002001 which has the following values:
          Boot file           (BootFile) : nbp.SUNW.i86pc
          Boot server IP      (BootSrvA) : 192.168.xxx.xxx      <ーインストールサーバー
          の IP Address
          

これでインストールクライアント用のエントリがマクロタブに登録される。また前半部分の情報も別のマクロとして使うのでリダイレクトしてファイルに落としておくのがきっとプロフェッショナルなお仕事なんだろうが私は終わってから気がついた。マクロの名称は自動的につくので必ず同じになるとは限らないが以下のようになる。再び DHCP manager に戻ってマクロタブから以下のマクロ名の属性を確認してみる。

      マクロ名:PXEClient:Arch:00000:UNDI:002001
      オプション名              値
      BootFile          nbp.SUNW.i86pc
      BootSrvA          192.168.xxx.xxx         <ーインストールサーバーの IP Address
      

エントリの順番が違うとどういうことになるのか分からないが気になるようなら上と同じにする。

次のマクロを定義する。マクロの名称は別に何でも良いので適当につける。別に彼女の名前だろうが子供の名前だろうが何だろうがかまわない(がアルファベットであることが望ましいようだ)ので、私は "install_server_path" とつけた、ここには (4) の作業で出力された残りのエントリを登録する。

マクロ名:install_server_path
      オプション名              値
      SinstNM                   hoge                            <ーインストールサーバーのホストネーム
      SinstIP4          192.168.xxx.xxx                         <ーインストールサーバーの IP Address
      SinstPTH          /export/install/
      SrootNM                   hoge
      SrootIP4          192.168.xxx.xxx
      SrootPTH          /export/install/Solaris_8/Tools/Boot    <*>
      

一つだけ注意すべきなのは <*> で示したパスのみ出力と異なりインストールイメージのディレクトリを指示してある事である。最初は指示通りに /cdrom/sol_8_202_ia/s2/Solaris_8/Tools/Boot としてあったが、クライアントをブートする際に prom-panic root filesystem not found を起こして先に進まなかったので変えてみた。場当たり的な対応ではあるがうまくいったので深く追求しない。

さらにもう一つマクロを定義する。これは 192.168.xxx.0 つまりインストールサーバーの存在するネットワーク全体のためのマクロである。これも名前は何でも良いがここは素直に "192.168.xxx.0" としておくサブネット及びブロードキャストはネットワークによって異なるので適宜変更されたい。

192.168.xxx のプライベートアドレスを使用したので以下のようになっている。

マクロ名:192.168.xxx.0
          オプション名          値
          Subnet                255.255.255.0
          RDiscvyF              1
          Broadcst              192.168.xxx.255
         

ここまでくればマクロの設定もあと少しである。今まで作ったマクロと最初に自動的に生成されるマクロを組みあわせてインストールクライアント用のマクロを修正する。

DHCPマネージャーのマクロでは一つのマクロ中に他のマクロをインクルードすることができるようになっているので、先に別々に作ったマクロをインクルードするように指定してやる。取合えず以下に示す用にインストールクライアント用のマクロを修正する。一発で動いてしまったので、インクルードする順番が結果に影響を及ぼすかどうかは確認していない。わざわざ試すような奇特な人が居たら結果を公表して欲しい。

マクロ名:PXEClient:Arch:00000:UNDI:002001
      オプション名              値
      include                 hoge
      include                 192.168.xxx.0
      include                 install_server_path
      BootFile          nbp.SUNW.i86pc
      BootSrvA          192.168.xxx.xxx         <ーインストールサーバーの IP Address
      

ここで一番最初にインクルードしているhogeというマクロはDHCPサーバー自体を設定するマクロで、最初にDHCPマネージャーを起動したときに質問に答えていれば作成されている筈である。もし見当たらなければ以下のマクロを作成する。

マクロ名:hoge
      オプション名              値
      Include                   Locale(*)                               <ーUTCoffsetを指定するマクロ
      Timeserv          192.168.xxx.5
      LeaseTim          259200
      LeaseNeg
      DNSdmain          "fuga.com"
      DNSserv                   192.168.xxx.xxx:

(*)このマクロも自動的に設定される筈であるが、もし無い場合はインクルードする代わりに、オプション名:UTCoffset、値:自分のローカルタイムのUTCからの差を秒で示したもの(+8時間だと28800)、を設定すればよい。

(4)ここまで作成したらネットワークウィザードで 192.168.xxx.0 のネットワークを追加する。

さらにアドレスウィザードで使用するアドレスを割り当てる。今回は IP Address を一つだけとし開始アドレスはDNSの所で決めたクライアントのIPアドレスを入力、構成マクロは当然一生懸命作ったインストールクライアント用マクロを選択する。またリースポリシーは常時を選択する。出来上がったらプロバティを表示しIPアドレス等を確認する。リースタブの方ではクライアントIDによる予約、bootp、アドレスの不使用のチェックを外してポリシーは常時になっている事を確認する。

以上で DHCP の設定も終了である。念のため NotePC を linux で起動し DHCP の動作を確認する。きちんと IP アドレスが取得できていることを確認した。

5) /etc/dfs/dfstab の設定

インストールイメージのあるディレクトリをexportするように設定する。先に述べたがセキュリティ上あまり好ましいものではないのでインストール中のみ有効にすること。

# share -F nfs -o ro,anon=0 /export/install

6) クライアントの準備

X21 の電源を入れて F1 で BIOS に入り BOOT メニューから Intel boot agent を有効にする。ここで Intel boot agent を最優先にするか(一番上に持ってくる)どうかは好みであるが、X21 はリスタートでは F12 でのブートデバイスの選択が不可能なので私は取り敢えず最優先にした。

インストールの準備が終わってしまえば他はいろんなところに書いてあるのでわざわざ書くこともない。というかここまでが今回の肝なので後は野となれ山となれである。後は電源を入れてインストールをこころゆくまで堪能すべし。

付録として /vara/dhcp/SUNWfiles1_dhcptab をつける。

      # SUNWfiles1_dhcptab
      #
      # Do NOT edit this file by hand -- use dhtadm(1M) or dhcpmgr(1M) instead
      #
      Locale|m|3617516400685350913|:UTCoffst=-28800:
      SrootOpt|s|14349031362755821569|Vendor=SUNW.i86pc,1,ASCII,1,0
      SrootIP4|s|12136356570833354753|Vendor=SUNW.i86pc,2,IP,1,1
      SrootNM|s|4909768018763972609|Vendor=SUNW.i86pc,3,ASCII,1,0
      SrootPTH|s|13694320566926835713|Vendor=SUNW.i86pc,4,ASCII,1,0
      SinstIP4|s|5366320430988656641|Vendor=SUNW.i86pc,10,IP,1,1
      SinstNM|s|12015603805824483329|Vendor=SUNW.i86pc,11,ASCII,1,0
      SinstPTH|s|7245447375508996097|Vendor=SUNW.i86pc,12,ASCII,1,0
      192.168.xxx.0|m|15510115641687277569|:Subnet=255.255.255.0:RDiscvyF=1:Broadcst=1
      
      92.168.xxx.255:
      hoge|m|1732759956630798340|:Include=Locale:Timeserv=192.168.xxx.5:LeaseTim
      =259200:LeaseNeg:DNSdmain="fuga.com":DNSserv=192.168.xxx.xxx:
      SbootFIL|s|8879691090291064833|Vendor=SUNW.i86pc,7,ASCII,1,0
      SswapIP4|s|4113193834672816129|Vendor=SUNW.i86pc,5,IP,1,0
      SswapPTH|s|11840807845287165953|Vendor=SUNW.i86pc,6,ASCII,1,0
      Stz|s|2110499375376498690|Vendor=SUNW.i86pc,8,ASCII,1,0
      SbootRS|s|5884234388136263682|Vendor=SUNW.i86pc,9,NUMBER,2,1
      SsysidCF|s|3003619476479410177|Vendor=SUNW.i86pc,13,ASCII,1,0
      SjumpsCF|s|2866259687844610049|Vendor=SUNW.i86pc,14,ASCII,1,0
      Sterm|s|659214395456356353|Vendor=SUNW.i86pc,15,ASCII,1,0
      install_server_path|m|16420687191346249733|:SinstNM="hoge":SinstIP4=192.16
      8.xxx.xxx:SinstPTH="/export/install/":SrootNM="hoge":SrootIP4=192.168.xxx.xxx:
      
      SrootPTH="/export/install/Solaris_8/Tools/Boot":
      PXEClient:Arch:00000:UNDI:002001|m|3651574872867340291|:Include=hoge:Inclu
      de=192.168.xxx.0:Include=install_server_path:BootFile="nbp.SUNW.i86pc":BootSrvA=
       
      192.168.xxx.xxx:

戻る