ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 カスタムインストールイメージの作成 Oracle Solaris 11.1 Information Library (日本語) |
ディストリビューションコンストラクタは、マニフェストファイルと呼ばれる XML ファイルに指定された設定に基づいてイメージを作成します。マニフェストファイルには、ディストリビューションコンストラクタを使用して作成する ISO イメージの内容およびパラメータの仕様が記述されています。distribution-constructor パッケージには、カスタム x86 ライブメディア ISO、x86 または SPARC 自動インストール ISO イメージ、x86 または SPARC テキストインストール ISO イメージを作成する際に使用できるサンプルマニフェストが提供されています。
各マニフェストファイルの要素には、必要とする種類の ISO イメージを作成するためのデフォルト値が事前設定されています。マニフェストファイル内の事前設定要素を手動で編集することで、結果として生成されるイメージをカスタマイズできます。また、カスタムスクリプトを作成すれば、さらにイメージを変更できます。次に、マニフェストファイルで新しいスクリプトを参照してください。
distribution-constructor パッケージには、次の表に示すサンプルマニフェストファイルがあります。
表 2-2 サンプルマニフェスト
|
この手順では、カスタムイメージを作成および構築する一般的なステップについて説明します。
パッケージマネージャーツールを使用して、必要なパッケージをインストールできます。パッケージマネージャーは、Oracle Solaris オペレーティングシステムのデスクトップのメニューバーから利用できます。メニューバーで、「システム」>「システム管理」>「パッケージマネージャー」の順に選択します。
または、次のような IPS コマンドを使用してこのパッケージをインストールしてください。
# pkg install distribution-constructor
distro_const コマンドを使用してイメージを作成するときに、このマニフェストファイルの名前を指定します。
注 - 元のマニフェストファイルおよびデフォルトのスクリプトをコピーするときは、その前に必ずバックアップを作成してください。
たとえば、マニフェストのターゲット要素を編集すれば、イメージを構築できる構築領域に別の場所を指定できます。さらに、発行元をチェックして、システムが、イメージの構築に必要なパッケージをダウンロードするために、その発行元に連絡できるようにすることができます。必要に応じて、ソフトウェア名要素を編集して、別の発行元およびリポジトリの場所を指定できます。
詳細は、「マニフェストの内容の変更」および dc_manifest(4) のマニュアルページを参照してください。
新しいスクリプトを作成する場合は、マニフェストファイル内の実行セクションのスクリプト参照を更新します。
詳細は、「カスタムスクリプトの作成と使用」を参照してください。
手順については、第 3 章イメージの構築を参照してください。
各マニフェストファイルのすべてのフィールドには、必要とする種類の ISO イメージを作成するためのデフォルト値が事前設定されています。マニフェストファイル内の事前設定フィールドを手動で編集することで、結果として生成されるイメージをさらにカスタマイズできます。
次の表で、サンプルマニフェストファイルの主な要素について説明します。
表 2-3 マニフェスト要素
|
次の要素を使用して、構築するイメージのカスタム名またはデフォルト名を指定します。
<distro name="Oracle_Solaris_Text_X86" add_timestamp="false">
イメージの構築作業を続けて実行して複数の増分イメージを保持する場合、タイムスタンプ変数を「true」に変更すると、タイムスタンプが各イメージの名前に自動的に追加されます。
HTTP プロキシを指定する必要がある場合、プロキシ変数を含む distro name 要素のコメントを解除して、プロキシの場所を指定します。
このブートメニュー要素はイメージに適用されるブートメニューの変更を指定します。
次の例では、「boot1」というタイトルの特殊なブートメニューがイメージに適用されます。タイムアウト属性は、デフォルトのブートエントリが自動的に有効にされるまでの時間を指定します。
<boot_mods title="boot1" timeout="5">
ブートメニュー要素内では、新しい各エントリに対して新しい boot_entry 要素を追加することによって個々のブートメニューエントリを追加できます。エントリは、各ブートエントリの「start」または「end」の insert_at 属性値に基づいた順序でブートメニューに順次追加されます。
注 - 新しいエントリは、既存の「with magnifier」エントリの前に追加します。
個々の boot_entry 要素については、次の例を参照してください。
<boot_entry> <title_suffix>with screen reader</title_suffix> <kernel_args>-B assistive_tech=reader</kernel_args> </boot_entry>
詳細は、dc_manifest(4) のマニュアルページを参照してください。
target 要素はカスタマイズできます。この要素は、構築に使用する ZFS 構築データセットを定義します。このデータセットは、イメージが作成される場所です。有効なデータセットの場所を指定する必要があります。システムで保持する必要がある内容が構築によって破棄されないように、デフォルトの構築領域をチェックする必要があります。必要に応じて、構築領域を変更します。
注 - ファイルシステム名には、zpool という名前を含めないでください。
次の例では、サンプルのターゲット要素を示します。
<target> <logical> <zpool action="use_existing" name="rpool"> <dataset> <filesystem name="dc/sample-dataset-location" action="preserve"/> </dataset> </zpool> </logical> </target>
次の要素には、イメージ構築のためにダウンロードおよび使用するパッケージをディストリビューションコンストラクタが取得できる発行元を指定します。
<software name="transfer-ips-install">
このソフトウェア名のセクション内にネストされているソース要素内で、発行元名要素と起点名要素を編集し、使用する発行元とパッケージリポジトリが存在する場所を指定します。リポジトリの場所は、NFS パスまたはローカルディレクトリとすることができます。複数の発行元を一覧表示できます。ディストリビューションコンストラクタがインストールするパッケージの検出を試みると、ここに一覧表示されている順序で発行元が検索されます。
発行元のミラーを指定する必要がある場合は、ミラー名要素をコメント解除して編集します。
次の例は、ソフトウェア名要素の内部で見られるサンプルソース要素を示します。
<source> <publisher name="publisher1"> <origin name="http://example.oracle.com/primary-pub"/> <mirror name="mirror.example.com"/> </publisher> <publisher name="publisher2"> <origin name="http://example2.com/dev/solaris"></origin> </publisher> <publisher name="publisher3.org"> <origin name="http://example3.com/dev"></origin> </publisher> </source>
発行元の使用の詳細は、『Oracle Solaris 11.1 ソフトウェアパッケージの追加および更新』を参照してください。
install 属性を持つ software_data 要素は、使用しているマニフェストに応じて、特定の種類のイメージを構築するためにインストールされるパッケージのセットを一覧表示します。たとえば、dc_livecd.xml マニフェストは、ライブメディアイメージの構築に必要なパッケージを一覧表示します。各名前タグは、1 つのパッケージの名前、または多数のパッケージを含む 1 つのグループパッケージの名前を一覧表示します。
<software_data action="install"> <name>pkg:/group/system/solaris-desktop</name> <name>pkg:/system/install/gui-install</name> <name>pkg:/system/install/media/internal</name> </software_data>
イメージに追加するパッケージがある場合、パッケージごとに名前タグを追加することによってパッケージ名を追加します。
デフォルトでは、指定されたリポジトリで利用できる最新のパッケージバージョンがインストールされます。他のバージョンが必要な場合、次の形式を使用してパッケージ参照にバージョン番号を追加します。
<name>pkg:/group/system/solaris-desktop@0.5.11-0.build#</name>
注 - システム上の Oracle Solaris のリリースバージョンは、ディストリビューションコンストラクタで作成しようとしているイメージのリリースバージョンと同じである必要があります。
また、自動インストールサービスのマニフェストファイルでの指定に従って、競合するバージョンを持つ他のパッケージがインストールされている場合は、指定された特定のバージョンのパッケージがインストールされない可能性があります。『Oracle Solaris 11.1 システムのインストール』の第 9 章「インストールのカスタマイズ」を参照してください。
例 2-1 パッケージおよび追加発行元の追加
この例では、mypublisher という 2 番目の発行元が指定されます。mypackage1 および mypackage2 という追加パッケージも指定されます。
構築プロセス中に、発行元は一覧表示される順序でチェックされます。1 番目の発行元でパッケージが見つからない場合は、次の発行元で指定されたパッケージが検索されます。
<software name="transfer-ips-install" type="IPS"> <destination> <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="/usr/share/distro_const/lang_facets.xml"/> </destination> <source> <publisher name="solaris"> <origin name="http://pkg.oracle.com/solaris/release"/> </publisher> <publisher name="mypublisher"> <origin name="http://mypublisher.company.com"/> </publisher> </source> <software_data action="install"> <name>pkg:/group/system/solaris-large-server</name> <name>pkg:/system/install/text-install</name> <name>pkg:/system/install/media/internal</name> <name>pkg:/mypackage1</name> <name>pkg:/mypackage2</name> </software_data> </software>
アンインストール属性を持つ software_data 要素は、個々のパッケージのアンインストールまたはグループパッケージ定義のアンインストールに使用できます。
注 - グループパッケージ定義は、そのグループ内の個々のパッケージすべてを、グループとしてのみ実行できる 1 つの単位に結合します。
アンインストール属性は、全部のグループパッケージをインストールするが、1 つ以上の個々のパッケージをそのグループから省略したい場合に特に便利です。アンインストール属性を使用して、最初にグループパッケージ定義を削除することができます。次に、グループパッケージの一部としてインストールされた個々のパッケージをアンインストールできます。
たとえば、ライブメディアインストールイメージを構築することを選択する場合があります。デフォルトのライブメディアインストールイメージには、デスクトップグループパッケージ内に Firefox ブラウザが含まれています。
構築するイメージから Firefox ブラウザを省略する場合、次のことを実行します。
通常のライブメディアデスクトップ用のすべてのソフトウェアを含む solaris-desktop グループパッケージをインストールします。「インストールするパッケージの一覧表示」を参照してください。
アンインストール属性を次のように使用して、solaris-desktop グループパッケージ定義をアンインストールします。
<software_data action="uninstall"> <name>pkg:/group/system/solaris-desktop</name> </software_data>
注 - グループパッケージに対するアンインストールアクションは、グループパッケージ定義のみアンインストールします。そのグループ内の個々のパッケージは、最初のステップに従ってインストールされたままになります。
これで個々のパッケージがグループ定義に結合されなくなったため、アンインストール属性を再度使用して Firefox パッケージをアンインストールできます。
<software_data action="uninstall"> <name>pkg:/web/browser/firefox</name> </software_data>
また、ステップ 2 と 3 を次のようにして 1 つのエントリに組み合わせることもできます。
<software_data action="uninstall"> <name>pkg:/group/system/solaris-desktop</name> <name>pkg:/web/browser/firefox</name> </software_data>
アンインストールするパッケージをアンインストールセクションの終わりに追加します。
ディストリビューションコンストラクタを使用して作成されたイメージでシステムがインストールされた後、software name 要素がシステムに影響を与えます。
<software name="set-ips-attributes">
ダウンロードおよびインストールする追加パッケージにインストール済みシステムがアクセスできる場所を指定するための、発行元名とオプションのミラー名のタグを提供します。
この要素では、IPS 属性も設定できます。IPS プロパティーの詳細は、pkg(1) のマニュアルページを参照してください。
マニフェストの execution 要素は、イメージ作成処理中に実行される一連のチェックポイントを一覧表示します。チェックポイントは、このセクションに一覧表示された順序で実行されます。デフォルトのインストールイメージの構築に必要なデフォルトのチェックポイントは、各マニフェストに含まれています。
イメージ作成処理中、チェックポイントはマニフェストに指定されている構築領域の内容を変更します。
構築領域には、次のディレクトリがあります。
ZFS dataset/build_data/pkg_image
ZFS dataset/build_data/boot_archive
ここで、ZFS dataset 変数は、マニフェストのターゲット要素で指定されます。
構築プロセス中、最終的なイメージに含められるすべての内容は、pkg_image ディレクトリに追加されます。異なる boot_archive ディレクトリ内にあるファイルは構築プロセス中に使用されてブートアーカイブファイルが作成され、これも pkg_image ディレクトリに追加されます。
次の一覧表示は、ほとんどのマニフェストでチェックポイントが実行される順に、デフォルトの各チェックポイントの簡単な説明を提供します。
transfer-ips-install – このチェックポイントでは、ディストリビューションコンストラクタは IPS の発行元と連絡を取り、マニフェストの software_data 要素に一覧表示されているパッケージをイメージに追加します。
set-ips-attributes – このチェックポイントでは、コンストラクタはインストール対象システムによって使用される発行元を設定します。このチェックポイントによって設定される値は、自動インストールイメージを作成する場合は関係ありません。
pre-pkg-img-mod – このチェックポイントでは、コンストラクタはマニフェストの configuration 要素で指定された SMF サービスファイルをイメージにインポートします。また、コンストラクタはイメージを最適化するために一部のファイルを変更します。
このチェックポイントまでのすべての変更は、構築されるイメージと、ルートアーカイブの両方に含められます。カスタムスクリプトからの変更が、ルートアーカイブとイメージの両方に組み込まれていることを確認する場合は、この pre-pkg-img-mod チェックポイントの前か直後にカスタムスクリプト用の新規チェックポイントを追加するようにします。
ba-init – このチェックポイントでは、コンストラクタはマニフェストの ba-init セクションに一覧表示されているファイルをルートアーカイブに取り込みます。これらのファイルは pkg_image 領域から root_archive 領域にコピーされます。
ba-config – このチェックポイントでは、コンストラクタはルートアーカイブにコピーされたファイルに追加の変更を実行します。コンストラクタはルートアーカイブのサイズを最小限に抑えるために、ブートプロセスの後半まで不要な他のファイルへのシンボリックリンクを作成します。
ba-arch – このチェックポイントでは、コンストラクタはルートアーカイブをパックし、pkg_image ディレクトリ内でルートアーカイブをファイルとして作成します。またコンストラクタは、構築されるシステムの種類に固有となるルートアーカイブへのすべての最適化を適用します。このチェックポイント以降では、ルートアーカイブはすでにパックされているため、カスタムスクリプトによるブートアーカイブ指定への変更はルートアーカイブに組み込まれません。
grub-setup – このチェックポイントでは、コンストラクタはマニフェストの boot_entry セクションで指定されるエントリに基づいて、GRUB2 メニューを設定します。このチェックポイントは、x86 システムのイメージにのみ適用されます。
pkg-img-mod – このチェックポイントでは、コンストラクタは構築されるイメージのメインアーカイブを作成し、pkg_image 領域を最適化します。コンストラクタは pkg_image ディレクトリ内のファイルを移動し、イメージ用のアーカイブを作成します。pkg_image ディレクトリに含まれるすべての内容がイメージに含められます。このチェックポイント以降のすべての追加はイメージに含められません。
create-iso – このチェックポイントは、pkg_image ディレクトリに含まれるすべての内容を含む .iso ファイルを作成します。
各チェックポイントセクションに含まれている特定のフィールドを見ると、各チェックポイント名のタグにはチェックポイントスクリプトの場所を指定する mod-path 属性が含まれています。
一部のデフォルトチェックポイントタグには、デフォルト値を持つ引数が含まれています。dc_ai_sparc.xml サンプルマニフェストの次のチェックポイント例では、イメージ構築のためのブートアーカイブを作成し、そのタスクを実行するスクリプトを指定します。チェックポイント例には、引数ごとに特定の値が指定された引数フィールドも含まれています。
<checkpoint name="ba-arch" desc="Boot Archive Archival" mod_path="solaris_install/distro_const/checkpoints/ boot_archive_archive" checkpoint_class="BootArchiveArchive"> <kwargs> <arg name="size_pad">0</arg> <arg name="bytes_per_inode">0</arg> <arglist name="uncompressed_files"> <argitem>etc/svc/repository.db</argitem> <argitem>etc/name_to_major</argitem> <argitem>etc/minor_perm</argitem> <argitem>etc/driver_aliases</argitem> <argitem>etc/driver_classes</argitem> <argitem>etc/path_to_inst</argitem> <argitem>etc/default/init</argitem> <argitem>etc/nsswitch.conf</argitem> <argitem>etc/passwd</argitem> <argitem>etc/shadow</argitem> <argitem>etc/inet/hosts</argitem> </arglist> </kwargs> </checkpoint>
この例で示すように、kwargs 要素には、構築中にチェックポイントに渡す必要があるキーワード引数が含まれています。kwargs 要素には、チェックポイントに渡される個々のキーワードを指定する際に使用可能な arg name 要素が含まれています。さらに、arglist 要素には、チェックポイントに渡される複数の argitem 値の一覧も含まれています。この例には、arglist 要素の未圧縮ファイルの一覧が含まれています。
各 kargs 一覧項目は二重引用符で囲まれています。二重引用符が使用されていない場合、または文字列全体が 1 組の二重引用符で囲まれている場合は、スペースおよび改行を含む文字列全体が 1 つの引数と解釈されます。引数をコンマで区切らないでください。
イメージの構築中に使用されるカスタムスクリプトを作成する場合、スクリプトの場所を指示するチェックポイント要素を追加する必要があります。カスタムスクリプトのチェックポイントには、カスタムスクリプトの場所を示す args 要素のみが必要です。詳細および例については、「カスタムスクリプトの作成と使用」を参照してください。
特定のチェックポイントで構築処理の一時停止と再開を制御するには、distro_const コマンドオプションを使用します。「段階的にイメージを構築する方法」を参照してください。
例 2-2 SVR4 パッケージの追加
この例では、新しいチェックポイントがマニフェストに追加されます。この新しいチェックポイントは、イメージに追加される SVR4 パッケージとその場所を一覧表示します。その後、この新しいチェックポイントは実行セクションで参照されます。
最初に、新規 software 要素を追加することによって、新しいチェックポイントが作成されます。このチェックポイントには、ソフトウェアタイプとして SVR4、パッケージを検索する場所、およびパッケージをインストールする場所を指定します。
さらに、software_data 要素には、インストールされる特定の SVR4 パッケージが一覧表示されます。
<software name=transfer-svr4-install type="SVR4"> <destination> <dir path={PKG_IMAGE_PATH}/> </destination> <source> <dir path="/path/to/packages"/> </source> <software_data action="install"> <name>SUNWpackage1</name> <name>SUNWpackage2</name> </software_data> </software>
{PKG_IMAGE_PATH} および {BOOT_ARCHIVE} の値は、チェックポイントに含まれる場合、distro_const ユーティリティーによって ZFS dataset /build_data/pkg_image および ZFS dataset /build_data/boot_archive にそれぞれ置き換えられます。この例では、SVR4 パッケージが ZFS dataset /build_data/pkg_image にインストールされます。
最後に、この新しいチェックポイントは実行セクションで参照されます。
<execution stop_on_error="true"> <checkpoint name="transfer-ips-install" desc="Transfer pkg contents from IPS" mod_path="solaris_install/transfer/ips" checkpoint_class="TransferIPS"/> <checkpoint name="set-ips-attributes" desc="Set post-install IPS attributes" mod_path="solaris_install/transfer/ips" checkpoint_class="TransferIPS"/> <checkpoint name="transfer-svr4-install" desc="Transfer pkg contents from SVR4 packages" mod_path="solaris_install/transfer/svr4" checkpoint_class="TransferSVR4"/>
ソフトウェア名はチェックポイント名と一致する必要があることに注意してください。この例では、どちらも「transfer-svr4–install」です。
ディストリビューションコンストラクタでは、構築するイメージの種類に基づいて、イメージ作成プロセス中にカスタマイズするために使用する追加スクリプトを指定できます。マニフェストファイルはスクリプトを示し、スクリプトは汎用イメージをメディア固有の配布用に変換します。これらのスクリプトは、マニフェストファイルの実行セクションで参照されます。カスタムスクリプトチェックポイントはいくつでも指定できます。
注 - スクリプトのサポートは、アプリケーションパッケージに付属している未変更のデフォルトのスクリプトに限定されます。デフォルトのスクリプトをカスタマイズする場合は、まず、元のスクリプトのバックアップを作成してください。
また、マニフェストファイルの実行セクションで指定されているスクリプトは、イメージ作成プロセス中に実行されることに注意してください。実行セクションは、インストール前処理スクリプトまたはインストール後処理スクリプトを参照しません。
独自のカスタムスクリプトを作成する場合は、次の点に注意してください。
スクリプトには、Python プログラム、シェルスクリプト、またはバイナリを使用できます。
スクリプトは、マニフェストファイルの実行セクションに記載されている順に実行されます。
スクリプト (シェルと Python の両方のモジュール) 内で実行されるコマンドの標準出力 (stdout) およびエラー出力 (stderr) が、構築の完了時または試行時に報告するログファイルで取得されます。
root 役割を引き受けるユーザーがこれらのスクリプトを実行できることを確認してください。
新しいチェックポイントの設定先を決定するには、「構築チェックポイントの設定」に記載されているデフォルトチェックポイントの説明を確認してください。
スクリプトには必ずフルパスを指定してください。チェックポイントは、マニフェストの実行セクションに記載されている順に実行されます。
マニフェストファイルの完了セクションに新しいスクリプトの参照を追加するときには、そのスクリプトのタスクの実行前または実行後にイメージ構築を一時停止するのに使用するチェックポイント名を指定する必要があります。必要に応じて、チェックポイント名に関連付けたカスタムメッセージを指定することもできます。このメッセージを省略すると、スクリプトのパスがデフォルトのチェックポイントメッセージとして使用されます。構築プロセス中にチェックポイントが実行されると、チェックポイントメッセージが表示されます。
注 - チェックポイント名には数値でなく意味のある名前を使用してください。新しいスクリプトが追加された場合に、新しいスクリプトの新しいチェックポイントが使われるため、番号を使用したチェックポイントの秩序は乱れます。
次のチェックポイントの例では、「my-script」という名前のカスタムスクリプトが参照されます。
<checkpoint name="my-script" desc="my new script" mod_path="solaris_install/distro_const/checkpoints/custom_script" checkpoint_class="CustomScript"> <args>/tmp/myscript.sh</args> </checkpoint>
ここで、引数セクションの構築パラメータとして {PKG_IMAGE_PATH} が指定されます。
<checkpoint name="my-script" desc="my new script" mod_path="solaris_install/distro_const/checkpoints/my_script" checkpoint_class="CustomScript"> <args>/tmp/myscript.sh {PKG_IMAGE_PATH}</args> </checkpoint>
{PKG_IMAGE_PATH} および {BOOT_ARCHIVE} の値は、チェックポイントに含まれる場合、distro_const ユーティリティーによって ZFS dataset/build_data/pkg_image および ZFS dataset/build_data/boot_archive にそれぞれ置き換えられます。
イメージは 1 ステップで構築できます。または、構築のステータスをチェックするために、さまざまなチェックポイントで構築を停止および再開できます。
手順については、第 3 章イメージの構築を参照してください。
構築出力には、ログファイルの場所が表示されます。