名前 | 形式 | 機能説明 | オプション | x86 での起動シーケンスの詳細 | x86 での一次起動 | x86 での二次起動 | 使用例 | ファイル | 関連項目 | 警告 | 注意事項
ブートストラップとは、スタンドアロンプログラムを読み込んで実行する処理のことです。ここでのブートストラップとは、起動可能なオペレーティングシステムを読み込んで実行することを意味します。通常、スタンドアロンプログラムはオペレーティングシステムカーネル (kernel(1M) のマニュアルページを参照) ですが、代わりに任意のスタンドアロンプログラムを起動することもできます。SPARC ベースのシステムでは、オペレーティングシステム以外に起動できるスタンドアロンプログラムの代表的な例として、マシンの診断モニターがあります。
スタンドアロンプログラムが動的にリンクされる実行可能プログラムとして識別された場合、 boot は実行可能形式によって指定されたインタプリタ (リンカー / ローダー) を読み込み、そのインタプリタに制御を渡します。スタンドアロンプログラムが静的にリンクされている場合は、そのスタンドアロンプログラムに直接ジャンプします。
カーネルは読み込まれると、UNIX システムを起動して、必要なファイルシステム (vfstab(4) のマニュアルページを参照) をマウントし、/sbin/init を実行して、システムを /etc/inittab で指定されている initdefault 状態にします。inittab(4) のマニュアルページを参照してください。
SPARC ベースのシステムでは、ほとんどのマシンでのブートストラップ手続きは次の基本フェーズからなります。
マシンの電源を投入すると、(PROM 内の) システムファームウェアが電源投入時自己診断テスト (POST) を実行します。この診断テストの形式と範囲は、システムに搭載されているファームウェアのバージョンによって異なります。
診断テストが正常に完了した後、ファームウェアが使用する不揮発性記憶領域に適切なフラグが設定されていれば、ファームウェアは自動起動を試みます。ファームウェアは、読み込むファイルの名前とそのファイルを読み込むデバイスを選択することができます。
これらのフラグと名前は、シェルから eeprom(1M) コマンドを使用するか、またはシステムの停止後に ok プロンプトで PROM コマンドを使用することにより、設定できます。
第 2 レベルのプログラムは、ufsboot (ディスクから起動する場合) または inetboot あるいは wanboot (ネットワークから起動する場合) のどれかです。
ネットワーク起動
ネットワーク起動は 2 段階で行われます。まず、クライアントが、二次起動プログラムの読み込みに必要な IP アドレスとその他のすべてのパラメタを取得します。続いて、二次起動プログラムが、UNIX カーネルを読み込みます。
IP アドレスは、PROM で使用可能な機能と PROM の構成に応じて、RARP、DHCP、手動構成のいずれかの方法を使って取得できます。sun4u カーネルアーキテクチャのマシンには、DHCP 対応の PROM が搭載されています。
次に、2 種類のネットワーク起動方式を指定する boot コマンド構文を示します。
boot net:rarp boot net:dhcp |
次のコマンドのように、rarp または dhcp 指示子を指定しないと、net が別名になっているネットワークインタフェースを介して、デフォルトのネットワーク起動方式が呼び出されます。
boot net |
以降では、RARP/bootparams を使用するネットワーク起動のイベントシーケンスについて説明します。そのあとで、DHCP を用いたシーケンスについて説明します。
RARP/bootparams を使ってネットワークから起動する場合、PROM はまず、応答を受信するまで逆 ARP 要求をブロードキャストします。応答を受信すると、TFTP 要求をブロードキャストして inetboot の最初のブロックを取得します。続いて、その最初のブロック要求に一番先に応答したサーバーに後続の要求が送信されます。読み込みの完了後、inetboot も同様に、逆 ARP を使って IP アドレスを取得した後、bootparams RPC 呼び出し (bootparams(4) を参照) をブロードキャストすることで、構成情報とルートファイルシステムを検索します。続いて、inetboot は NFS 経由でカーネルを読み込んだ後、そのカーネルに制御を移します。
DHCP を使用してネットワークから起動する場合、PROM はハードウェアアドレスおよびカーネルアーキテクチャをブロードキャストし、IP アドレス、起動パラメタ、およびネットワーク構成情報を要求します。(可能性のある複数のサーバーの中から) DHCP サーバーが応答し選択されると、そのサーバーがクライアントに IP アドレスおよびクライアントの起動に必要な他のすべての情報を送信します。この情報を受信したクライアントの PROM は、読み込むファイルの名前を調べ、そのファイル名が HTTP URL であるかどうかにより、2 種類の動作のいずれかを実行します。ファイル名が HTTP URL でなかった場合、PROM は、inetboot をダウンロードし、それをメモリー内に読み込んで実行します。すると、inetboot はカーネルを呼び出し、さらにそのカーネルが必要なファイルを読み込んでから inetboot を解放します。その後、起動スクリプトが DHCP エージェント (dhcpagent(1M) を参照) を起動します。以降の DHCP アクティビティは、その DHCP エージェントによって実行されます。
読み込むファイルが HTTP URL の場合、PROM は、その参照ファイルを HTTP を使って読み込みます。クライアントが HMAC SHA-1 鍵を使って構成されていた場合、クライアントは読み込んだファイルの完全性を検査した後で、そのファイルを実行します。そのファイルは wanboot バイナリであるとみなされます。起動された wanboot は、処理を継続できるだけの情報が揃っているかどうかを判断します。必要な情報が不足していた場合は、適切なエラーを出力して処理を終了するか、コマンドインタプリタを起動して必要な構成情報の入力をユーザーに求めます。必要な情報を取得した wanboot は、HTTP 経由で起動ファイルシステムをメモリー内に読み込みます。クライアント上に暗号鍵がインストール済みである場合、wanboot は、起動ファイルシステムイメージと関連ハッシュを復号化した後、そのハッシュを検証します (暗号鍵は存在するがハッシュ鍵が存在しない、という状況はエラーになります)。起動ファイルシステムには、wanboot が正しい時刻の設定とルートファイルシステムの取得を実行するのに必要な各種構成データが含まれています。
wanboot は、起動ファイルシステムを調べることで、HTTP、HTTPS のいずれを使用すべきかを判断します。HTTP を使用すべきであることが判明した場合でかつ、クライアントが HMAC SHA-1 鍵を使って構成されていた場合、wanboot はルートファイルシステムの完全性検査を実行します。ルートファイルシステムのメモリー内への読み込み (および必要に応じて完全性検査の実行) が完了すると、wanboot はそこから UNIX を読み込みおよび実行します。なお、wanboot.conf(4) ファイルで boot_logger URL が指定されていた場合、wanboot は処理状況に関するログを定期的に記録します。
すべての PROM が URL を処理できるわけではありません。クライアントにその機能が備わっているかどうかを判断するには、list-security-keys OBP コマンド (monitor(1M) を参照) を使用します。
現在のところ、x86 プラットフォーム上では WAN 起動は利用できません。
wanboot コマンド行
クライアントプログラムが wanboot である場合、クライアントプログラムは、次の形式の client-program-args を受け付けます。
boot ... -o opt1[,opt2[,...]] |
ここで、各オプションに指定できるアクションは、次のとおりです。
DHCP 経由で構成パラメタを取得するように wanboot に指示します。
コマンドインタプリタを起動するように wanboot に指示します。
下記のインタプリタコマンドのいずれか。
または、下記のインタプリタパラメタ名を使用した代入文。
wanboot コマンドインタプリタ
起動時に client-program-args として "-o prompt" を指定すると、wanboot コマンドインタプリタが起動されます。単一のコマンドまたは代入文、もしくは、コンマで区切られた一連のコマンドまたは代入文が入力可能です。利用可能な構成パラメタは、次のとおりです。
クライアントの IP アドレス (ドット区切り 10 進表記)。
デフォルトのルーターの IP アドレス (ドット区切り 10 進表記)。
サブネットマスク (ドット区切り 10 進表記)。
DHCP クライアント識別子 (引用符付き ASCII 文字列または 16 進 ASCII)。
DHCP トランザクションで要求するホスト名 (ASCII)。
HTTP プロキシサーバー指定 (IPADDR[:PORT])。
利用可能な鍵名は、次のとおりです。
トリプル DES 暗号鍵 (48 個の 16 進 ASCII 文字)。
AES 暗号鍵 (32 個の 16 進 ASCII 文字)。
HMAC SHA-1 署名鍵 (40 個の 16 進 ASCII 文字)。
最後に、WAN 起動 CGI の URL を参照する方法を示します。
WAN 起動 CGI の URL (OBP の file パラメタと同等)。
インタプリタが受け付けるコマンドは、次のとおりです。
利用可能なコマンドの簡単な説明文を出力します。
val を var に代入します。ここで、var は、構成パラメタ名、鍵名、bootserver のいずれかです。
パラメタ var の設定を解除します。
すべてのパラメタとその設定値を一覧表示します (OBP 経由で取得された鍵の値は表示されません)。
未設定パラメタに対する値の入力を、ユーザーに求めます。各パラメタの名前と現在値 (もしあれば) が出力されます。ユーザーは、Return キーを押して現在値を受け入れることもできますし、新しい値を入力することもできます。
すべての値の入力を完了したら、インタプリタを終了し起動処理を継続します。
起動インタプリタを終了し、OBP の ok プロンプトに戻ります。
上記の代入文やコマンドは、コマンド行の -o オプションの一部として、いくつでも指定できますが、boot コマンドの引数の長さには 128 バイトの OBP 制限があります。たとえば、「-o list,go」とすると、パラメタの現在値 (デフォルト値) が一覧表示された後、起動処理が継続します。
ディスクからの起動
ディスク (またはディスク同様のデバイス) から起動する場合、ブートストラップ処理は、一次起動および二次起動という概念的に異なる 2 種類のフェーズからなります。一次起動フェーズでは、PROM が、起動デバイスとして選択されたディスクパーティションのブロック 1 〜 15 から主起動ブロックを読み込みます。
スタンドアロンプログラムのパス名が相対パス名の場合 (スラッシュで始まらない場合)、第 2 レベルの起動において、プラットフォームに依存する検索パスでスタンドアロンプログラムが検索されます。このパスには必ず、 /platform/platform-name が含まれています。多くの SPARC プラットフォームでは、次にプラットフォーム固有のパスエントリ /platform/hardware-class-name が検索されます。filesystem(5) のマニュアルページを参照してください。絶対パス名の場合、boot は指定されたパスを使用します。その後、boot プログラムは該当するアドレスからスタンドアロンプログラムを読み込み、制御を渡します。
ファイル名がコマンド行で、または boot-file NVRAM 変数などで指定されていない場合、boot はシステムにインストールされているソフトウェア、ハードウェアおよびファームウェアの能力、さらにユーザーが設定可能なポリシーファイル (「ファイル」を参照)に基づいて、読み込むべきデフォルトのファイルを選択します。
OpenBoot boot コマンドは、次の形式の引数をとります。
ok boot [device-specifier] [arguments] |
ok boot |
boot コマンド行で device-specifier を指定しない場合、OpenBoot は通常、boot-device 変数または diag-device NVRAM 変数を使用します。オプションの arguments をコマンド行で指定しないと、OpenBoot は通常、 boot-file または diag-file NVRAM 変数をデフォルトの boot 引数として使用します (システムが診断モードの場合、 boot-device および boot-file の代わりに、diag-device と diag-file が使用されます)。
arguments には複数の文字列を指定できます。すべての argument 文字列は二次起動プログラムに渡され、OpenBoot では解釈されません。
boot コマンド行に arguments を指定した場合、boot-file または diag-file NVRAM 変数のどちらも使用されません。NVRAM 変数の内容がコマンド行の引数とマージされることもありません。次のコマンドでは、boot-file および diag-file の設定値は無視され、文字列 -s は arguments として解釈されます。この場合、boot は boot-file または diag-file の内容を使用しません。
ok boot -s |
以前の PROM におけるコマンド例を示します。
ok boot net |
このコマンドでは引数が指定されていないため、代わりに、boot-file または diag-file の設定値 (設定されている場合) が、boot に渡すデフォルトのファイル名および引数として使用されます。ほとんどの場合、システムタイプ、システムのハードウェアとファームウェア、およびルートファイルシステムにインストールされているソフトウェアに基づいて boot コマンドに適切なデフォルト値を選択させるのが、最善の方法です。boot コマンドのポリシーを追加するためにポリシーファイルを変更してもかまいませんが、boot-file または diag-file を変更すると、状況によっては予期せぬ結果を招くおそれがあります。
これは、大部分の OpenBoot 2.x および 3.x ベースのシステムにおける一般的な動作です。ただし、プラットフォームによっては動作が異なる可能性もあります。
別のコマンド例を示します。
ok boot cdrom
このコマンドも通常は、引数を指定しません。したがって、boot-file に 64 ビットカーネルのファイル名が設定されている環境で、「boot cdrom」と入力してインストール CD を起動しようとしても、インストール CD に 32 ビットカーネルしか含まれていなければ、その起動処理は失敗します。
使用される boot コマンドの形式によっては、boot-file または diag-file の内容が無視されるので、プロダクションシステムで boot-file に依存することは一般に推奨しません。OS のポリシーを変更するには、ポリシーファイルを変更します。プロダクションシステムに 32 ビットのパッケージと 64 ビットのパッケージの両方がインストールされている場合は例外ですが、プロダクションシステムでは 32 ビット OS を使用する必要があります。
ローカル (CD 上) に存在する wanboot コピーから WAN 起動を実行するには、次のコマンドを使用する必要があります。
ok boot cdrom -F wanboot - install
最近の PROM に含まれるネットワーク起動サポートパッケージは、次の構文をサポートするように強化されており、引数を処理できるようになっています。
[protocol,] [key=value,]*
すべての引数は省略可能であり、指定する順序にも制限はありません。ただし、リストの末尾でない限り、引数の後にはコンマが必要です。ここで指定した引数は、すべてのデフォルト値よりも優先されるほか、DHCP を使って起動する場合には、それらの引数に対応する DHCP サーバーから提供される構成情報よりも優先されます。
上記の protocol には、使用するアドレス検索プロトコルを指定します。
key=value 属性ペアには、以下の構成パラメタを指定します。
TFTP サーバーの IP アドレス。
TFTP を使ってダウンロードするファイルの名前、または WAN 起動の URL。
クライアントの IP アドレス (ドット区切り 10 進表記)。
デフォルトのルーターの IP アドレス。
サブネットマスク (ドット区切り 10 進表記)。
DHCP クライアント識別子。
DHCP トランザクションで使用するホスト名。
HTTP プロキシサーバー指定 (IPADDR[:PORT])。
TFTP の最大リトライ回数。
DHCP の最大リトライ回数。
ネットワーク起動サポートパッケージによって処理される一連の引数は、次のいずれかの方法で指定します。
パッケージの open メソッドに渡される引数として
NVRAM 変数 network-boot-arguments 内に指定する引数として
network-boot-arguments 内に指定された引数は、パッケージの open メソッドに引数が 1 つも渡されなかった場合にのみ処理されます。
引数の値
protocol には、使用するアドレス検索プロトコルを指定します。rarp、dhcp のいずれかを指定できます。
このドキュメントで定められた新しい構文とスタイルを使って他の構成パラメタが指定されていた場合、protocol パラメタが指定されていなければ、手動の構成を意味します。
他の構成パラメタが 1 つも指定されていない場合や、他の構成パラメタが現在サポートされている位置に基づくパラメタ構文を使って指定されていた場合、protocol パラメタを指定しなければ、ネットワーク起動サポートパッケージは、プラットフォーム固有のデフォルトのアドレス検索プロトコルを使用することになります。
手動構成を行う場合、IP アドレス、起動ファイル名、起動ファイルイメージの提供元サーバーのアドレスの各情報を、クライアントに提供する必要があります。また、ネットワークの構成によっては、subnet-mask と router-ip も指定する必要があります。
protocol 引数が指定されなかった場合、ネットワーク起動サポートパッケージは、プラットフォーム固有のデフォルトのアドレス検索プロトコルを使用します。
tftp-server は、TFTP を使用する場合、ダウンロードするファイルを提供する TFTP サーバーの IP アドレス (標準 IPv4 のドット区切り 10 進表記) です。
DHCP を使用する場合、その値は、DHCP 応答に指定された TFTP サーバーの値よりも優先されます。
サーバーが引数として指定された場合と DHCP 応答内に指定された場合、TFTP RRQ はサーバーにユニキャストされます。それ以外の場合、TFTP RRQ はブロードキャストされます。
file には、TFTP を使用する場合は TFTP サーバーから読み込むファイルを指定し、HTTP を使用する場合は URL を指定します。ファイル名が URL である場合、すなわち、ファイル名が http: で始まる場合 (大文字小文字の区別あり)、HTTP が使用されます。
RARP と TFTP を使用する場合、このドキュメントで前述したように、デフォルトのファイル名はクライアントの IP アドレスの ASCII 16 進表記になります。
DHCP を使用する場合、この引数は、DHCP 応答に指定された起動ファイル名よりも優先されます。
DHCP と TFTP を使用する場合、デフォルトのファイル名は、root ノードの name プロパティから自動生成されます。その際、コンマ (,) はピリオド (.) に置き換えられます。
ファイル名をコマンド行から指定する場合、ファイル名にスラッシュ (/) を含めることはできません。
URL の形式については、RFC 2396 で説明されています。HTTP サーバーは、IP アドレス (標準 IPv4 のドット区切り 10 進表記) として指定する必要があります。ポート番号 (省略可能) は、10 進数として指定します。ポートを指定しなかった場合、ポート 80 (10 進) が使用されます。
指定された URL は「安全にエンコードされている」必要があります。というのも、パッケージは、指定された URL にエスケープエンコーディングを適用しないからです。コンマを含む URL は、引用符付きの文字列として指定する必要があります。それ以外の URL は、必ずしも引用符で囲む必要はありません。
host-ip には、クライアントすなわち起動対象システムの、IP アドレス (標準 IPv4 のドット区切り 10 進表記) を指定します。アドレス検索プロトコルとして RARP を使用している場合にこの引数を指定すると、RARP を使用する必要がなくなります。
DHCP を使用している場合に host-ip 引数を指定すると、クライアントは、RFC 2131 の「Externally Configured Network Address」で規定されている手順に従うようになります。
router-ip には、直接接続されたネットワーク上にあるルーターの IP アドレス (標準 IPv4 のドット区切り 10 進表記) を指定します。このルーターは、ネットワーク通信の最初の接続先として使用されます。この引数を指定した場合、そこで指定されたルーターは、DHCP 応答に指定された推奨ルーターよりも優先されます。
subnet-mask (標準 IPv4 のドット区切り 10 進表記で指定) は、クライアントが存在するネットワークのサブネットマスクです。サブネットマスクが (この引数または DHCP 応答を通じて) 指定されなかった場合、起動対象クライアントに割り当てられたアドレスに対するネットワーククラス (Class A、B、C のいずれか) に適するデフォルトマスクが使用されます。
client-id には、クライアントの一意に決まる識別子を指定します。DHCP クライアント識別子は、この値に基づいて生成されます。クライアント識別子の指定方法には、次の 2 つがあります。
識別子の ASCII 16 進表現
引用符付きの文字列
したがって、「client-id="openboot"」と「client-id=6f70656e626f6f74」はどちらも、DHCP クライアント識別子 006F70656E626F6F74 を表わします。
コマンド行から指定される識別子には、スラッシュ (/) や空白を含めることはできません。
DHCP クライアント識別子の最大長は、32 バイト (ASCII 16 進形式を使用する場合は 32 バイトを表す 64 文字) です。後者の形式を使用する場合、識別子を構成する文字数は偶数でなければなりません。有効な文字は、0 〜 9、a 〜 f、A 〜 F です。
クライアントが正しく認識されるためには、クライアントが接続されているサブネット上で、クライアント識別子が一意に決まる必要があります。この要件を満足する識別子を選択するのは、システム管理者の役割です。
コマンド行で指定されたクライアント識別子は、任意の DHCP メカニズムを使って指定された識別子よりも優先されます。
hostname (文字列として指定) には、DHCP トランザクション内で使用されるホスト名を指定します。この名前は、ローカルドメイン名で修飾してもしなくてもかまいません。ホスト名の最大長は、255 文字です。
hostname パラメタは、クライアントが、希望するホスト名を DHCP サーバーに提供することが必要なサービス環境で使用できます。クライアントが、希望するホスト名を DHCP サーバーに提供すると、DHCP サーバーは、そのホスト名とクライアントに割り当てられた IP アドレスを、DNS を使って登録します。
http-proxy は、次のようなホストの標準記法を使って指定します。
host [":" port] |
ここで、host には IP アドレス (標準 IPv4 のドット区切り 10 進表記) を指定し、port (省略可能) には 10 進数を指定します。port を指定しなかった場合、ポート 8080 (10 進) が使用されます。
tftp-retries は、TFTP 処理が失敗したとみなされるまでの、最大リトライ回数 (10 進で指定) です。デフォルトのリトライ回数は、無限回です。
dhcp-retriesは、DHCP 処理が失敗したとみなされるまでの、最大リトライ回数 (10 進で指定) です。デフォルトのリトライ回数は、無限回です。
x86 ベースのシステムでは、ブートストラップ処理は一次起動および二次起動という概念的に異なる 2 つのフェーズからなります。一次起動はシステムボード上の BIOS ROM および周辺ボード上の BIOS ROM 拡張機能で実装されています。x86 でのブートストラップ処理の特徴は、搭載されている周辺デバイスを制御するとソフトウェア割り込みによって入出力サービスを提供する機能に分けられます。起動処理はフロッピーディスク、ハードディスク、または CD-ROM から最初の物理セクターを読み込むことにより、開始されます。あるいは、システムまたはネットワークアダプタの BIOS がサポートしている場合には、ネットワーク起動サーバーからブートストラッププログラムを読み込むことで、開始されます。一次起動は、x86 リアルモードコード で実装されています。
二次起動は一次起動によって読み込まれます。二次起動は 32 ビットのページング保護モードで実装されています。二次起動はまた、x86 リアルモードで作成された周辺デバイス固有の BIOS 拡張機能を読み込んで使用します。二次起動は boot.bin と呼ばれ、ハードディスクまたは CD 上の UFS ファイルシステムから、または NFS プロトコルを使用して、LAN から読み込まれ、起動します。
二次起動は、システムに搭載されているデバイスを判別 (ユーザーの関与が必要) する Configuration Assistant プログラムを実行します。また、二次起動は、起動処理を制御する /etc/bootrc 内のスクリプトを読み込みます。このファイルには、boot interpreter コマンドが含まれています。これらのコマンドについては以降で説明しますが、これらのコマンドを修正することによって、デフォルト値を変更したり特定のマシンに合わせて調整したりできます。
標準の /etc/bootrc スクリプトは、オプションを指定して起動する場合は b、対話方式でインタプリタを呼び出す場合は i を入力するように、ユーザーに求めます。文字を入力せずに ENTER キーを押すと、デフォルトのカーネルが起動されます。それ以外の応答はすべてエラーとみなされ、スクリプトが再起動されます。
カーネルが読み込まれると、カーネルがオペレーティングシステムを起動し、必要なモジュールを読み込み、必要なファイルシステムをマウントして (vfstab(4) のマニュアルページを参照)、/sbin/init を実行し、システムを /etc/inittab で指定された initdefault 状態にします。inittab(4) のマニュアルページを参照してください。
OpenBoot PROM 指定を行います。たとえば、Desktop SPARC ベースのシステム上で /sbus/esp@0,800000/sd@3,0:a を指定した場合は、スロット 0 の esp ホストアダプタで、SCSI バス上の lun0 、ターゲット 3 の SCSI ディスク (sd) を意味します。
起動するスタンドアロンプログラムの名前。boot コマンド行または boot-file NVRAM 変数でファイル名を明示的に指定しないと、boot は適切なデフォルトファイル名を選択します。ほとんどのシステムでは、デフォルトのファイル名は 32 ビットカーネルです。32 ビットカーネルと 64 ビットカーネルを両方ともサポートできるシステムでは、32 ビットカーネルより 64 ビットカーネルが優先的に選択されます。boot はシステムにインストールされているソフトウェア、ハードウェアおよびファームウェアの能力、さらにユーザーが設定可能なポリシーファイルに基づいて、boot の実行に適したデフォルトの file を選択します。
boot プログラムはこのフラグを問い合わせと解釈し、スタンドアロンプログラムの名前を要求します。-a フラグはその後、スタンドアロンプログラムに渡されます。
Autoclient システムを起動する場合、このフラグによって boot プログラムがクライアントのローカルキャッシュを迂回して、ネットワーク経由でクライアントのファイルサーバーからすべてのファイルを読み込むようにします。Autoclient 以外のシステムでは、このフラグは無視されます。-f フラグはその後、スタンドアロンプログラムに渡されます。
詳細なデバッグ情報を表示します
default-file を明示的に指定します。一部のシステムでは、なにも指定されていない場合、boot は動的デフォルトファイルを選択します。このオプションを使用すると、 default-file を明示的に指定できます。 kadb(1M) を起動する場合に便利です。これは、kadb がデフォルトで、boot プログラムによってエクスポートされたデフォルトファイルを読み込むためです。
boot プログラムはすべての boot-flags を file に渡します。これらのフラグは、boot では解釈されません。デフォルトのスタンドアロンプログラムで使用できるオプションについては kernel(1M) および kadb(1M) のマニュアルページを参照してください。
boot プログラムはすべての client-program-args を file に渡します。これらの引数は、boot では解釈されません。
起動するスタンドアロンプログラムの名前。デフォルトではルートパーティションから /platform/platform-name/kernel/unix を起動しますが、コマンド行に他のプログラムを指定することもできます。
Autoclient システムを起動する場合、このフラグによって boot プログラムがクライアントのローカルキャッシュを迂回して、ネットワーク経由でクライアントのファイルサーバーからすべてのファイルを読み込むようにします。Autoclient 以外のシステムでは、このフラグは無視されます。 -f フラグはその後、スタンドアロンプログラムに渡されます。
boot プログラムはすべての boot-args を file に渡します。これらの引数は、boot では解釈されません。カーネルで使用できるオプションについては、kernel(1M) および kadb(1M) のマニュアルページを参照してください。
default-file を明示的に指定します。一部のシステムでは、なにも指定されていない場合、boot は動的デフォルトファイルを選択します。このオプションを使用すると、 default-file を明示的に指定できます。 kadb(1M) を起動する場合に便利です。これは、kadb がデフォルトで、boot プログラムによってエクスポートされたデフォルトファイルを読み込むためです。
PC 互換マシンの電源を投入すると、 BIOS ROM のシステムファームウェアが電源投入時自己診断テスト (POST) を実行し、周辺ボード上の ROM の BIOS 拡張機能を実行し、ソフトウェア割り込み INT 19h のブートストラップを起動します。INT 19h のハンドラは通常、標準の PC 互換起動処理を実行します。その場合、1 番目のフロッピーディスクドライブから最初の物理セクターを読み取ります。読み取れない場合は、1 番目のハードディスクから読み取ります。次にプロセッサは、メモリー内でこのセクターイメージの先頭バイトにジャンプします。
フロッピーディスクの最初のセクターには、マスター起動ブロックがあり、この起動ブロックがブートローダー strap.com のイメージを読み込み、さらに strap.com が二次起動プログラム boot.bin を読み込みます。 CD-ROM から起動する場合も、同様なシーケンスが実行されますが、マスター起動ブロックの位置および内容は、El Torito 仕様で規定されています。El Torito 準拠の起動でも、strap.com が読み込まれ、次にboot.bin が読み込まれます。
ハードディスクの最初のセクターには、マスター起動ブロックがあり、そのブロックにはマスター起動プログラムと FDISK テーブルが含まれており、PC プログラムがそのテーブルを管理しています。マスター起動プログラムは、FDISK テーブルでアクティブパーティションを見つけ、その最初のセクターを読み込み、メモリー内のセクターイメージの先頭バイトにジャンプします。標準の PC 互換ハードディスクでの起動処理はこれで完了します。
Solaris ソフトウェア用の x86 FDISK パーティションは、1 シリンダの起動スライスから始まり、最初のセクターにパーティション起動プログラム (pboot) が含まれています。第 2 および第 3 セクターにはそれぞれ、標準 Solaris ディスクラベルおよびボリューム構成テーブル (VTOC) があり、第 4 およびそれ以降のセクターには bootblk プログラムが含まれています。Solaris ソフトウェアの FDISK パーティションがアクティブパーティションの場合、マスター起動プログラム (mboot) は第 1 セクターのパーティション起動プログラムをメモリーに読み込んでそこにジャンプします。次に、 bootblk プログラムをメモリーに読み込んでそこにジャンプします。ドライブに FDISK パーティションが複数ある場合、ユーザーはアクティブパーティションのタイプに関係なく、別のパーティションを再起動できます。
(アクティブパーティションのタイプに応じて) bootblk または strap.com は、Solaris ルートスライスのファイルシステムから boot.bin を読み込み、メモリー内でその先頭バイトにジャンプします。
ネットワークから起動する場合、起動フロッピーまたは Intel の Preboot eXecution Environment (PXE) 規格のどちらを使用するか選択できます。起動フロッピーを使用してネットワークから起動する場合は、起動特性を編集し、net-config-strategy の設定値を変更することによって、必要なネットワーク構成ストラテジを選択できます。デフォルトでは、net-config-strategy は rarp に設定されています。設定できるのは rarp または dhcp のいずれかです。PXE を使用してネットワークから起動する場合、システムまたはネットワークアダプタの BIOS が DHCP を使用して、起動サーバー上の ネットワークストラップストラッププログラム (NBP) を見つけ、Trivial File Transfer Protocol (TFTP) を使用してそのプログラムを読み込みます。BIOS はメモリー内の NBP イメージの先頭バイトにジャンプすることによって NBP を実行します。NBP は DHCP を使用して、起動サーバー上で第 2 ブートストラップを見つけ、TFTP を使用して読み込んで実行します。
二次起動プログラムの boot.bin は、プロセッサを 32 ビットのページング保護モードに切り替え、限定的なマシン初期化処理を実行します。次に、 auto-boot? 変数 (eeprom(1M) のマニュアルページを参照) の状態に応じて、システムを自動的に起動する Configuration Assistant プログラムを実行するか、または使用できる起動デバイスの一覧を表示します。
ディスクターゲットデバイス (CDROM ドライブを含む) に UFS ファイルシステムが組み込まれていることが前提です。ネットワーク装置は、DHCP または逆アドレス解決プロトコル (RARP) のどちらか一方および bootparams RPC を使用して、マシンの IP アドレスおよびルートファイルシステムを提供するサーバーを検出するように構成できます。その後、ルートファイルシステムが NFS を使用してマウントされます。ルートのマウントが正常に完了すると、boot.bin がコマンドインタプリタを起動し、インタプリタが /etc/bootrc を解釈します。
x86 ベースのシステムではさまざまなハードウェアをサポートしなければならないため、起動処理に最大限の柔軟性が求められます。この柔軟性は、二次起動をプログラム可能にすることによって、ある程度達成されます。二次起動プログラムには、sh や csh のような単純なコマンド言語を受け付けるインタプリタが組み込まれています。主な違いはパイプライン、ループ、標準出力、出力の転送がサポートされていない点です。
起動インタプリタは、入力行を空白文字およびタブで区切られたワード単位に分割します。メタキャラクタはドル記号 ($)、単一引用符 (')、二重引用符 (")、番号記号 (#)、復帰改行、およびバックスラッシュ (\) です。前にバックスラッシュを指定すると、メタキャラクタが持つ特殊な意味を打ち消すことができます。復帰改行の前にバックス行ラッシュを指定すると、空白文字として扱われます。番号記号はコメント行の始まりを意味し、次に復帰改行が現れるまでコメントとして扱われます。
単一引用符または二重引用符のペアで囲まれた文字列は、1 つのワードの全体または部分を形成します。引用符で囲まれた文字列の中の空白および復帰改行記号は、ワードの一部になります。引用符で囲まれた文字列の中で、文字に引用符をつける場合は、その前にバックスラッシュを使用します。単一引用符の前にバックスラッシュを指定することによって、単一引用符で囲まれた文字列の中で引用符を使用できます。バックスラッシュを 2 つ続けて指定すると、単一のバックスラッシュになります。また、復帰改行の前にバックスラッシュを指定すると、文字列の中で復帰改行を使用できます。
boot には一連の変数があり、各変数には文字列値が割り当てられます。変数名の先頭文字は、英字でなければなりません。後続文字には英字、数字、または下線を使用できます。set コマンドを使用すると、変数の作成や、変数への値の割り当て、変数値の表示が行えます。変数を削除するには unset コマンドを使用します。
インタプリタが先行するバックスラッシュのないドル記号を検出すると、変数置換が実行されます。ドル記号に続く変数名が変数の値に置き換えられ、値の先頭から構文解析が続けられます。変数置換は、二重引用符で囲まれた文字列では実行されますが、単一引用符で囲まれた文字列では実行されません。変数名を中括弧で囲むと、後続文字と分離できます。
コマンドは、復帰改行文字で終了する一連のワードです。最初のワードはコマンド名で、以降のワードはコマンドに対する引数です。コマンドはすべて組み込みコマンドです。スタンドアロンプログラムは run コマンドで実行されます。
コマンドを if、elseif、else、および endif コマンドで囲むことによって、条件付きの実行が可能になります。
if expr1 . . . elseif expr2 . . . elseif expr3 . . . else . . . endif |
set、if、および elseif コマンドは、C プログラミング言語の構文および意味論を使用して算術式を評価します。||、&&、|、‸、&、==、!=、<、>、<=、>=、>>、<<、+、-、*、/、%、~、および ! という演算子を (、)およびコンマと同様に使用できます。符号付き 32 ビット整数演算が実行されます。
式はコマンド行全体が形成された後で構文解析されます。式の中の各トークンは、別個の引数ワードにし、空白文字でコマンド行上のすべてのトークンを区切る必要があります。
オペランドワードは、それに対する算術演算が実行される前に、文字列から符号付き 32 ビット整数値に変換されます。オプションの先行符号のうしろに先行する 0 があると 8 進数変換が行われ、先行する 0x または 0X がある場合は、16 進数変換が行われます。それ以外の場合は、10 進数変換が行われます。文字列が有効な整数にならない場合は、ゼロに変換されます。
文字列を操作できるように、いくつかの組み込み関数が用意されています。組み込み関数名はドットで始まります。これらの関数に対する文字列引数は、整数に変換されません。たとえば、演算子 - が文字列として扱われるようにするには、バックスラッシュを前につけ、そのバックスラッシュをもう 1 つのバックスラッシュでクォートする必要があります。また、ヌル文字列によって空白文字の引数が生成されるため、式で構文エラーが発生することがあるので注意してください。以下に例を示します。
if .strneq ( ${usrarg}X , \- , 1 )
起動インタプリタはシステムコンソールまたは 1 つ以上のファイルから入力を読み込みます。ソースコマンドは、インタプリタがファイルをメモリーに読み込み、ファイルの構文解析を開始するようにします。また、コンソールコマンドは、インタプリタがシステムコンソールからの入力を受け付けるようにします。EOF に到達すると、インタプリタはその前の入力ソースの構文解析を再開します。コンソール行の先頭に CTRL-D を入力すると、EOF として扱われます。
echo コマンドは引数をディスプレイに出力します。read コマンドはシステムコンソールを読み込み、引数変数にワード値を割り当てます。
verbose コマンドは、詳細表示モードのオン / オフを切り替えます。詳細表示モードでは、インタプリタは現在のソースファイルの行を表示し、変数置換後に実際に実行されたコマンドを表示します。
singlestep コマンドは、ステップ実行モードのオン / オフを切り替えます。ステップ実行モードでは、インタプリタは次のコマンドを処理する前に step ? を表示し、キーボード入力を待ちます。そのキーボード入力は破棄されます。ENTER を押すと、処理を進められるのでこれにより、詳細表示モードでは実行速度を遅くすることができます。
boot がインタプリタを最初に呼び出したとき、インタプリタはコンパイル時に設定された初期化文字列の実行を開始します。この文字列は通常、ルートファイルシステム内の起動スクリプトを実行する source /etc/bootrc\n からなります。
boot は run コマンドに対する引数を通じて、スタンドアロンプログラムに情報を渡します。スタンドアロンプログラムは var_ops() 起動サービス関数を使用して、起動インタプリタ変数を設定することにより、boot に情報を返すことができます。また、setprop() 起動サービス関数を使用してカーネルに情報を渡すこともできます。whoami 属性はスタンドアロンプログラムの名前に設定します。
CTRL-D を検出するまでコンソールからの入力を解釈します。
空白文字で区切られ、復帰改行で終わる引数を表示します。
空白文字で区切られているが復帰改行で終わらない引数を表示します。
属性 propname の値を変数 varname に割り当てます。長さゼロの属性値からはヌル文字列が生成されます。属性が存在しない場合、変数は設定されません。
変数 varname に属性 propname の値の長さを 16 進数で割り当てます。属性値の長さには終了を示すヌルが含まれます。属性が存在しない場合、変数は 0xFFFFFFFF (-1) に設定されます。
式 expr が真の場合、次の elseif、else、または endif までの命令を実行します。expr が偽の場合は、命令を実行しません。
それまでの if コマンドおよび elseif コマンドがすべてエラーとなり、なおかつ expr が真の場合、次の elseif、else、または endif までの命令を実行します。それ以外の場合は、命令を実行しません。
それまでの if コマンドおよび elseif コマンドがすべてエラーになった場合、次の elseif、else、または endif までの命令を実行します。それ以外の場合は、命令を実行しません。
囲んでいるブロックの実行モードに戻ります。
利用可能なすべての起動シェルコマンドの要約を示すヘルプ画面を表示します。
コンソールから行を読み取り、ワードに分割し、それらを値として変数 name1 (以下同様) に割り当てます。
read と同じですが、time で指定された秒数が経過したら、タイムアウトします。
スタンドアロンプログラム name を読み込んで制御を渡し、arg1 とそれに続く引数を渡します。
現在の変数およびその値をすべて表示します。
変数 name の値をヌル文字列に設定します。
変数 name の値を word に設定します。
変数 name の値を expr の値に設定します。expr は複数のワードで構成されていなければなりません。値は符号なしの 16 進数で符号化されます。たとえば、-1 は 0xFFFFFFFF で表されます。
テキストモードの表示属性を設定します。使用できる色は black、blue、green、cyan、red、magenta、brown、white、gray、lt_blue、lt_green、lt_cyan、lt_red、lt_magenta、yellow、および hi_white です。
属性 propname の値を word に設定します。
ステップ実行モードを有効にします。この場合、インタプリタは各コマンドを処理する前に step ? を表示し、キーボード入力を待ちます。ENTER キーを押すと次のコマンドが実行されます。
ステップ実行モードを無効にします。
ファイル name をメモリーに読み込み、解釈を開始します。EOF に到達したら、その前の入力ソースに戻ります。
変数 name を削除します。
詳細表示モードを有効にします。ソースファイルの各行と、実行されるコマンドが表示されます。
詳細表示モードを無効にします。
次の組み込み関数を式の中で使用できます。
string1 が字句構造上、string2 より小さい、等しい、または大きいことにより、ゼロより小さい、または大きい整数値を返します。
string1 が字句構造上、string2 より小さい、等しい、または大きいことにより、ゼロより小さい、または大きい整数値を返します。最大 n 文字が比較されます。
string1 が string2 に等しい場合は真、それ以外の場合は偽を返します。
string1 が string2 に等しい場合は真、それ以外の場合は偽を返します。最大 n 文字が比較されます。
addr から始めてメモリー内の位置を n 個走査し、string の開始位置を探します。string はヌルで終わっていなくてもかまいません。string が見つかった場合は真、見つからなかった場合は偽を返します。.strfind を使用すると、さまざまなマシンや周辺ボードを識別するために ROM BIOS および BIOS 拡張機能内の文字列を検索できます。
対話モードでシングルユーザーとしてデフォルトのカーネルを起動するには、ok プロンプトで次のいずれかを入力します。
boot -as boot disk3 -as |
デフォルトファイルとして 32 ビットカーネルを指定して kadb を起動するには、次のように入力します。
boot kadb -D kernel/unix |
32 ビットカーネルを明示的に起動するには、カーネルファイル名を指定する必要があります。そのため、32 ビットカーネルを対話モードでシングルユーザーとして起動するには、 ok プロンプトで次のいずれかを入力します。
boot kernel/unix -as boot disk3 kernel/unix -as |
64 ビットカーネルを明示的に起動するには、カーネルファイル名を指定する必要があります。そのため、64 ビットカーネルを対話モードでシングルユーザーとして起動するには、 ok プロンプトで次のいずれかを入力します。
boot kernel/sparcv9/unix -as boot disk3 kernel/sparcv9/unix -as |
さまざまな boot コマンド行呼び出し間の微妙な違いを示すために、ここでは network-boot-arguments が設定されており、以下のコマンドのように net に対してデバイス別名が設定されているものとします。
次のコマンドでは、デバイス別名内のデバイス引数が、デバイスドライバによって処理されます。ネットワーク起動サポートパッケージは、network-boot-arguments 内の引数を処理します。
boot net |
次のコマンドでは、デバイス引数なし、とみなされます。ネットワーク起動サポートパッケージは、network-boot-arguments 内の引数を処理します。
boot net: |
次のコマンドでは、デバイス引数なし、とみなされます。rarp は唯一のネットワーク起動サポートパッケージ引数であり、network-boot-arguments は無視されます。
boot net:rarp |
次のコマンドでは、指定されたデバイス引数が処理されます。ネットワーク起動サポートパッケージは、network-boot-arguments 内の引数を処理します。
boot net:speed=100,duplex=full |
次のコマンドでは、CD-ROM から wanboot バイナリが読み込まれます。読み込まれた wanboot は、DHCP の実行時にコマンドインタプリタを起動し、鍵やその他の必要な構成情報をユーザーが入力できるようにします。
boot cdrom -F wanboot -o dhcp,prompt |
ディスクまたは CD から起動する 第 2 レベルのプログラム
initedefault 状態が指定されているテーブル
システムを initedefault 状態に移行するプログラム
boot ポリシーファイルの主パス名および代替パス名。ポリシーファイルはすべてのプラットフォーム上で実装されているわけではありません。
システムを起動するデフォルトのプログラム
「注意事項UltraSPARC システムの起動」を参照してください。
uname(1), eeprom(1M), init(1M), installboot(1M), kadb(1M), kernel(1M), shutdown(1M), uadmin(2), bootparams(4), inittab(4), vfstab(4), wanboot.conf(4), filesystem(5)
RFC 903, A Reverse Address Resolution Protocol, http://www.ietf.org/rfc/rfc903.txt
RFC 2131, Dynamic Host Configuration Protocol, http://www.ietf.org/rfc/rfc2131.txt
RFC 2132, DHCP Options and BOOTP Vendor Extensions,http://www.ietf.org/rfc/rfc2132.txt
RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax, http://www.ietf.org/rfc/rfc2396.txt
『Sun Hardware Platform Guide』
『OpenBoot Command Reference Manual』
boot ユーティリティは、起動可能プログラムとして使用できるファイルかどうか判別できません。起動不可能なファイルを起動するように要求された場合、 boot ユーティリティはそのファイルを読み込み、そのファイルに制御を渡します。その場合の結果は予測できません。
platform-name を調べるには、uname(1) の -i オプションを使用します。hardware-class-name を調べるには、uname(1) の -m オプションを使用します。
一部のプラットフォームでは、64 ビットカーネルを実行するために、ファームウェアのアップグレードが必要な場合があります。詳細は『Sun Hardware Platform Guide』を参照してください。64 ビットカーネルパッケージがインストールされており、boot が、そのプラットフォームで 64 ビットカーネルを実行するにはファームウェアのアップグレードが必要であることを検出した場合、コンソールにメッセージが表示され、デフォルトのファイルとして 32 ビットカーネルが選択されます。
200MHz 以下の UltraSPARC-1 プロセッサを搭載したシステムでは、ユーザーが、プロセッサを停止することが可能な 64 ビットプログラムを実行してしまうことがあります。32 ビットカーネルで 64 ビットプログラムを実行することはできないので、このようなシステムでは、32 ビットカーネルがデフォルトのファイルとして選択されます。
問題を引き起こすコードシーケンスはきわめてまれなもので、コンパイラによって生成される可能性はほとんどありません。この問題を再現するためには、特殊なアセンブラコードを作成する必要があります。手作業で作成された適切なアセンブラルーチンがこのコードシーケンスを使用することはまずありません。
ユーザーが偶然または故意に、プロセッサの停止を引き起こすプログラムを実行してしまうリスクを甘受するのであれば、boot ポリシーファイルを変更することによって 64 ビットカーネルを実行するという選択も可能です。/platform/platform-name/boot.conf を編集し、以下の例に示すように、ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU という変数の値を true に設定したコメント行を解除します。
ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true
詳細は 『Sun Hardware Platform Guide』を参照してください。
各国語キーボードから「-」キーがなくなったので、このようなキーボードを使用する x86 ベースのシステムでは、代わりのキーを使用して boot コマンドに引数を渡してください。数字キーパッドの - を使用してください。キーボードの対応言語別に、起動時に - の代わりに使用するキーを示します。
代替キー
'
'
+
?
?
たとえば、スウェーデン語対応のキーボードの場合、b -r は b +r と打鍵します。画面には b -r が表示されます。
名前 | 形式 | 機能説明 | オプション | x86 での起動シーケンスの詳細 | x86 での一次起動 | x86 での二次起動 | 使用例 | ファイル | 関連項目 | 警告 | 注意事項