BigAdmin System Administration Portal
特集記事: Solaris 10 OS x86 プラットフォーム版での新しいブートインストールイメージへのデバイスドライバの追加
Print-friendly VersionPrint-friendly Version

Solaris 10 OS x86 プラットフォーム版での新しいブートインストールイメージへのデバイスドライバの追加

執筆者: Liu および Brian Dowdy、2006 年 6 月

目次

概要: この技術文書では、OS のインストールプロセス中およびインストールプロセス後に、新しいデバイスを搭載するシステムがそのデバイスのインストールとその後のサポートを行えるように、Solaris オペレーティングシステム (OS) 用のインストールイメージに新しいデバイスドライババイナリを追加する方法を説明します。この文書は、UNIX に精通したシステム管理者および開発者を対象としています。対象のオペレーティングシステムは、新しいブートアーキテクチャーを搭載した Solaris 10 x86 プラットフォーム版 01/06 リリース (別名 Update 1) と OpenSolaris (別名 Nevada ) です。この文書で紹介する方法は、Solaris 10 OS x86 プラットフォーム版 (GA release 03/05) 以前のバージョンや、SPARC プラットフォーム版のどのバージョンの Solaris OS にも適用できません。

はじめに

Solaris 10 OS x86 および x64 プラットフォーム版を採用し始めるユーザーが増えるにつれ、ドライバ開発およびテストも増加しています。一部のドライバは、OS インストール後に、フロッピーディスクまたは USB 外部記憶装置を使った処理で追加することができます。これは大部分のネットワークドライバに該当します。システムに光学ドライブがある場合は、まず Solaris OS をインストールしてから、システムのブートストラップのあとに新しいドライバを追加できます。

ところが、Solaris OS が使用されるシステムが増え、システムによっては光学ドライブ、フロッピーディスクドライブ、または USB ポートがないものや、新しい種類の記憶装置コントローラがあるものなどが出てきたため、問題が発生しています。 たとえば、Solaris インストールメディアにまだドライババイナリがないデバイスがあり、そのようなデバイスが必要なシステムに Solaris OS をどうやってインストールするのでしょうか。記憶装置コントローラの場合、インストーラメディアに事前にドライバがある場合を除き、ディスク記憶装置にインストールパッケージを追加する方法はありません。また、主にネットワークインタフェースを搭載し、そのほかの入出力デバイスをほとんど搭載していないブレードタイプのコンピュータでは、ネットワーク経由でシステムをブートする最初の Solaris インスタンスにネットワークインタフェース用のドライバがない場合、そのシステムへの Solaris OS ネットワークインストールを実行することが不可能になります。

したがって、この文書では、インストールメディアに新しいデバイスドライババイナリを挿入するための簡潔な手順を説明します。2 つの主要なインストール方法を扱います。

  • PXE ブート/DHCP を使用したネットワークインストール
  • 独自の起動 ISO インストール CD/DVD の作成

この文書は、新しい Solaris ブートアーキテクチャーを使用する Solaris 10 1/06 (別名 Update 1) および OpenSolaris (Nevada) バージョンにのみ適用されます。詳細は「リソース」を参照してください。

ネットワーク PXE ブートインストール

通常、もっとも時間がかからず手軽な Solaris OS のインストール方法は、Solaris JumpStart サーバーからネットワーク経由でインストールするやり方です。Solaris Enterprise System を使用する多くの管理者は、ネットワーク対応の Open Boot PROM ファームウェアを搭載した SPARC 技術をベースとする Sun サーバーおよびワークステーション用の JumpStart 技術をすでにご存じでしょう。Sun はこのインストールテクノロジを 20 年近く前から普及させています。次の単純な手順が基本プロセスです。

  1. netinstall クライアントはネットワーク経由でブートするよう構成されている。
  2. 電源投入直後、クライアントはネットワーク情報を得るため BOOTP を使用してブロードキャスト通信をする。
  3. BOOTP サーバーはネットワーク、ブートストラップ、およびインストール情報を使用して応答する。
  4. クライアントは自身のネットワークを構成し、ブートストラップファイルおよびインストールファイルを取得する。

近年では、ほぼすべての PC で Ethernet インタフェースが標準となり、また多くの PC では、ネットワークブートストラップおよびインストールを実行する類似機能を使用して PC BIOS を拡張する、Intel の Pre-boot Execution Environment (PXE) ファームウェアが有効になっています。PC のプロセスは本質的に同じですが、唯一の相違点は、手順 (2) および (3) において PXE ブートは DHCP を利用してネットワーク、ブートストラップ、およびインストール情報を取得する点です。ただし、Solaris システム管理者にはあまり知られていませんが、Solaris JumpStart サーバーでも、PXE ブートクライアント用の DHCP サーバーサポートを追加すれば PC をブートできます。必要なすべてのサーバーソフトウェアコンポーネントはすでに Solaris OS にバンドルされているため、これは単に構成の問題になります。

JumpStart PXE ブートサーバーの設定

通常、Solaris インストールメディアには、基本的な JumpStart サーバーをインストールするためのユーティリティーが含まれています。稼働中の Solaris システムに光学メディアを挿入すると、通常はボリュームマネージャーがそのメディアを /cdrom にマウントします。次の場所にディレクトリを変更すると、JumpStart インストールスクリプトである setup_install_server(1m) があるはずです。

   # cd /cdrom/sol_10_106_x86/Solaris_10/Tools

使用法は簡単です。次のように、コマンドとターゲットインストールディレクトリを指定するだけです。

   # ./setup_install_server /export/install

ユーザーは必要に応じて、ターゲットディレクトリ /export/install を別の場所に変更できます。このコマンドを実行するには、ターゲットディレクトリを保持するスライス上に約 3G バイト以上のディスク容量が必要になります。すべてのコンポーネントが光学メディアからターゲットディレクトリにコピーされるため、このコマンドは 1 時間以上かかる場合もあります。所要時間は、光学ドライブの速度とメインシステムの速度によって変わります。

DVD がサポートされていない CD-ROM ドライブを使用するユーザーは、複数のディスクからインストールを行います。最初のインストールは CD1 と DVD で同じです。最初の setup_install_server のあと、ユーザーは現在のディレクトリから / (ルート) ディレクトリに戻り、ファイルマネージャーウィンドウから最初の CD を取り出して、追加の CD を挿入できます。各 CD では、/cdrom/sol_10_106_*/Solaris10/Tools/ ディレクトリに戻り、最初の同じターゲットディレクトリを使用して add_to_install_server(1M) コマンドを実行します。

インストールサーバーの設定が完了した時点では、インストールファイルシステムをネットワークにエクスポートすることが重要です。このためには、/etc/dfs/dfstab ファイルを編集し、次のような行を挿入します。

   share -F nfs -o ro,anon=0 -d "jumpstart dir" /export/install

/export/install の部分は、インストールサーバーを展開した任意の場所に編集できます。保存してエディタを終了したあとは、次を実行して NFS サーバーを有効にするか再起動する必要があります。

   # svcadm enable svc:/network/nfs/server ; shareall

完全を期するために、次のディレクトリを作成できます。

   # mkdir /export/install/jumpstart

続いて、サンプルの jumpstart_sample ファイルを作成したディレクトリにコピーします。

   # cp -r /export/install/Solaris_10/Misc/jumpstart_sample/* \
    /export/install/jumpstart
DHCP サーバーの PXE ブート用設定

前のセクションでは、JumpStart インストールパッケージをサーバーに転送し、NFS を介してネットワーク経由でこれらのパッケージをアクセス可能にするのに必要な作業の大部分を終了しました。ただし、PC ブートクライアントがこれらのパッケージにアクセスするためには、ネットワーク経由でブートし、インストールを開始するために初期ネットワークおよびブートファイルを取得する必要があります。ほとんどのネットワークインストール環境では、同じ JumpStart ホストがブートクライアント用の DHCP および PXE ブートサーバープロセスも実行します。

PXE ブートクライアントの起動時に、ブートクライアントはネットワーク情報とブートファイルを求めてブロードキャスト通信を行います。ネットワーク情報は DHCP を介して提供されます。続いて Solaris ネットワークブートプログラム (nbp) や Solaris x86.miniroot などの初期化ファイルが TFTP を使用して転送され、最終的に Solaris インストーラが起動すると NFS を介して JumpStart インストールパッケージが転送されます。

Solaris DHCP の構成には次の作業が必要です。

  • PXE ブートクライアントを認識し、PXE ブートクライアントに応答するよう DHCP サーバーを構成する。
  • すべての PXE ブートディレクトリを作成し、ブートアップ時にクライアントにより必要とされる適切なファイルをコピーまたはリンクする。

DHCP サーバーがすでに構成されている場合は、次のように構成解除フラグを用いて dhcpconfig(1M) コマンドを実行し、DHCP サーバーを構成解除できます。

   # dhcpconfig -Ux

ここでユーザーが構成するサーバーは、x86 プラットフォームの Solaris OS に対するすべての PXE ブート要求に対してプロミスキュアスに応答し、このサーバーが唯一のインストールサービスである独立したサブネットで正しく機能します。ただし、この DHCP サービスがほかのサービスと共存しなければならない場合、または特定の構成を必要とする場合は、特定の MAC アドレスからの要求、または特定のネットワークに関する要求のみに応答するようにカスタマイズできます。詳細は『Solaris DHCP Administration Guide』を参照してください。

次に示すスクリプトは、PXE に対する多くの一般的な DHCP 構成を単純化します。

 #!/bin/sh
dhcpconfig -D -r SUNWbinfiles -p /var/dhcp
dhcpconfig -N <network> -m <netmask> -t <routerip>
dhtadm -A -s SrootOpt -d 'Vendor=SUNW.i86pc,1,ASCII,1,0'
dhtadm -A -s SrootIP4 -d 'Vendor=SUNW.i86pc,2,IP,1,1'
dhtadm -A -s SrootNM -d 'Vendor=SUNW.i86pc,3,ASCII,1,0'
dhtadm -A -s SrootPTH -d 'Vendor=SUNW.i86pc,4,ASCII,1,0'
dhtadm -A -s SswapIP4 -d 'Vendor=SUNW.i86pc,5,IP,1,0'
dhtadm -A -s SswapPTH -d 'Vendor=SUNW.i86pc,6,ASCII,1,0'
dhtadm -A -s SbootFIL -d 'Vendor=SUNW.i86pc,7,ASCII,1,0'
dhtadm -A -s Stz -d 'Vendor=SUNW.i86pc,8,ASCII,1,0'
dhtadm -A -s SbootRS -d 'Vendor=SUNW.i86pc,9,NUMBER,2,1'
dhtadm -A -s SinstIP4 -d 'Vendor=SUNW.i86pc,10,IP,1,1'
dhtadm -A -s SinstNM -d 'Vendor=SUNW.i86pc,11,ASCII,1,0'
dhtadm -A -s SinstPTH -d 'Vendor=SUNW.i86pc,12,ASCII,1,0'
dhtadm -A -s SsysidCF -d 'Vendor=SUNW.i86pc,13,ASCII,1,0'
dhtadm -A -s SjumpsCF -d 'Vendor=SUNW.i86pc,14,ASCII,1,0'
dhtadm -A -s Sterm -d 'Vendor=SUNW.i86pc,15,ASCII,1,0'
dhtadm -A -s SbootURI -d 'Vendor=SUNW.i86pc,16,ASCII,1,0'
dhtadm -A -m PXEClient:Arch:00000:UNDI:002001 -d ':BootFile="nbp.SUNW.i86pc":BootSrvA=<serverip>:'
dhtadm -A -m SUNW.i86pc -d \ 
   ':SinstNM="<server>":SinstIP4=<serverip>:\
SinstPTH="/export/install":SrootNM="<server>":\
SrootIP4=<serverip>:\
SrootPTH="/export/install/Solaris_10/Tools/Boot":\
SjumpsCF="<server>:/export/install/jumpstart":\
SsysidCF="<server>:/export/install/jumpstart":'

先頭近くにある <network> は、使用するサブネットのネットワークアドレス (192.168.100.0 など) に置き換えるべきです。<netmask> は使用するネットマスク (255.255.255.0 など) で、<routerip> は使用するルーターの IP アドレス (192.168.100.1 など) です。スクリプトの最終行では、<server> を、前に dhtadm コマンド行の最終行で命名した dhtadm マクロの名前でもあるインストールサーバーのホスト名に置き換え、さらに <serverip> をインストールサーバーの IP アドレスに置き換えます。スクリプトをファイルにカット&ペーストし、スーパーユーザーとして実行します。

また、/etc/hosts ファイルを編集し、IP アドレスを使用して 1 つまたは複数のクライアントエントリを追加します。クライアントが 2 つの場合は次の操作を行います。

   192.168.100.101 pxeclient1
   192.168.100.102 pxeclient2

そして次のように、pntadm(1M) コマンドを使用して、これらを DHCP サーバークライアントテーブルに追加します。

   # pntadm -A 192.168.100.101 -m <server> -h pxeclient1 <network> 
   # pntadm -A 192.168.100.102 -m <server> -h pxeclient2 <network>

<server><network> は、上記の PXE 構成スクリプトの最終行で指定されるサーバーおよびネットワークマクロに関して、同じ意味を持ちます。続いて、次のコマンドを発行することで、in.dhcp プロセスに -HUP シグナルを送信します。

   #  pkill -HUP in.dhcpd 

このシグナルにより、DHCP サーバーは構成ファイルを強制的に再読取します。これにより、DHCP サーバー構成の最初の手順が処理されたことになります。

TFTP 用のブートファイルを構成するために、Solaris OS には、すべてのファイルの作成と /tftpboot ディレクトリへのすべてのファイルのコピーを単純化するためのコマンドが用意されています。次のように、/export/install/images/Solaris_10/Tools ディレクトリからコマンドを実行するだけです。

   # ./add_install_client -d SUNW.i86pc i86pc

この操作で、Solaris OS 上で PC クライアントをテストし、PXE をブートできるようになりました。

ドライバの追加

PXE ブートクライアント用のドライバを追加するには 2 つの手順があります。追加するドライバでもっとも重要なのは、通常、前に説明した記憶装置コントローラおよびネットワークインタフェースドライバです。最初の手順では、これらのドライバを TFTP を介して読み込まれる x86.miniroot に挿入します。

前述の手順に従った場合、このファイルは次の場所にあります。

   /export/install/boot/x86.miniroot

ただし、ファイルは /export/<solaris_root_install_dir>/boot/x86.miniroot にあることもあります。この場合、<solaris_root_install_dir> は、ユーザーがインストールメディアを展開した /export の下の最上位ディレクトリの名前です。最初の手順である miniroot の展開を実行するには、インストールサーバー上で root_archive(1M) コマンドを実行します。このコマンドは、Solaris 10 x86 プラットフォーム版の 01/06 リリース以降でのみ利用できます。/export/install/boot、またはインストールサーバーの設定でパッケージを配置した任意の場所にディレクトリを変更し、次のコマンドを使用して miniroot を展開します。

   # /boot/solaris/bin/root_archive unpack ./x86.miniroot ./unpacked

miniroot が展開されたら、32 ビットドライババイナリおよび driver.conf ファイルを /unpacked/kernel/drv ディレクトリにコピーしてから、適切な PCI ID と、展開された miniroot ディレクトリに対する適切なアクセス権を使用して /usr/sbin/add_drv コマンドを実行します。次に例を示します。

  # add_drv -b <fullpath-to-unpacked> -n -v -m '* 0600 root sys' -i "<device ids>" <mydrivername>

<mydrivername> は直前に ./unpacked/kernel/drv ディレクトリにコピーされたバイナリの名前で、<device ids> は次の形式の PCI デバイス ID の文字列リストです。

   '"pci1a44,9043" "pci1a44,9065" "pci1a44,9106" "pci1a44,9053"'

また -b フラグを使用すると、ドライバ追加操作を適用するルートパス (展開された miniroot を示す) を設定できます。x86.miniroot は 32 ビットで、32 ビットドライバのみをサポートします。

最後の手順で、同じコマンドを使用して miniroot を再圧縮しますが、キーワードとして pack を使用します。その作業の前に、同じブートディレクトリに元の x86.miniroot のコピーを作成することをお勧めします。次に例を示します。

   # cp ./x86.miniroot ./x86.miniroot.orig

続いて、次のように root_archive(1M) コマンドを実行します。

   # /boot/solaris/bin/root_archive pack ./x86.miniroot ./unpacked

以前に PXE ブートサーバーが動作していた場合、クライアントは x86.miniroot をブートおよび読み込み、Solaris 10 x86 プラットフォーム版 01/06 リリースの通常インストールを完了できるはずです。インストールではインストールの選択肢のメニューが表示されます。デフォルトでは対話型インストールを実行します。対話型インストールを実行する場合、インストーラでは自動リブートと手動リブートを選択できます。手動リブートを選択してください。これは、以前の手順がドライバを miniroot に追加する際に、最終的なクライアントシステムに、欠けているネットワークドライバをインストールする作業をまったく行わないためです。また、リブートの前に最終的なクライアントディスクイメージにドライバ経由でコピーを行い、add_drv コマンドを実行できるように、手動リブートを選択します。このようにしないと、新しくインストールされたシステムにはネットワークドライバが含まれません。

ここで、インストールクライアントがドライババイナリをコピーできるようにするには、ドライババイナリをどこに配置すればよいかが問題になります。

既存の miniroot の /kernel/drv からドライババイナリをコピーすることが可能です。これができるのは、システムが 32 ビットで、このモードで実行される場合のみです。ただし、システムが x64 対応の場合は、64 ビットのドライババイナリを miniroot の /kernel/drv/amd64 ディレクトリにコピーしていません。miniroot は 32 ビットのみであり、./kernel/drv/amd64 ディレクトリを持たないためです。以前の手順でそのディレクトリを作成した可能性もありますが、そのディレクトリは不要です。Solaris PXE ブートのインストール時に、クライアントは NFS を介してインストールサーバーディレクトリをマウントします。そのため、リブート前に、インストールサーバーのエクスポートされた PXE ブートディレクトリ、特にクライアントがインストール時にすでにマウントしている jumpstart ディレクトリの内部にドライバファイルを配置するのは簡単です。単に ./jumpstart/drv サブディレクトリを、サーバーのエクスポートされたディレクトリ内部に配置すればよいのです。これは通常インストールクライアント上で /tmp/install_config としてマウントされます。これが見つからない場合は、df(1M) コマンドを使用してファイルシステムとそのマウントポイントのリストを確認してください。

CD/DVD-ROM メディアのインストール

追加ドライバが含まれる起動 CD または DVD インストールメディアの作成は、ネットワークインストール用に x86.miniroot を変更するプロセスに似ています。追加作業の大部分は、CD または DVD のマウント、ディスクイメージコンテンツ全体の別のディレクトリへのコピー、インストールイメージのコピーでの同じドライバ挿入操作の実行、およびファイルの再パッケージ化と CD または DVD メディアに書き込み可能な起動 ISO イメージの作成です。

CD/DVD-ROM メディアの使用法

DVD または CD-ROM メディアがすでにある場合は、ファイルをコピーするだけで済みます。ドライブにディスクを挿入してから、コマンド行で次のコマンドを実行します。

   # cd /cdrom/sol_10_106/x86; find . -depth -print|cpio -vpdm <targetdir>

<targetdir> はターゲットの作業用ディレクトリへのフルパスです。コピーが完了すると、miniroot は通常 <targetdir>/boot/x86.miniroot に配置されます。「ドライバの追加」のセクションで説明されている手順を繰り返します。

完了したら、mkisofs(8) コマンドを使用して、作成する起動 ISO イメージにファイルを再パッケージ化します。具体例を次に示します。

   # mkisofs -o <outfilename.iso> -b boot/grub/stage2_eltorito \
     -c .catalog -no-emul-boot -boot-load-size 4 \
     -boot-info-table -relaxed-filenames -N -L -l -r -J \
     -d -D -V <volname> <targetdir> 

<outfilename.iso> は出力するファイル名に置き換え、<volname> はボリューム名 (MYS10VOL など) に置き換えます。<targetdir> はファイルのコピー元と同じです。

CD/DVD ISO ファイルの使用法

メディアなしに ISO ファイルをダウンロードしている場合、メディアに書き込んでからそれをマウントする必要はありません。Solaris OS には、ユーザーが ISO イメージをマウントできるようにする、ループバックファイルシステムマウントコマンド lofiadm(1M) が用意されています。次のようにコマンドを使用します。

 # /usr/sbin/lofiadm -a <isoimagepath>

<isoimagepath> はダウンロードされたインストール ISO イメージへのフルパスです。通常、lofiadm(1M) コマンドは、すでにマウントされているループバックファイルシステムの数に基づいて、ブロックデバイスの位置を /dev/lofi/1 または /dev/lofi/2 または /dev/lofi/ として返します。これを読み取り可能なファイルシステムとしてマウントするには、次のように mount(1M) コマンドを使用します。

   # mount -F hsfs /dev/lofi/1 /mnt

ファイルは、/mnt マウントポイントを除き、「CD/DVD-ROM メディアの使用法」のセクションとまったく同じように使用できるようになりました。「ドライバの追加」での説明に従って、インストールイメージへドライバを挿入するための同じプロセスを繰り返し、「CD/DVD-ROM メディアの使用法」のセクションと同じコマンドを使用して、書き込み可能な起動 ISO イメージとして再パッケージ化します。

ループバックファイルシステムのマウントが完了したら、次のように umount(1M) および lofiadm(1M) コマンドを実行してマウントを解除します。

   # umount /mnt; lofiadm -d /dev/lofi/1

上述のコマンド行コマンドで、/mnt および /dev/lofi/1 を適切なマウントポイントに置き換えてください。

リソース

詳細情報については、次の便利なリンクを参照してください。

BigAdmin
  
 
BigAdmin Upgrade Hub