ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
アプリケーションパッケージ開発者ガイド Oracle Solaris 10 1/13 Information Library (日本語) |
このセクションでは、オプションのパッケージインストールスクリプトについて説明します。pkgadd コマンドでは、パッケージ情報ファイルが入力として使用され、パッケージのインストールに必要なすべてのアクションが自動的に実行されます。パッケージインストールスクリプトを提供する必要はありません。ただし、カスタマイズしたインストール手順を作成する場合は、インストールスクリプトを使用して実現できます。インストールスクリプトには次の条件があります。
Bourne シェル (sh) で実行可能である必要があります。
Bourne シェルのコマンドとテキストで構成します。
#!/bin/sh シェル識別子を含める必要はありません。
実行可能ファイルである必要はありません。
カスタマイズしたアクションを実行できるインストールスクリプトには 4 種類あります。
request スクリプトは、パッケージをインストールしている管理者に、環境変数の割り当てまたは再定義のためのデータを要求します。
checkinstall スクリプトは、ターゲットシステムで必要なデータがあるかを検査し、パッケージの環境変数を設定または変更して、インストールを続行するかどうかを判定します。
注 - checkinstall スクリプトは、Solaris 2.5 およびその互換リリース以降で使用できます。
手続きスクリプトは、パッケージのインストールまたは削除の前後に呼び出される手続きを特定します。手続きスクリプトには、preinstall、postinstall、preremove および postremove の 4 種類があります。
クラスアクションスクリプトでは、インストールまたは削除の間にファイルのクラスに適用するべき 1 つまたは複数のアクションを定義します。独自のクラスを定義できます。または、4 つの標準クラス (sed、awk、build、および preserve) のいずれかを使用することもできます。
使用するスクリプトの種類は、インストールプロセスのどの時点でスクリプトのアクションが必要かによって決まります。パッケージのインストールでは、pkgadd コマンドは次の手順を実行します。
request スクリプトを実行します。
checkinstall スクリプトを実行します。
checkinstall スクリプトは、ファイルシステムのデータを収集し、環境変数の定義を作成または変更して、以降のインストールを制御できます。パッケージ環境変数の詳細については、「パッケージ環境変数」を参照してください。
インストールするクラスごとに、パッケージオブジェクトをインストールします。
これらのファイルのインストールはクラスごとに行われ、それに従ってクラスアクションスクリプトが実行されます。対象となるクラスのリストおよびインストールの順序は、最初は pkginfo ファイルの CLASSES パラメータで定義されています。ただし、request スクリプトまたは checkinstall スクリプトで、CLASSES パラメータの値を変更できます。インストール時のクラスの処理方法の詳細については、「パッケージインストール時のクラスの処理方法」を参照してください。
パッケージを削除するときは、pkgrm コマンドで次の手順が実行されます。
各クラスのパッケージオブジェクトを削除します。
削除もクラスごとに行われます。削除スクリプトは、CLASSES パラメータで定義されている順序に基づいて、インストールの逆の順序で処理されます。インストール時のクラスの処理方法の詳細については、「パッケージインストール時のクラスの処理方法」を参照してください。
ハードリンクを削除します。
通常ファイルを削除します。
シンボリックリンク、デバイス、および名前付きパイプを削除します。
request スクリプトは、パッケージの削除時には処理されません。ただし、このスクリプトの出力はインストールされたパッケージに保持されており、削除スクリプトで利用できます。request スクリプトの出力は、環境変数のリストです。
次の環境変数のグループは、すべてのインストールスクリプトで使用できます。一部の環境変数は、request スクリプトまたは checkinstall スクリプトで変更できます。
request スクリプトまたは checkinstall スクリプトでは、pkginfo ファイルに含まれる標準パラメータのうち、必須パラメータ以外のいずれかのパラメータを設定または変更できます。標準インストールパラメータの詳細については、pkginfo(4) のマニュアルページを参照してください。
注 - BASEDIR パラメータは、Solaris 2.5 リリースおよびその互換リリース以降でのみ変更できます。
pkginfo ファイルで値を割り当てることにより、独自のインストール環境変数を定義できます。このような環境変数の名前は、先頭が大文字の英数字でなければなりません。これらの環境変数はすべて、request スクリプトまたは checkinstall スクリプトで変更できます。
request スクリプトと checkinstall スクリプトのどちらでも、環境変数に値を割り当ててインストール環境に設定することで、新しい環境変数を定義できます。
次の表は、環境を通じてすべてのインストールスクリプトで使用できる環境変数の一覧です。これらの環境変数はいずれも、スクリプトでは変更できません。
|
スクリプトから 2 つのコマンドを使用して、パッケージについての情報を要求できます。
pkgparam コマンドは、要求された環境変数の値を返します。
詳細は、pkginfo(1) マニュアルページ、pkgparam(1) マニュアルページ、および第 4 章パッケージの確認と転送を参照してください。
各スクリプトは、次の表に示す終了コードのいずれかで終了する必要があります。
表 3-2 インストールスクリプトの終了コード
|
インストールスクリプトによって返される終了コードの例については、第 5 章パッケージ作成のケーススタディーを参照してください。
注 - パッケージとともに提供されるすべてのインストールスクリプトは、prototype ファイルにエントリするようにしてください。ファイルタイプは、i (パッケージインストールスクリプトの場合) としてください。
request スクリプトは、パッケージをインストールしている管理者とパッケージが直接対話できる唯一の手段です。たとえば、このスクリプトを使用すると、パッケージのオプション部分をインストールするべきかどうかを、管理者に尋ねることができます。
request スクリプトの出力は、環境変数とその値のリストでなければなりません。このリストは、pkginfo ファイルで作成したいずれかのパラメータおよび CLASSES と BASEDIR パラメータを含むことができます。また、リストでは、どこでも定義されていない環境変数を使用することもできます。ただし、実際に使用するには、pkginfo ファイルでデフォルト値を提供するようにしてください。パッケージ環境変数の詳細については、「パッケージ環境変数」を参照してください。
request スクリプトで環境変数に値を割り当てるときは、pkgadd コマンドやほかのパッケージスクリプトでこの値を使用できるようにする必要があります。
request スクリプトでは、どのファイルも変更できません。このスクリプトは、パッケージをインストールしている管理者と対話し、その対話に基づいて環境変数割り当てのリストを作成するだけです。request スクリプトは、特権を持たないユーザー noaccess が存在する場合は、そのユーザーとして実行されます。それ以外の場合は、スクリプトは root として実行されます。
pkgadd コマンドは、スクリプトの応答ファイルを示す 1 つの引数を指定して、request スクリプトを呼び出します。応答ファイルには、管理者の応答が格納されます。
request スクリプトは、パッケージ削除時には実行されません。ただし、このスクリプトによって割り当てられた環境変数は保存され、パッケージ削除時に使用できます。
パッケージごとに存在できる request スクリプトは 1 つだけです。スクリプトの名前は、request でなければなりません。
環境変数の割り当ては、pkgadd コマンドやほかのパッケージスクリプトが使用できるように、応答ファイル (スクリプトには $1 として認識される) に書き込むことで、インストール環境に追加するようにしてください。
CLASSES および BASEDIR パラメータを除くシステム環境変数と標準インストール環境変数は、request スクリプトでは変更できません。独自に作成されたほかの環境変数はすべて変更できます。
注 - request スクリプトで BASEDIR パラメータを変更できるリリースは、Solaris 2.5 およびその互換リリース以降のみです。
request スクリプトで操作する可能性のあるすべての環境変数に、pkginfo ファイルのデフォルト値を割り当てるようにしてください。
出力リストは、PARAM=value の形式としてください。例:
CLASSES=none class1
request スクリプトに対しては、管理者の端末が標準入力として定義されます。
request スクリプトでは、ターゲットシステムについての特別な分析は一切実行しないでください。特定のバイナリまたは動作がシステムに存在するかどうかをテストすること、およびその分析に基づいて環境変数を設定することは危険です。インストール時に request スクリプトが実際に実行される保証はありません。パッケージをインストールする管理者が、request スクリプトを呼び出さないで、環境変数を挿入する応答ファイルを提供する可能性があります。request スクリプトでもターゲットファイルシステムを評価している場合、その評価は行われないことがあります。特別な処理についてのターゲットシステムの分析は、checkinstall スクリプトに任せるのが最善です。
注 - パッケージをインストールする管理者が JumpStart 製品を使用する可能性がある場合は、パッケージのインストールを対話形式にしてはいけません。パッケージで request スクリプトを提供しないようにするか、インストールの前に pkgask コマンドを使用するべきであることを管理者に伝える必要があります。pkgask コマンドは、応答を request スクリプトに格納します。pkgask コマンドの詳細については、pkgask(1M) のマニュアルページを参照してください。
追加のインストールスクリプトを作成する場合は、次のタスク、「ファイルシステムデータを収集する方法」に進んでください。
prototype ファイルを作成していない場合は、「pkgproto コマンドを使用して prototype ファイルを作成する方法」の手順を完了して、手順 5 に進んでください。
prototype ファイルをすでに作成している場合は、それを編集し、前の手順で作成したインストールスクリプトのエントリを追加します。
必要な場合は、「パッケージの構築方法」を参照してください。
例 3-5 request スクリプトの書き込み
request スクリプトで環境変数に値を割り当てるときは、その値を pkgadd コマンドで使用できるようにする必要があります。この例では、4 つの環境変数についてこのタスクを実行する request スクリプトのセグメントを示します。 環境変数は、CLASSES、NCMPBIN、EMACS、および NCMPMAN です。これらの環境変数は、スクリプトですでに、管理者との対話セッションで定義されているものとします。
# make environment variables available to installation # service and any other packaging script we might have cat >$1 <<! CLASSES=$CLASSES NCMPBIN=$NCMPBIN EMACS=$EMACS NCMPMAN=$NCMPMAN !
参照
パッケージを構築したあと、実際にインストールして、正しくインストールされることを確認し、整合性を検証します。第 4 章パッケージの確認と転送では、これらのタスクについて説明し、検証済みのパッケージを配布媒体に転送する方法の手順を示します。
checkinstall スクリプトは、オプションの request スクリプトの直後に実行されます。checkinstall スクリプトは、noaccess ユーザーが存在する場合はそのユーザーとして実行されます。checkinstall スクリプトには、ファイルシステムのデータを変更する権限はありません。ただし、スクリプトが収集する情報に基づいて、環境変数を作成または変更し、以降のインストールを制御できます。また、このスクリプトは、インストールプロセスをクリーンに停止することもできます。
checkinstall スクリプトは、pkgadd コマンドにとって普通ではない、ファイルシステム上の基本的なチェックを行うためのものです。たとえば、このスクリプトを使用して、現在のパッケージのいずれかのファイルが既存のファイルを上書きするかどうかを事前にチェックしたり、一般的なソフトウェアの依存関係を管理したりできます。depend ファイルは、パッケージレベルの依存関係のみを管理します。
request スクリプトとは異なり、checkinstall スクリプトは応答ファイルが提供されるかどうかに関係なく実行されます。スクリプトが存在しても、パッケージが対話型としてブランドを設定されることはありません。checkinstall スクリプトは、request スクリプトが使用できない場合、または管理的な対話が実際的ではない場合に使用できます。
注 - checkinstall スクリプトは、Solaris 2.5 およびその互換リリース以降で使用できます。
checkinstall スクリプトは、どのファイルも変更できません。このスクリプトは、システムの状態を分析し、その対話に基づいて環境変数割り当てのリストを作成するだけです。この制限を強制するため、checkinstall スクリプトは、特権を持たないユーザー noaccess が存在する場合は、このユーザーとして実行されます。このユーザーが存在しない場合は、特権を持たないユーザー nobody として実行されます。checkinstall スクリプトには、スーパーユーザー権限はありません。
pkgadd コマンドは、スクリプトの応答ファイルを示す 1 つの引数を指定して、checkinstall スクリプトを呼び出します。スクリプトの応答ファイルは、管理者の応答を格納するファイルです。
checkinstall スクリプトは、パッケージ削除時には実行されません。ただし、このスクリプトによって割り当てられた環境変数は保存され、パッケージ削除時に使用できます。
パッケージごとに存在できる checkinstall スクリプトは 1 つだけです。スクリプトの名前は、checkinstall でなければなりません。
環境変数の割り当ては、pkgadd コマンドやほかのパッケージスクリプトが使用できるように、応答ファイル (スクリプトには $1 として認識される) に書き込むことで、インストール環境に追加するようにしてください。
CLASSES および BASEDIR パラメータを除くシステム環境変数と標準インストール環境変数は、checkinstall スクリプトでは変更できません。独自に作成されたほかの環境変数はすべて変更できます。
checkinstall スクリプトで操作する可能性のあるすべての環境変数に、pkginfo ファイルでデフォルト値を割り当てるようにしてください。
出力リストは、PARAM=value の形式としてください。例:
CLASSES=none class1
checkinstall スクリプトの実行中は、管理者と対話することはできません。管理者との対話はすべて、request スクリプトに制限されます。
追加のインストールスクリプトを作成する場合は、次のタスク、「手続きスクリプトを書く方法」に進んでください。
prototype ファイルを作成していない場合は、「pkgproto コマンドを使用して prototype ファイルを作成する方法」の手順を完了して、手順 5 に進んでください。
prototype ファイルをすでに作成している場合は、それを編集し、前の手順で作成したインストールスクリプトのエントリを追加します。
必要な場合は、「パッケージの構築方法」を参照してください。
例 3-6 checkinstall スクリプトの書き込み
checkinstall スクリプトのこの例では、SUNWcadap パッケージで必要なデータベースソフトウェアがインストールされているかどうかをチェックします。
# checkinstall script for SUNWcadap # # This confirms the existence of the required specU database # First find which database package has been installed. pkginfo -q SUNWspcdA # try the older one if [ $? -ne 0 ]; then pkginfo -q SUNWspcdB # now the latest if [ $? -ne 0 ]; then # oops echo "No database package can be found. Please install the" echo "SpecU database package and try this installation again." exit 3 # Suspend else DBBASE="`pkgparam SUNWsbcdB BASEDIR`/db" # new DB software fi else DBBASE="`pkgparam SUNWspcdA BASEDIR`/db" # old DB software fi # Now look for the database file we will need for this installation if [ $DBBASE/specUlatte ]; then exit 0 # all OK else echo "No database file can be found. Please create the database" echo "using your installed specU software and try this" echo "installation again." exit 3 # Suspend fi
参照
パッケージを構築したあと、実際にインストールして、正しくインストールされることを確認し、整合性を検証します。第 4 章パッケージの確認と転送では、これらのタスクについて説明し、検証済みのパッケージを配布媒体に転送する方法の手順を示します。
手続きスクリプトは、パッケージのインストールまたは削除に対する特定の段階で実行する一連の命令を提供します。4 つの手続きスクリプトには、命令をいつ実行するかに応じて、定義済みの名前のいずれかを設定する必要があります。スクリプトは、引数なしで実行されます。
クラスのインストールが開始する前に実行します。このスクリプトではファイルをインストールするべきではありません。
すべてのボリュームがインストールされたあとで実行します。
クラスの削除が開始する前に実行します。このスクリプトではファイルを削除するべきではありません。
すべてのクラスが削除されたあとで実行します。
手続きスクリプトは、uid=root および gid=other として実行されます。
各スクリプトは、パッケージ内のボリュームごとに 1 回実行されるので、1 回を超えて実行できるようにしてください。つまり、あるスクリプトの実行結果は、同じ入力であれば何度実行しても常に同じであることを意味します。
pkgmap ファイル内にないパッケージオブジェクトをインストールする各手続きスクリプトは、installf コマンドを使用して、パス名を追加または変更することをパッケージデータベースに通知する必要があります。すべての追加または変更が完了したあとでは、-f オプションを指定してこのコマンドを呼び出すようにしてください。この方法でパッケージオブジェクトをインストールできるスクリプトは、postinstall および postremove スクリプトのみです。詳細は、installf(1M) のマニュアルページおよび第 5 章パッケージ作成のケーススタディーを参照してください。
手続きスクリプトの実行中は、管理者と対話することはできません。管理者との対話はすべて、request スクリプトに制限されます。
pkgmap ファイルからインストールされたものではないファイルを削除する各手続きスクリプトは、removef コマンドを使用して、パス名を削除することをパッケージデータベースに通知する必要があります。削除が完了したあとでは、-f オプションを指定してこのコマンドを呼び出すようにしてください。詳細および例については、removef(1M) のマニュアルページおよび第 5 章パッケージ作成のケーススタディーを参照してください。
注 - 手続きスクリプトは pkgmap ファイルにリストされているパス名と自動的には関連付けられないので、installf および removef コマンドを使用する必要があります。
手続きスクリプトの名前は、定義済みの名前のいずれかである必要があります。 つまり、preinstall、postinstall、preremove、または postremove です。
クラスアクションスクリプトを作成する場合は、次のタスク、「クラスアクションスクリプトを書く方法」に進んでください。
prototype ファイルを作成していない場合は、「pkgproto コマンドを使用して prototype ファイルを作成する方法」の手順を完了して、手順 5 に進んでください。
prototype ファイルをすでに作成している場合は、それを編集し、前の手順で作成した各インストールスクリプトのエントリを追加します。
必要な場合は、「パッケージの構築方法」を参照してください。
参照
パッケージを構築したあと、実際にインストールして、正しくインストールされることを確認し、整合性を検証します。第 4 章パッケージの確認と転送では、これらのタスクについて説明し、検証済みのパッケージを配布媒体に転送する方法の手順を示します。
オブジェクトクラスを使用すると、インストール時または削除時に、パッケージオブジェクトのグループに対して一連のアクションを実行できます。クラスへのオブジェクトの割り当ては、prototype ファイルで行います。すべてのパッケージオブジェクトにはクラスを指定する必要がありますが、特別なアクションを必要としないオブジェクトには、デフォルトで none クラスが使用されます。
pkginfo ファイルで定義されているインストールパラメータ CLASSES は、インストールするクラスのリストです ( none クラスを含みます)。
CLASSES のリストで、インストールの順序が判定されます。none クラスがある場合は、常に最初にインストールされて、最後に削除されます。ディレクトリはほかのすべてのシステムオブジェクトに対する基礎となるサポート構造なので、すべてのディレクトリは none クラスに割り当てられるようにしてください。例外がある場合もありますが、一般的に none クラスが最も安全です。このようにすることで、ディレクトリに格納されるオブジェクトより前に、確実にディレクトリが作成されます。また、空になっていないディレクトリの削除が試みられることがありません。
次に、クラスのインストール時にシステムが実行するアクションについて説明します。アクションは、パッケージのボリュームごとに、そのボリュームのインストール時に 1 度行われます。
pkgadd コマンドは、アクションスクリプトの対象となるパス名のリストを作成します。このリストの各行には、ソースパス名とターゲットパス名がスペースで区切られて記述されています。ソースパス名は、インストールされるオブジェクトがインストールボリューム上で常駐する場所を示します。ターゲットパス名は、オブジェクトがインストールされるべきターゲットシステム上の場所を示します。リストの内容は、次の条件によって制限されます。
リストには、関連付けられたクラスに属するパス名のみが含まれます。
パッケージオブジェクトの作成が失敗すると、リストに含まれるディレクトリ、名前付きパイプ、文字デバイス、ブロックデバイス、およびシンボリックリンクには、/dev/null というソースパス名が設定されます。通常、これらのアイテムは pkgadd コマンドによって自動的に作成され (まだ存在しない場合)、pkgmap ファイルでの定義に従って適切な属性 (モード、所有者、グループ) が設定されます。
ファイルタイプが l のリンクファイルは、どのような場合にもリストには追加されません。特定のクラスのハードリンクは、以降の 4 番目のアクションで作成されます。
特定のクラスのインストールに対してクラスアクションスクリプトが提供されない場合は、生成されるリストのパス名が、ボリュームから適切なターゲットの場所にコピーされます。
クラスアクションスクリプトが存在する場合は実行されます。
クラスアクションスクリプトは、1 番目のアクションで生成されたリストを含む標準入力で呼び出されます。パッケージで最後のボリュームの場合、またはクラスで最後のオブジェクトの場合は、スクリプトは単一の引数 ENDOFCLASS を指定して実行されます。
注 - このクラスの通常ファイルがパッケージ内に存在しない場合でも、クラスアクションスクリプトは、空のリストと ENDOFCLASS 引数で少なくとも 1 回は呼び出されます。
pkgadd コマンドがコンテンツと属性の監査を実行し、ハードリンクを作成します。
2 番目または 3 番目のアクションが正常に実行されたあと、pkgadd コマンドはパス名のリストについて内容と属性の情報を監査します。pkgadd コマンドは、クラスと関連付けられたリンクを自動的に作成します。生成されたリストのすべてのパス名について、検出された属性の不整合が修正されます。
オブジェクトはクラスごとに削除されます。パッケージに存在していても CLASSES パラメータに含まれないクラスが、最初に削除されます (たとえば、installf コマンドでインストールされたオブジェクト)。CLASSES パラメータにリストされているクラスが、逆の順序で削除されます。none クラスは、常に最後に削除されます。次に、クラスの削除時に行われるシステムのアクションについて説明します。
pkgrm コマンドが、パス名のリストを作成します。
pkgrm コマンドは、指定されたクラスに属するインストール済みのパス名のリストを作成します。別のパッケージによって参照されているパス名は、ファイルタイプが e であるものを除き、リストから除外されます。e というファイルタイプは、インストール時または削除時にファイルを編集するべきであることを意味します。
削除されるパッケージがインストール時にタイプ e のいずれかのファイルを変更していた場合は、そのときに追加した行だけを削除するようにしてください。空ではない編集可能なファイルは削除しないでください。パッケージが追加した行を削除します。
クラスアクションスクリプトが存在しない場合は、パス名が削除されます。
パッケージにクラスに対する削除クラスアクションスクリプトが存在しない場合は、pkgrm コマンドによって生成されたリストのすべてのパス名が削除されます。
注 - ファイルタイプが e (編集可能) のファイルは、クラスおよび関連するクラスアクションスクリプトに割り当てられません。これらのファイルは、パス名がほかのパッケージと共有されている場合であっても、この時点で削除されます。
クラスアクションスクリプトが存在する場合は、実行されます。
pkgrm コマンドが、1 番目のアクションで生成されたリストを含む、スクリプトに対する標準入力でクラスアクションスクリプトを呼び出します。
pkgrm コマンドが監査を実行します。
クラスアクションスクリプトの実行に成功したあと、pkgrm コマンドは、パス名が別のパッケージによって参照されていない場合は、パッケージデータベースからパス名への参照を削除します。
クラスアクションスクリプトは、パッケージのインストールまたは削除時に実行される一連のアクションを定義しています。アクションは、クラス定義に基づいてパス名のグループに対して実行されます。クラスアクションスクリプトの例については、第 5 章パッケージ作成のケーススタディーを参照してください。
クラスアクションスクリプトの名前は、対象となるクラス、およびこれらの操作が、パッケージのインストール時や削除時に実行されるべきかどうかに基づきます。次の表では、2 種類の名前形式を示します。
|
たとえば、manpage という名前のクラスのインストールスクリプトの名前は、i.manpage となります。削除スクリプトは、r.manpage という名前になります。
スクリプトは、現在のボリューム上の指定されたクラスに含まれるすべてのファイルに対して実行されます。
pkgadd と pkgrm コマンドは、クラスに属する pkgmap ファイルにリストされているすべてのオブジェクトのリストを作成します。結果として、クラスアクションスクリプトは、特定のクラスに属する pkgmap で定義されているパス名に対してのみ実行できます。
クラスアクションスクリプトは、最後に実行されるときには (つまり、そのクラスに属しているクラスがそれ以上ないとき)、キーワード引数 ENDOFCLASS を指定して実行されます。
クラスアクションスクリプトの実行中は、管理者と対話することはできません。
パッケージが複数のボリュームに分かれている場合、クラスアクションスクリプトはクラスに属するファイルが 1 つでも含まれるボリュームごとに 1 回ずつ実行されます。したがって、各スクリプトは 2 回以上実行できるようになっている必要があります。つまり、あるスクリプトの実行結果は、同じ入力であれば何度実行しても同じになるということを意味します。
あるファイルがクラスアクションスクリプトを持つクラスの一部である場合、スクリプトはそのファイルをインストールする必要があります。pkgadd コマンドは、クラスアクションスクリプトが存在するファイルをインストールしませんが、インストールを検証します。
クラスアクションスクリプトでは、pkgadd コマンドで生成されるリストに出現しないパス名またはシステム属性を追加、削除、または変更してはいけません。このリストの詳細については、「パッケージインストール時のクラスの処理方法」の手順 1 を参照してください。
スクリプトで ENDOFCLASS 引数を検出した場合は、クリーンアップなどの事後処理アクションをスクリプトに組み込みます。
管理者との対話はすべて、request スクリプトに制限されます。クラスアクションスクリプトを使用して管理者から情報の取得を試みないでください。
sed 命令を使用して、パッケージのインストールおよび削除時にファイルを編集するための方法を提供します。
awk 命令を使用して、パッケージのインストールおよび削除時にファイルを編集するための方法を提供します。
Bourne シェルコマンドを使用して、ファイルを動的に構成または変更するための方法を提供します。
今後のパッケージインストールで上書きされるべきでないファイルを保持する方法を提供します。
マニフェストに関連する SMF (サービス管理機能) サービスの自動的なインストールおよびアンインストールを提供します。パッケージ内のすべての SMF マニフェストに、manifest クラスが使用されなければなりません。
パッケージ内の複数のファイルで必要な特殊な処理が、sed、awk、または sh コマンドを使用して完全に定義できる場合は、システムクラスを使用すると、複数のクラスとそれに対応するクラスアクションスクリプトを使用するより、インストールの時間を短縮できます。
sed クラスは、ターゲットシステム上の既存オブジェクトを変更する方法を提供します。sed クラスアクションスクリプトは、sed クラスに属するファイルが存在する場合は、インストール時に自動的に実行されます。sed クラスアクションスクリプトの名前は、命令が実行される対象のファイルの名前と同じであるようにしてください。
sed クラスアクションスクリプトは、次の形式で sed 命令を提供します。
2 つのコマンドが、命令を実行する必要があるときを示します。!install コマンドに続く sed 命令は、パッケージのインストール時に実行されます。!remove コマンドに続く sed 命令は、パッケージの削除時に実行されます。ファイル内でこれらのコマンドが使用される順序は関係ありません。
sed 命令の詳細については、sed(1) のマニュアルページを参照してください。sed クラスアクションスクリプトの例については、第 5 章パッケージ作成のケーススタディーを参照してください。
awk クラスは、ターゲットシステム上の既存オブジェクトを変更する方法を提供します。変更は、awk クラスアクションスクリプト内の awk 命令として提供されます。
awk クラスアクションスクリプトは、awk クラスに属するファイルが存在する場合、インストール時に自動的に実行されます。このようなファイルには、awk クラススクリプトに対する命令が次の形式で含まれます。
2 つのコマンドが、命令を実行する必要があるときを示します。!install コマンドに続く awk 命令は、パッケージのインストール時に実行されます。!remove コマンドに続く命令は、パッケージの削除時に実行されます。これらのコマンドは、任意の順序で使用できます。
awk クラスアクションスクリプトの名前は、命令が実行される対象のファイルの名前と同じであるようにしてください。
変更対象のファイルは、awk コマンドに対する入力として使用され、スクリプトの出力は最終的に元のオブジェクトを置き換えます。この構文では、環境変数を awk コマンドに渡すことはできません。
awk 命令の詳細については、awk(1) のマニュアルページを参照してください。
build クラスは、Bourne シェルの命令を実行して、パッケージオブジェクトファイルを作成または変更します。これらの命令は、パッケージオブジェクトとして提供されます。パッケージオブジェクトが build クラスに属している場合は、インストール時に命令が自動的に実行されます。
build クラスアクションスクリプトの名前は、命令が実行される対象のファイルの名前と同じであるようにしてください。また、名前は sh コマンドで実行できる必要もあります。スクリプトの出力は、構築または変更されると新しいバージョンのファイルになります。スクリプトが出力を生成しない場合、ファイルは作成または変更されません。したがって、スクリプトはファイル自体を変更または作成できます。
たとえば、パッケージがデフォルトファイル /etc/randomtable を提供し、ファイルがターゲットシステム上にまだ存在しない場合は、prototype ファイルのエントリは次のような内容です。
e build /etc/randomtable ? ? ?
また、パッケージオブジェクト /etc/randomtable は、次のような内容です。
!install # randomtable builder if [ -f $PKG_INSTALL_ROOT/etc/randomtable ]; then echo "/etc/randomtable is already in place."; else echo "# /etc/randomtable" > $PKG_INSTALL_ROOT/etc/randomtable echo "1121554 # first random number" >> $PKG_INSTALL_ROOT/etc/randomtable fi !remove # randomtable deconstructor if [ -f $PKG_INSTALL_ROOT/etc/randomtable ]; then # the file can be removed if it's unchanged if [ egrep "first random number" $PKG_INSTALL_ROOT/etc/randomtable ]; then rm $PKG_INSTALL_ROOT/etc/randomtable; fi fi
build クラスを使用する別の例については、第 5 章パッケージ作成のケーススタディーを参照してください。
preserve クラスは、パッケージのインストール時に既存のファイルを上書きするべきかどうかを決定することによって、パッケージオブジェクトファイルを保持します。preserve クラススクリプトを使用する場合、2 つの可能なシナリオは次のとおりです。
インストールするファイルがターゲットディレクトリにまだ存在しない場合は、ファイルは正常にインストールされます。
インストールするファイルがターゲットディレクトリに存在する場合は、ファイルが存在することを示すメッセージが表示されて、ファイルはインストールされません。
どちらのシナリオの結果も、preserve スクリプトとしては成功と見なされます。失敗は、2 番目のシナリオでのみ発生し、ファイルをターゲットディレクトリにコピーできない場合です。
Solaris 7 リリース以降、i.preserve スクリプトおよびこのスクリプトのコピー i.CONFIG.prsv は、ほかのクラスアクションスクリプトとともに、/usr/sadm/install/scripts ディレクトリに置かれています。
保持するファイル名を含むには、スクリプトを変更します。
manifest クラスは、SMF マニフェストに関連する SMF (サービス管理機能) サービスを自動的にインストールおよびアンインストールします。SMF に精通していない場合は、『Oracle Solaris の管理: 基本管理』の第 18 章「サービスの管理 (概要)」で、SMF を使用してサービスを管理する方法に関する情報を参照してください。
パッケージ内のすべてのサービスマニフェストは、クラス manifest によって識別されます。サービスマニフェストのインストールと削除を行うクラスアクションスクリプトは、パッケージ化サブシステムに含まれています。pkgadd(1M) が呼び出されると、サービスマニフェストがインポートされます。pkgrm(1M) が呼び出されると、無効になっているサービスマニフェスト内のインスタンスが削除されます。また、インスタンスが残っていないマニフェスト内のサービスもすべて削除されます。pkgadd(1M) または pkgrm(1M) に -R オプションを指定した場合、これらのサービスマニフェストアクションは、次にシステムが代替ルートパスでリブートしたときに実行されます。
次のパッケージ情報ファイルのコードの一部では、manifest クラスの使用が示されています。
# packaging files i pkginfo i copyright i depend i preinstall i postinstall # # source locations relative to the prototype file # d none var 0755 root sys d none var/svc 0755 root sys d none var/svc/manifest 0755 root sys d none var/svc/manifest/network 0755 root sys d none var/svc/manifest/network/rpc 0755 root sys f manifest var/svc/manifest/network/rpc/smserver.xml 0444 root sys
注 - これらのクラスアクションスクリプトは Oracle Solaris OS の一部であり、リリース間で異なるため、パッケージには i.manifest および r.manifest ファイルを含めないでください。これらのファイルを含めると、異なる Oracle Solaris リリース間のパッケージの移植性が低くなります。
たとえば、application および manpage クラスへのオブジェクトの割り当ては、次のような内容です。
f manpage /usr/share/man/manl/myappl.1l f application /usr/bin/myappl
たとえば、application および manpage クラスのエントリは次のような内容です。
CLASSES=manpage application none
注 - none クラスは、CLASSES パラメータの定義での出現位置に関係なく、常に最初にインストールされて、最後に削除されます。
たとえば、application という名前のクラスに対するインストールスクリプトは i.application という名前にし、削除スクリプトは r.application という名前にします。
あるファイルがクラスアクションスクリプトを持つクラスの一部である場合、スクリプトはそのファイルをインストールする必要があります。pkgadd コマンドは、クラスアクションスクリプトが存在するファイルをインストールしませんが、インストールを検証します。また、クラスを定義しても、クラスアクションスクリプトを提供しないと、そのクラスに対して行われるアクションは、インストールメディアからターゲットシステムへのコンポーネントのコピーだけです (pkgadd のデフォルトの動作)。
prototype ファイルを作成していない場合は、「pkgproto コマンドを使用して prototype ファイルを作成する方法」の手順を完了し、手順 7 に進んでください。
prototype ファイルをすでに作成している場合は、それを編集し、前の手順で作成した各インストールスクリプトのエントリを追加します。
必要な場合は、「パッケージの構築方法」を参照してください。
パッケージを構築したあと、実際にインストールして、正しくインストールされることを確認し、整合性を検証します。第 4 章パッケージの確認と転送では、この作業について説明し、検証済みのパッケージを配布媒体に転送する方法の手順を示します。