JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
アプリケーションパッケージ開発者ガイド     Oracle Solaris 10 1/13 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  パッケージの設計

2.  パッケージの構築

3.  パッケージの機能の拡張 (タスク)

情報ファイルとインストールスクリプトの作成 (タスクマップ)

情報ファイルの作成

パッケージの依存関係の定義

パッケージの依存関係を定義する方法

著作権に関するメッセージの書き込み

著作権に関するメッセージを書く方法

ターゲットシステムでの追加領域の予約

ターゲットシステムに追加領域を予約する方法

インストールスクリプトの作成

パッケージインストール時のスクリプトの処理

パッケージ削除時のスクリプトの処理

スクリプトで使用できるパッケージ環境変数

スクリプト用パッケージ情報の取得

スクリプトの終了コード

request スクリプトの書き込み

request スクリプトの動作

request スクリプトの設計規則

request スクリプトを書く方法

checkinstall スクリプトでのファイルシステムデータの収集

checkinstall スクリプトの動作

checkinstall スクリプトの設計規則

ファイルシステムデータを収集する方法

手続きスクリプトの書き込み

手続きスクリプトの動作

手続きスクリプトの設計規則

手続きスクリプトを書く方法

クラスアクションスクリプトの書き込み

オブジェクトクラスの定義

パッケージインストール時のクラスの処理方法

パッケージ削除時のクラスの処理方法

クラスアクションスクリプト

クラスアクションスクリプトの動作

クラスアクションスクリプトの設計規則

特殊なシステムクラス

sed クラススクリプト

awk クラススクリプト

build クラススクリプト

preserve クラススクリプト

manifest クラススクリプト

クラスアクションスクリプトを書く方法

署名付きパッケージの作成

署名付きパッケージ

証明書管理

パッケージキーストアへの信頼できる証明書の追加

パッケージキーストアへのユーザー証明書と非公開鍵の追加

パッケージキーストアの内容の確認

パッケージキーストアからの信頼できる証明書と非公開鍵の削除

署名付きパッケージの作成

署名なしディレクトリ形式パッケージを作成する方法

証明書をパッケージキーストアにインポートする方法

パッケージに署名する方法

4.  パッケージの確認と転送

5.  パッケージ作成のケーススタディー

6.  パッケージの作成のための高度な手法

用語集

索引

インストールスクリプトの作成

このセクションでは、オプションのパッケージインストールスクリプトについて説明します。pkgadd コマンドでは、パッケージ情報ファイルが入力として使用され、パッケージのインストールに必要なすべてのアクションが自動的に実行されます。パッケージインストールスクリプトを提供する必要はありません。ただし、カスタマイズしたインストール手順を作成する場合は、インストールスクリプトを使用して実現できます。インストールスクリプトには次の条件があります。

カスタマイズしたアクションを実行できるインストールスクリプトには 4 種類あります。

パッケージインストール時のスクリプトの処理

使用するスクリプトの種類は、インストールプロセスのどの時点でスクリプトのアクションが必要かによって決まります。パッケージのインストールでは、pkgadd コマンドは次の手順を実行します。

  1. request スクリプトを実行します。

    パッケージをインストールしている管理者に入力を要求できるのは、この時点のみです。

  2. checkinstall スクリプトを実行します。

    checkinstall スクリプトは、ファイルシステムのデータを収集し、環境変数の定義を作成または変更して、以降のインストールを制御できます。パッケージ環境変数の詳細については、「パッケージ環境変数」を参照してください。

  3. preinstall スクリプトを実行します。

  4. インストールするクラスごとに、パッケージオブジェクトをインストールします。

    これらのファイルのインストールはクラスごとに行われ、それに従ってクラスアクションスクリプトが実行されます。対象となるクラスのリストおよびインストールの順序は、最初は pkginfo ファイルの CLASSES パラメータで定義されています。ただし、request スクリプトまたは checkinstall スクリプトで、CLASSES パラメータの値を変更できます。インストール時のクラスの処理方法の詳細については、「パッケージインストール時のクラスの処理方法」を参照してください。

    1. シンボリックリンク、デバイス、名前付きパイプ、および必要なディレクトリを作成します。

    2. クラスに基づいて、通常ファイル (ファイルタイプ e vf) をインストールします。

      クラスアクションスクリプトは、インストールする通常ファイルのみに渡されます。ほかのパッケージオブジェクトはすべて、pkgmap ファイルの情報から自動的に作成されます。

    3. すべてのハードリンクを作成します。

  5. postinstall スクリプトを実行します。

パッケージ削除時のスクリプトの処理

パッケージを削除するときは、pkgrm コマンドで次の手順が実行されます。

  1. preremove スクリプトを実行します。

  2. 各クラスのパッケージオブジェクトを削除します。

    削除もクラスごとに行われます。削除スクリプトは、CLASSES パラメータで定義されている順序に基づいて、インストールの逆の順序で処理されます。インストール時のクラスの処理方法の詳細については、「パッケージインストール時のクラスの処理方法」を参照してください。

    1. ハードリンクを削除します。

    2. 通常ファイルを削除します。

    3. シンボリックリンク、デバイス、および名前付きパイプを削除します。

  3. postremove スクリプトを実行します。

request スクリプトは、パッケージの削除時には処理されません。ただし、このスクリプトの出力はインストールされたパッケージに保持されており、削除スクリプトで利用できます。request スクリプトの出力は、環境変数のリストです。

スクリプトで使用できるパッケージ環境変数

次の環境変数のグループは、すべてのインストールスクリプトで使用できます。一部の環境変数は、request スクリプトまたは checkinstall スクリプトで変更できます。

スクリプト用パッケージ情報の取得

スクリプトから 2 つのコマンドを使用して、パッケージについての情報を要求できます。

スクリプトの終了コード

各スクリプトは、次の表に示す終了コードのいずれかで終了する必要があります。

表 3-2 インストールスクリプトの終了コード

コード
意味
0
スクリプトが正常終了したことを表します。
1
致命的エラー。インストールプロセスは、この段階で終了します。
2
警告、またはエラーの可能性がある状態です。インストールは継続されます。警告メッセージは、インストール完了時に表示されます。
3
pkgadd コマンドがクリーンに停止されたことを表します。checkinstall スクリプトのみがこのコードを返します。
10
選択されているすべてのパッケージのインストールが完了した時点で、システムがリブートされるべきであることを表します。(この値は、1 桁の終了コードに追加されるはずです。)
20
現在のパッケージのインストールが終了したら、ただちにシステムをリブートするべきであることを表します。(この値は、1 桁の終了コードに追加されるはずです。)

インストールスクリプトによって返される終了コードの例については、第 5 章パッケージ作成のケーススタディーを参照してください。


注 - パッケージとともに提供されるすべてのインストールスクリプトは、prototype ファイルにエントリするようにしてください。ファイルタイプは、i (パッケージインストールスクリプトの場合) としてください。


request スクリプトの書き込み

request スクリプトは、パッケージをインストールしている管理者とパッケージが直接対話できる唯一の手段です。たとえば、このスクリプトを使用すると、パッケージのオプション部分をインストールするべきかどうかを、管理者に尋ねることができます。

request スクリプトの出力は、環境変数とその値のリストでなければなりません。このリストは、pkginfo ファイルで作成したいずれかのパラメータおよび CLASSESBASEDIR パラメータを含むことができます。また、リストでは、どこでも定義されていない環境変数を使用することもできます。ただし、実際に使用するには、pkginfo ファイルでデフォルト値を提供するようにしてください。パッケージ環境変数の詳細については、「パッケージ環境変数」を参照してください。

request スクリプトで環境変数に値を割り当てるときは、pkgadd コマンドやほかのパッケージスクリプトでこの値を使用できるようにする必要があります。

request スクリプトの動作

request スクリプトの設計規則


注 - パッケージをインストールする管理者が JumpStart 製品を使用する可能性がある場合は、パッケージのインストールを対話形式にしてはいけません。パッケージで request スクリプトを提供しないようにするか、インストールの前に pkgask コマンドを使用するべきであることを管理者に伝える必要があります。pkgask コマンドは、応答を request スクリプトに格納します。pkgask コマンドの詳細については、pkgask(1M) のマニュアルページを参照してください。


request スクリプトを書く方法

  1. 情報ファイルが格納されているディレクトリを、現在の作業用ディレクトリにします。
  2. 任意のテキストエディタを使用して、request という名前のファイルを作成します。
  3. ファイルを保存してエディタを終了します。
  4. 次のいずれかのタスクを完了します。
  5. パッケージを構築します。

    必要な場合は、「パッケージの構築方法」を参照してください。

例 3-5 request スクリプトの書き込み

request スクリプトで環境変数に値を割り当てるときは、その値を pkgadd コマンドで使用できるようにする必要があります。この例では、4 つの環境変数についてこのタスクを実行する request スクリプトのセグメントを示します。 環境変数は、CLASSESNCMPBINEMACS、および 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 スクリプトでのファイルシステムデータの収集

checkinstall スクリプトは、オプションの request スクリプトの直後に実行されます。checkinstall スクリプトは、noaccess ユーザーが存在する場合はそのユーザーとして実行されます。checkinstall スクリプトには、ファイルシステムのデータを変更する権限はありません。ただし、スクリプトが収集する情報に基づいて、環境変数を作成または変更し、以降のインストールを制御できます。また、このスクリプトは、インストールプロセスをクリーンに停止することもできます。

checkinstall スクリプトは、pkgadd コマンドにとって普通ではない、ファイルシステム上の基本的なチェックを行うためのものです。たとえば、このスクリプトを使用して、現在のパッケージのいずれかのファイルが既存のファイルを上書きするかどうかを事前にチェックしたり、一般的なソフトウェアの依存関係を管理したりできます。depend ファイルは、パッケージレベルの依存関係のみを管理します。

request スクリプトとは異なり、checkinstall スクリプトは応答ファイルが提供されるかどうかに関係なく実行されます。スクリプトが存在しても、パッケージが対話型としてブランドを設定されることはありません。checkinstall スクリプトは、request スクリプトが使用できない場合、または管理的な対話が実際的ではない場合に使用できます。


注 - checkinstall スクリプトは、Solaris 2.5 およびその互換リリース以降で使用できます。


checkinstall スクリプトの動作

checkinstall スクリプトの設計規則

ファイルシステムデータを収集する方法

  1. 情報ファイルが格納されているディレクトリを、現在の作業用ディレクトリにします。
  2. 任意のテキストエディタを使用して、checkinstall という名前のファイルを作成します。
  3. ファイルを保存してエディタを終了します。
  4. 次のいずれかのタスクを完了します。
  5. パッケージを構築します。

    必要な場合は、「パッケージの構築方法」を参照してください。

例 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. 情報ファイルが格納されているディレクトリを、現在の作業用ディレクトリにします。
  2. 任意のテキストエディタを使用して、1 つ以上の手続きスクリプトを作成します。

    手続きスクリプトの名前は、定義済みの名前のいずれかである必要があります。 つまり、preinstallpostinstallpreremove、または postremove です。

  3. ファイルを保存してエディタを終了します。
  4. 次のいずれかのタスクを完了します。
  5. パッケージを構築します。

    必要な場合は、「パッケージの構築方法」を参照してください。

参照

パッケージを構築したあと、実際にインストールして、正しくインストールされることを確認し、整合性を検証します。第 4 章パッケージの確認と転送では、これらのタスクについて説明し、検証済みのパッケージを配布媒体に転送する方法の手順を示します。

クラスアクションスクリプトの書き込み

オブジェクトクラスの定義

オブジェクトクラスを使用すると、インストール時または削除時に、パッケージオブジェクトのグループに対して一連のアクションを実行できます。クラスへのオブジェクトの割り当ては、prototype ファイルで行います。すべてのパッケージオブジェクトにはクラスを指定する必要がありますが、特別なアクションを必要としないオブジェクトには、デフォルトで none クラスが使用されます。

pkginfo ファイルで定義されているインストールパラメータ CLASSES は、インストールするクラスのリストです ( none クラスを含みます)。


注 - pkgmap ファイルで定義されていても、pkginfo ファイルのこのパラメータにリストされていないクラスに属するオブジェクトは、インストールされません


CLASSES のリストで、インストールの順序が判定されます。none クラスがある場合は、常に最初にインストールされて、最後に削除されます。ディレクトリはほかのすべてのシステムオブジェクトに対する基礎となるサポート構造なので、すべてのディレクトリは none クラスに割り当てられるようにしてください。例外がある場合もありますが、一般的に none クラスが最も安全です。このようにすることで、ディレクトリに格納されるオブジェクトより前に、確実にディレクトリが作成されます。また、空になっていないディレクトリの削除が試みられることがありません。

パッケージインストール時のクラスの処理方法

次に、クラスのインストール時にシステムが実行するアクションについて説明します。アクションは、パッケージのボリュームごとに、そのボリュームのインストール時に 1 度行われます。

  1. pkgadd コマンドが、パス名のリストを作成します。

    pkgadd コマンドは、アクションスクリプトの対象となるパス名のリストを作成します。このリストの各行には、ソースパス名とターゲットパス名がスペースで区切られて記述されています。ソースパス名は、インストールされるオブジェクトがインストールボリューム上で常駐する場所を示します。ターゲットパス名は、オブジェクトがインストールされるべきターゲットシステム上の場所を示します。リストの内容は、次の条件によって制限されます。

    • リストには、関連付けられたクラスに属するパス名のみが含まれます。

    • パッケージオブジェクトの作成が失敗すると、リストに含まれるディレクトリ、名前付きパイプ、文字デバイス、ブロックデバイス、およびシンボリックリンクには、/dev/null というソースパス名が設定されます。通常、これらのアイテムは pkgadd コマンドによって自動的に作成され (まだ存在しない場合)、pkgmap ファイルでの定義に従って適切な属性 (モード、所有者、グループ) が設定されます。

    • ファイルタイプが l のリンクファイルは、どのような場合にもリストには追加されません。特定のクラスのハードリンクは、以降の 4 番目のアクションで作成されます。

  2. 特定のクラスのインストールに対してクラスアクションスクリプトが提供されない場合は、生成されるリストのパス名が、ボリュームから適切なターゲットの場所にコピーされます。

  3. クラスアクションスクリプトが存在する場合は実行されます。

    クラスアクションスクリプトは、1 番目のアクションで生成されたリストを含む標準入力で呼び出されます。パッケージで最後のボリュームの場合、またはクラスで最後のオブジェクトの場合は、スクリプトは単一の引数 ENDOFCLASS を指定して実行されます。


    注 - このクラスの通常ファイルがパッケージ内に存在しない場合でも、クラスアクションスクリプトは、空のリストと ENDOFCLASS 引数で少なくとも 1 回は呼び出されます。


  4. pkgadd コマンドがコンテンツと属性の監査を実行し、ハードリンクを作成します。

    2 番目または 3 番目のアクションが正常に実行されたあと、pkgadd コマンドはパス名のリストについて内容と属性の情報を監査します。pkgadd コマンドは、クラスと関連付けられたリンクを自動的に作成します。生成されたリストのすべてのパス名について、検出された属性の不整合が修正されます。

パッケージ削除時のクラスの処理方法

オブジェクトはクラスごとに削除されます。パッケージに存在していても CLASSES パラメータに含まれないクラスが、最初に削除されます (たとえば、installf コマンドでインストールされたオブジェクト)。CLASSES パラメータにリストされているクラスが、逆の順序で削除されます。none クラスは、常に最後に削除されます。次に、クラスの削除時に行われるシステムのアクションについて説明します。

  1. pkgrm コマンドが、パス名のリストを作成します。

    pkgrm コマンドは、指定されたクラスに属するインストール済みのパス名のリストを作成します。別のパッケージによって参照されているパス名は、ファイルタイプが e であるものを除き、リストから除外されます。e というファイルタイプは、インストール時または削除時にファイルを編集するべきであることを意味します。

    削除されるパッケージがインストール時にタイプ e のいずれかのファイルを変更していた場合は、そのときに追加した行だけを削除するようにしてください。空ではない編集可能なファイルは削除しないでください。パッケージが追加した行を削除します。

  2. クラスアクションスクリプトが存在しない場合は、パス名が削除されます。

    パッケージにクラスに対する削除クラスアクションスクリプトが存在しない場合は、pkgrm コマンドによって生成されたリストのすべてのパス名が削除されます。


    注 - ファイルタイプが e (編集可能) のファイルは、クラスおよび関連するクラスアクションスクリプトに割り当てられません。これらのファイルは、パス名がほかのパッケージと共有されている場合であっても、この時点で削除されます。


  3. クラスアクションスクリプトが存在する場合は、実行されます。

    pkgrm コマンドが、1 番目のアクションで生成されたリストを含む、スクリプトに対する標準入力でクラスアクションスクリプトを呼び出します。

  4. pkgrm コマンドが監査を実行します。

    クラスアクションスクリプトの実行に成功したあと、pkgrm コマンドは、パス名が別のパッケージによって参照されていない場合は、パッケージデータベースからパス名への参照を削除します。

クラスアクションスクリプト

クラスアクションスクリプトは、パッケージのインストールまたは削除時に実行される一連のアクションを定義しています。アクションは、クラス定義に基づいてパス名のグループに対して実行されます。クラスアクションスクリプトの例については、第 5 章パッケージ作成のケーススタディーを参照してください。

クラスアクションスクリプトの名前は、対象となるクラス、およびこれらの操作が、パッケージのインストール時や削除時に実行されるべきかどうかに基づきます。次の表では、2 種類の名前形式を示します。

名前の形式
説明
i.class
パッケージインストール時に、示されているクラスのパス名に対して実行されます。
r.class
パッケージ削除時に、示されているクラスのパス名に対して実行されます。

たとえば、manpage という名前のクラスのインストールスクリプトの名前は、i.manpage となります。削除スクリプトは、r.manpage という名前になります。


注 - このファイル名形式は、sedawkbuild の各システムクラスに属するファイルには使用されません。これらの特殊なクラスの詳細については、「特殊なシステムクラス」を参照してください。


クラスアクションスクリプトの動作

クラスアクションスクリプトの設計規則

特殊なシステムクラス

システムには 4 つの特殊なクラスが用意されています。

パッケージ内の複数のファイルで必要な特殊な処理が、sedawk、または sh コマンドを使用して完全に定義できる場合は、システムクラスを使用すると、複数のクラスとそれに対応するクラスアクションスクリプトを使用するより、インストールの時間を短縮できます。

sed クラススクリプト

sed クラスは、ターゲットシステム上の既存オブジェクトを変更する方法を提供します。sed クラスアクションスクリプトは、sed クラスに属するファイルが存在する場合は、インストール時に自動的に実行されます。sed クラスアクションスクリプトの名前は、命令が実行される対象のファイルの名前と同じであるようにしてください。

sed クラスアクションスクリプトは、次の形式で sed 命令を提供します。

2 つのコマンドが、命令を実行する必要があるときを示します。!install コマンドに続く sed 命令は、パッケージのインストール時に実行されます。!remove コマンドに続く sed 命令は、パッケージの削除時に実行されます。ファイル内でこれらのコマンドが使用される順序は関係ありません。

sed 命令の詳細については、sed(1) のマニュアルページを参照してください。sed クラスアクションスクリプトの例については、第 5 章パッケージ作成のケーススタディーを参照してください。

awk クラススクリプト

awk クラスは、ターゲットシステム上の既存オブジェクトを変更する方法を提供します。変更は、awk クラスアクションスクリプト内の awk 命令として提供されます。

awk クラスアクションスクリプトは、awk クラスに属するファイルが存在する場合、インストール時に自動的に実行されます。このようなファイルには、awk クラススクリプトに対する命令が次の形式で含まれます。

2 つのコマンドが、命令を実行する必要があるときを示します。!install コマンドに続く awk 命令は、パッケージのインストール時に実行されます。!remove コマンドに続く命令は、パッケージの削除時に実行されます。これらのコマンドは、任意の順序で使用できます。

awk クラスアクションスクリプトの名前は、命令が実行される対象のファイルの名前と同じであるようにしてください。

変更対象のファイルは、awk コマンドに対する入力として使用され、スクリプトの出力は最終的に元のオブジェクトを置き換えます。この構文では、環境変数を awk コマンドに渡すことはできません。

awk 命令の詳細については、awk(1) のマニュアルページを参照してください。

build クラススクリプト

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 クラスは、パッケージのインストール時に既存のファイルを上書きするべきかどうかを決定することによって、パッケージオブジェクトファイルを保持します。preserve クラススクリプトを使用する場合、2 つの可能なシナリオは次のとおりです。

どちらのシナリオの結果も、preserve スクリプトとしては成功と見なされます。失敗は、2 番目のシナリオでのみ発生し、ファイルをターゲットディレクトリにコピーできない場合です。

Solaris 7 リリース以降、i.preserve スクリプトおよびこのスクリプトのコピー i.CONFIG.prsv は、ほかのクラスアクションスクリプトとともに、/usr/sadm/install/scripts ディレクトリに置かれています。

保持するファイル名を含むには、スクリプトを変更します。

manifest クラススクリプト

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 リリース間のパッケージの移植性が低くなります。


クラスアクションスクリプトを書く方法

  1. 情報ファイルが格納されているディレクトリを、現在の作業用ディレクトリにします。
  2. prototype ファイル内のパッケージオブジェクトに、目的のクラス名を割り当てます。

    たとえば、application および manpage クラスへのオブジェクトの割り当ては、次のような内容です。

    f manpage /usr/share/man/manl/myappl.1l
    f application /usr/bin/myappl
  3. pkginfo ファイル内の CLASSES パラメータを変更し、パッケージで使用するクラス名を追加します。

    たとえば、application および manpage クラスのエントリは次のような内容です。

    CLASSES=manpage application none

    注 - none クラスは、CLASSES パラメータの定義での出現位置に関係なく、常に最初にインストールされて、最後に削除されます。


  4. sedawk build のいずれかのクラスに属するファイルのクラスアクションスクリプトを作成している場合は、パッケージオブジェクトを含むディレクトリを、現在の作業用ディレクトリにします。
  5. クラスアクションスクリプトまたはパッケージオブジェクト (sedawk、または build クラスに属すファイルの場合) を作成します。

    たとえば、application という名前のクラスに対するインストールスクリプトは i.application という名前にし、削除スクリプトは r.application という名前にします。

    あるファイルがクラスアクションスクリプトを持つクラスの一部である場合、スクリプトはそのファイルをインストールする必要があります。pkgadd コマンドは、クラスアクションスクリプトが存在するファイルをインストールしませんが、インストールを検証します。また、クラスを定義しても、クラスアクションスクリプトを提供しないと、そのクラスに対して行われるアクションは、インストールメディアからターゲットシステムへのコンポーネントのコピーだけです (pkgadd のデフォルトの動作)。

  6. 次のいずれかのタスクを完了します。
  7. パッケージを構築します。

    必要な場合は、「パッケージの構築方法」を参照してください。

次のステップ

パッケージを構築したあと、実際にインストールして、正しくインストールされることを確認し、整合性を検証します。第 4 章パッケージの確認と転送では、この作業について説明し、検証済みのパッケージを配布媒体に転送する方法の手順を示します。