アプリケーションパッケージ開発者ガイド

第 2 章 パッケージの構築

この章では、パッケージの構築に含まれるプロセスと作業について説明します。これらの作業には、必須のものと省略可能なものがあります。この章では、必須の作業について詳細に説明します。パッケージに機能を追加するための省略可能な作業については、第 3 章パッケージの機能の拡張 (作業)第 6 章パッケージの作成のための高度な手法を参照してください。

この章で説明する情報は次のとおりです。

パッケージの構築プロセス (作業マップ)

パッケージを構築する際のプロセスについて、表 2–1 で説明します。特にパッケージの構築に不慣れな方は、この表を参考にしてください。最初の 4 つの作業は、表示されている順序のとおりに行う必要はありませんが、この順序にしたがうとパッケージの構築が容易になります。パッケージの設計に熟練したユーザーの場合、目的に合わせてこれらの作業の順序を入れ替えてもかまいません。

パッケージの設計に熟練したユーザーは、make コマンドおよびメイクファイルを使用してパッケージ構築プロセスを自動化できます。詳細については、make(1S) のマニュアルページを参照してください。

表 2–1 パッケージの構築プロセス (作業マップ)

作業 

説明 

参照先 

1. pkginfo ファイルの作成

パッケージの特性を記述するための pkginfo ファイルを作成します。

pkginfo ファイルの作成方法」

2. パッケージコンテンツの編成 

パッケージコンポーネントを階層ディレクトリ構造に配置します。 

「パッケージのコンテンツの編成」

3. (省略可能) 情報ファイルの作成 

パッケージの依存関係の定義、著作権に関するメッセージの記載、およびターゲットシステムでの追加領域の確保を行います。 

第 3 章パッケージの機能の拡張 (作業)

4. (省略可能) インストールスクリプトの作成 

パッケージのインストールと削除のプロセスをカスタマイズします。 

第 3 章パッケージの機能の拡張 (作業)

5. prototype ファイルの作成

prototype ファイルにパッケージ内のオブジェクトを記述します。

prototype ファイルの作成 」

6. パッケージの構築 

pkgmk コマンドを使用してパッケージを構築します。

「パッケージの構築」

7. パッケージの確認および転送 

パッケージの整合性を確認してから、パッケージを配布媒体にコピーします。 

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

パッケージ環境変数

必須の情報ファイルである pkginfo および prototype では、変数を使用できます。また、パッケージの構築に使用する pkgmk コマンドには、オプションを使用することもできます。これらのファイルおよびコマンドについてこの章で説明されているように、変数に関しては、よりコンテキストに依存した情報が提供されます。ただし、パッケージの構築を始める前に、ほかにどのような変数があるか、またその変数がパッケージの構築にどのような影響を与えるかについて理解しておくことをおすすめします。

変数には次の 2 種類があります。

環境変数の使用に関する一般的な規則

pkginfo ファイルでは、変数の定義は PARAM=value という形式になります。PARAM の最初の文字は大文字です。これらの変数は、インストール時にのみ評価されます。これらの変数を評価できない場合、pkgadd コマンドはエラーを返して異常終了します。

prototype ファイルでは、変数の定義は !PARAM=value または $variable の形式にできます。PARAMvariable はともに、大文字または小文字のどちらからでも始めることができます。構築時に値が既知の変数だけが評価されます。PARAM または variable が、構築変数またはインストール変数であり、その値が構築時に不明な場合、pkgmk コマンドはエラーを返して異常終了します。

また、PARAM=value は、オプションとして pkgmk コマンドに組み込むことができます。このオプションは、有効範囲がパッケージ全体に対してグローバルであるという点を除いて、prototype ファイルの中に指定されたものと同じように機能します。prototype ファイルでの !PARAM=value の定義は、そのファイルと、そのファイルで定義されているパッケージの部分に対してローカルです。

PARAM がインストール変数であり、variable が既知の値を持つインストール変数または構築変数である場合、その定義が pkgmk コマンドによって pkginfo ファイルに挿入され、その定義をインストール時に使用できるようになります。ただし、pkgmk コマンドは、prototype ファイルに指定されたパス名にある PARAM を評価しません。

パッケージ環境変数の概要

次の表に、変数の指定形式、場所、および有効範囲をまとめています。

表 2–2 パッケージ環境変数の概要

変数が定義されている場所 

変数の定義形式 

定義される変数の種類 

変数が評価されるタイミング 

変数が評価される場所 

変数が置換される可能性のある項目 

pkginfo ファイル

PARAM=value

構築 

構築時に無視される 

なし 

なし 

インストール 

インストール時 

pkgmap ファイル内

ownergrouppath、またはリンクターゲット

 

 

prototype ファイル

!PARAM=value

構築 

構築時 

prototype ファイルおよび任意の組み込みファイル内

modeownergroup、またはpath

インストール 

構築時 

prototype ファイルおよび任意の組み込みファイル内

!search コマンドと !command コマンドの使用時のみ

 

 

pkgmk コマンド行

PARAM=value

構築 

構築時 

prototype ファイル内

modeownergroup、またはpath

インストール 

構築時 

prototype ファイル内

!search コマンド使用時のみ

 

 

インストール時 

pkgmap ファイル内

ownergrouppath、またはリンクターゲット

 

 

 

pkginfo ファイルの作成

pkginfo ファイルは、パッケージの特性を説明するASCII ファイルです。インストールの流れを制御するのに役立つ情報を提供します。

pkginfo ファイルの各エントリは、PARAM=value の形式を使用してパラメータの値を設定するための行です。PARAM には、pkginfo(4) のマニュアルページで説明されている標準のパラメータのいずれかを指定できます。パラメータの指定には、必要な順序はありません。


注 –

それぞれの value は、単一引用符または二重引用符で囲むことができます (例: 'value' または "value")。シェル環境に固有であるとみなされる文字が value に含まれる場合、引用符を使用するようにしてください。本書の例およびケーススタディーでは、引用符を使用しません。二重引用符を使用する例については、pkginfo(4) のマニュアルページを参照してください。


また、独自のパッケージパラメータを作成するには、pkginfo ファイル内でパッケージパラメータに値を割り当てます。パラメータは、大文字で始めて、その後ろに大文字または小文字を続けます。大文字の場合、パラメータ (変数) は、構築時ではなく、インストール時に評価されます。逆に、小文字の場合は構築時に評価されます。インストール変数と構築変数の違いについては、「パッケージ環境変数」を参照してください。


注 –

パラメータ値のあとにある空白は無視されます。


pkginfo ファイルには、 PKGNAMEARCHVERSION、および CATEGORY という 5 つのパラメータを定義します。PATHPKGINST、および INSTDATE の各パラメータは、パッケージの構築時にソフトウェアによって自動的に挿入されます。これら 8 つのパラメータは変更しないでください。残りのパラメータについては、pkginfo(4) のマニュアルページを参照してください。

パッケージインスタンスの定義

同一のパッケージに、異なるバージョンを含めたり、異なるアーキテクチャーとの互換性を持たせたり、あるいはその両方を組み合わせることができます。パッケージの各バリエーションは、パッケージインスタンスと呼ばれています。パッケージインスタンスは、pkginfo ファイル内で PKGARCH、および VERSION の各パラメータ定義を組み合わせて決定します。

pkgadd コマンドは、インストール時にパッケージ識別子を各パッケージインスタンスに割り当てます。パッケージ識別子は、たとえば SUNWadm.2 のように、数値の接尾辞を含むパッケージの省略名です。この識別子は、同じパッケージのインスタンスを含め、その他のパッケージとパッケージインスタンスを区別します。

パッケージの省略名の定義 (PKG)

パッケージの省略名は、パッケージの名前を短くしたものであり、pkginfo ファイル内で PKG パラメータによって定義されています。パッケージの省略名には、次の特性を持たせてください。

パッケージアーキテクチャーの指定 (ARCH)

pkginfo ファイル内の ARCH パラメータは、パッケージに関連付けるアーキテクチャーを特定します。アーキテクチャー名の最大長は、英数字で 16 文字です。パッケージが複数のアーキテクチャーに関連付けられている場合、アーキテクチャーをコンマ区切りのリストで指定します。

pkginfo ファイル内でパッケージアーキテクチャーを指定する例を次に示します。


ARCH=sparc

パッケージの命令セットアーキテクチャーの指定 (SUNW_ISA)

pkginfo ファイル内の SUNW_ISA パラメータは、Sun Microsystems パッケージに関連付けられている命令セットアーキテクチャーを特定します。パラメータの値は次のとおりです。

たとえば、64–ビットオブジェクトを含むパッケージの場合、pkginfo ファイル内の SUNW_ISA 値は次のようになります。


SUNW_ISA=sparcv9

SUNW_ISA が設定されていない場合、パッケージの命令セットアーキテクチャーはデフォルトで ARCH パラメータの値に設定されます。

パッケージのバージョンの指定 (VERSION)

pkginfo ファイル内の VERSION パラメータは、パッケージのバージョンを特定します。バージョンの最大長は、ASCII 文字で 256 文字です。また、バージョンは、左括弧で始めることはできません。

pkginfo ファイル内でバージョンを指定する例を次に示します。


VERSION=release 1.0

パッケージ名の定義 (NAME)

パッケージ名は、パッケージの完全な名前であり、pkginfo ファイル内の NAME パラメータによって定義されます。

システム管理者は多くの場合、パッケージのインストールが必要であるかどうかを決定するためにパッケージ名を使用するので、明瞭かつ簡潔で完全なパッケージ名を記述することが重要です。パッケージ名は、次の条件を満たすようにしてください。

次に示すのは、pkginfo ファイル内で定義されるパッケージ名の例です。


NAME=Chip designers need CAD application software to design
abc chips.  Runs only on xyz hardware and is installed in the
usr partition.

パッケージカテゴリの定義 (CATEGORY)

pkginfo ファイル内の CATEGORY パラメータは、パッケージが属するカテゴリを指定します。少なくとも、パッケージは system または application のカテゴリに属します。カテゴリ名は、英数字で構成されます。カテゴリ名は最大長が 16 文字であり、大文字と小文字が区別されません。

パッケージが複数のカテゴリに属する場合、カテゴリをコンマ区切りのリストで指定します。

次に示すのは、pkginfo ファイル内で CATEGORY を指定する例です。


CATEGORY=system

Procedurepkginfo ファイルの作成方法

  1. 任意のテキストエディタを使用して、pkginfo という名前のファイルを作成します。

    このファイルは、システムの任意の場所で作成できます。

  2. ファイルを編集し、5 つの必須パラメータを定義します。

    5 つの必須パラメータは、 PKGNAMEARCHVERSION、および CATEGORY です。これらのパラメータの詳細については、pkginfo ファイルの作成」を参照してください。

  3. 省略可能なパラメータをファイルに追加します。

    独自のパラメータを作成します。また、標準パラメータについては、pkginfo(4) のマニュアルページを参照してください。

  4. ファイルを保存してエディタを終了します。


例 2–1 pkginfo ファイルの作成

次の例では、有効な pkginfo ファイルのコンテンツを示しています。ここでは、5 つの必須パラメータを定義し、BASEDIR パラメータを指定しています。BASEDIR パラメータは、path フィールド」で詳細に説明されています。


PKG=SUNWcadap
NAME=Chip designers need CAD application software to design abc chips.  
Runs only on xyz hardware and is installed in the usr partition.
ARCH=sparc
VERSION=release 1.0
CATEGORY=system
BASEDIR=/opt

参照

「パッケージのコンテンツの編成方法」を参照してください。

パッケージのコンテンツの編成

インストールあとのターゲットシステム上でのパッケージオブジェクトの構造を模倣した階層ディレクトリ構造にパッケージオブジェクトを編成します。prototype ファイルを作成する前にこの手順を行うと、prototype ファイルの作成時に時間と労力を節約できます。

Procedureパッケージのコンテンツの編成方法

  1. 作成が必要なパッケージの数と、各パッケージに配置するパッケージオブジェクトを決定します。

    この手順を完了できるようにするには、「パッケージを構築する前の考慮事項」を参照してください。

  2. 構築する必要がある各パッケージにディレクトリを作成します。

    このディレクトリは、システムの任意の場所で構築し、任意の名前を付けることができます。この章の例では、パッケージディレクトリはパッケージの省略名と同じ名前を持つと仮定しています。


    $ cd /home/jane
    $ mkdir SUNWcadap
    
  3. 対応するパッケージディレクトリの下にあるディレクトリ構造に各パッケージ内のパッケージオブジェクトを編成します。このディレクトリ構造は、ターゲットシステム上でのパッケージオブジェクトの構造を模倣するようにしてください。

    たとえば、CAD アプリケーションパッケージの SUNWcadap には、次のディレクトリ構造が必要です。

    SUNWcadap パッケージのディレクトリ構造を図に示します。
  4. 情報ファイルを保管する場所を決定します。適切な場合、ディレクトリを作成してファイルを 1 か所に保管します。

    次の例では、pkginfo ファイルの作成方法」にある pkginfo ファイルの例が Jane のホームディレクトリに作成されていると仮定しています。


    $ cd /home/jane
    $ mkdir InfoFiles
    $ mv pkginfo InfoFiles
    
参照

pkgproto コマンドを使用して prototype ファイルを作成する方法」を参照してください。

prototype ファイルの作成

prototype ファイルは、パッケージ内のオブジェクトに関する情報を指定するのに使用する ASCII ファイルです。prototype ファイルの各エントリには、データファイル、ディレクトリ、ソースファイル、実行可能オブジェクトなど、単一のオブジェクトが記述されます。prototype ファイルのエントリは、空白で区切られた、複数のフィールドによる情報で構成されます。これらのフィールドは、特定の順序で表示されるようにしてください。注釈行はポンド記号 (#) で始まり、無視されます。

prototype ファイルは、テキストエディタまたは pkgproto コマンドを使用して作成できます。このファイルをはじめて作成する場合、以前作成したディレクトリ階層に基づいてファイルを作成する pkgproto コマンドで作成したほうが簡単でしょう。「パッケージのコンテンツの編成」で説明されているとおりにファイルを編成していない場合、任意のテキストエディタで prototype ファイルを最初から作成する手間がかかります。

prototype ファイルの形式

prototype ファイルでの各行の形式を次に示します。


partftypeclasspathmajorminormodeownergroup

part

パッケージ オブジェクトを細かくグループ化できる、省略可能な数値フィールドです。デフォルト値は part 1 です。 

ftype

オブジェクトの種類を指定する、1 文字のフィールドです。「ftype フィールド」を参照してください。

クラス

オブジェクトが属するインストールクラスです。class フィールド」を参照してください。

path

パッケージオブジェクトがターゲットシステムに存在する場所を示す、絶対パス名または相対パス名です。path フィールド」を参照してください。

major

ブロック特殊デバイスまたは文字特殊デバイスのためのメジャーデバイス番号です。 

minor

ブロック特殊デバイスまたは文字特殊デバイスのためのマイナーデバイス番号です。 

mode

オブジェクトの 8 進数モードです (例: 0644)。mode フィールド」を参照してください。

owner

オブジェクトの所有者です (例: bin または root)。owner フィールド」を参照してください。

group

オブジェクトが属するグループです (例: bin または sys)。group フィールド」を参照してください。

通常では、ftype フィールド、class フィールド、path フィールド、mode フィールド、owner フィールド、および group フィールドだけを定義します。これらのフィールドについては、次の節で説明します。これらのフィールドに関する追加情報については、prototype(4) のマニュアルページを参照してください。

ftype フィールド

ftype (ファイルタイプ) フィールドは 1 文字のフィールドであり、パッケージオブジェクトのファイルタイプを指定します。次の表は、有効なファイルタイプについて説明しています。

表 2–3 prototype ファイルの有効なファイルタイプ

ファイルタイプのフィールド値 

ファイルタイプの説明 

f

標準の実行可能ファイルまたはデータファイル 

e

インストールまたは削除時に編集するファイル (複数のパッケージで共有する可能性があります) 

v

揮発性ファイル (このコンテンツは変更することが想定されています。例: ログファイル) 

d

ディレクトリ 

x

このパッケージでのみアクセスできる排他的なディレクトリ (登録されていないログやデータベース情報を含む可能性があります) 

l

リンクファイル 

p

名前付きパイプ 

c

文字特殊デバイス 

b

ブロック特殊デバイス 

i

情報ファイルまたはインストールスクリプト 

s

シンボリックリンク 

class フィールド

class フィールドは、オブジェクトが属するクラスを指定します。クラスの使用は、省略可能なパッケージ設計機能です。この機能は、 「クラスアクションスクリプトの書き込み」で詳細に説明されています。

クラスを使用しない場合、オブジェクトは none クラスに属します。pkgmk コマンドを実行してパッケージを構築すると、コマンドによって CLASSES=none パラメータがpkginfo ファイルに挿入されます。ファイルタイプ i が指定されたファイルには、空白の class フィールドが 1 つ含まれます。

path フィールド

path フィールドは、パッケージオブジェクトがターゲットシステムに存在する場所を定義するために使用されます。絶対パス名 (例: /usr/bin/mail) または相対パス名 (例: bin/mail) を使用して場所を示すことができます。絶対パス名を使用すると、ターゲットシステム上のオブジェクトの場所はパッケージによって定義され、変更できません。パッケージオブジェクトに相対パス名が含まれる場合、オブジェクトが再配置可能になります。

再配置可能オブジェクトには、ターゲットシステム上の絶対パスの場所は必要ありません。代わりに、オブジェクトの場所はインストールプロセス中に決定されます。

パッケージのオブジェクトのすべてまたは一部を再配置可能として定義できます。インストールスクリプトを記述したり、prototype ファイルを作成したりする前に、パッケージオブジェクトの場所を固定 (/etc 内の起動スクリプトなど) するか、または再配置可能にするかを決定します。

再配置可能オブジェクトには、集合的再配置可能個別再配置可能の 2 種類があります。

集合的再配置可能オブジェクト

集合的再配置可能オブジェクトは、ベースディレクトリと呼ばれる共通のインストールベースに対して配置されます。ベースディレクトリは、BASEDIR パラメータを使用して pkginfo ファイルに定義されます。たとえば、tests/generic という名前の prototype ファイル内にある再配置可能オブジェクトは、pkginfo ファイルにデフォルトの BASEDIR パラメータが定義されていることを必要とします。次に例を示します。


BASEDIR=/opt

この例の場合、オブジェクトをインストールすると、そのオブジェクトは /opt/tests/generic ディレクトリに配置されます。


注 –

/opt ディレクトリは、ベースの Solaris ソフトウェアに含まれないソフトウェアが提供される可能性がある唯一のディレクトリです。


できる限り、集合的再配置可能オブジェクトを使用してください。通常、ほとんどのパッケージは、絶対パスで指定された一部のファイル (/etc or /var 内のファイルなど) で再配置できます。ただし、パッケージに多くの異なる再配置が含まれる場合には、pkginfo ファイル内で個別の BASEDIR 値を指定してパッケージを複数のパッケージに分割することを検討してください。

個別再配置可能オブジェクト

個別再配置可能オブジェクトは、集合的再配置可能オブジェクトと同じディレクトリの場所に制限されません。個別再配置可能オブジェクトを定義するには、prototype ファイル内の path フィールドにインストール変数を指定する必要があります。インストール変数を指定したら、インストーラに対して再配置可能なベースディレクトリを要求する request スクリプトを作成するか、ファイルシステムデータからパス名を決定する checkinstall スクリプトを作成します。request スクリプトについては、request スクリプトの書き込み」を参照してください。また、checkinstall スクリプトについては、「ファイルシステムデータを収集する方法」を参照してください。


注意 – 注意 –

個別再配置可能オブジェクトは管理が困難です。個別再配置可能オブジェクトを使用すると、パッケージコンポーネントが広範囲に分散する場合があり、パッケージの複数のバージョンまたはアーキテクチャーをインストールする場合にコンポーネントを特定するのが困難になります。できる限り、集合的再配置可能オブジェクトを使用してください。


パラメータ型パス名

パラメータ型パス名は、変数指定が含まれるパス名です。たとえば、/opt/$PKGINST/filenameは、$PKGINST という変数指定があるのでパラメータ型のパス名になります。変数指定のデフォルト値を pkginfo ファイルに定義します。この値は、request スクリプトまたは checkinstall スクリプトで変更される可能性があります。

パス内の変数指定は、パス名で開始または終了するか、斜線 (/) で囲みます。有効なパラメータ型パス名は、次のような形式をとります。


$PARAM/tests
tests/$PARAM/generic
/tests/$PARAM

変数指定を定義すると、パスは絶対パスまたは再配置可能なパスとして評価される可能性があります。次の例では、prototype ファイルに次のようなエントリが含まれます。


f none $DIRLOC/tests/generic

pkginfo ファイルには、次のエントリが含まれます。


DIRLOC=/myopt

パス名 $DIRLOC/tests/generic は、BASEDIR パラメータが pkginfo ファイルに設定されているかどうかに関係なく、絶対パス名 /myopt/tests/generic と評価されます。

この例では、prototype ファイルは前の例のものと同一であり、pkginfo ファイルには次のエントリが含まれます。


DIRLOC=firstcut
BASEDIR=/opt

パス名 $DIRLOC/tests/generic は、再配置可能なパス名 /opt/firstcut/tests/generic と評価されます。

パラメータ型のパス名については、「パラメータ型ベースディレクトリの使用」を参照してください。

オブジェクトのソースおよびターゲットの場所の簡略な記述

prototype ファイル内の path フィールドは、オブジェクトがターゲットシステムに配置される場所を定義します。パッケージオブジェクトのディレクトリ構造がターゲットシステム上で意図された構造を模倣していない場合、prototype ファイル内でのパッケージオブジェクトの現在の場所を指定します。パッケージ内でのオブジェクトの構造化については、「パッケージのコンテンツの編成」を参照してください。

パッケージの目的の構造と同じように開発領域が構造化されていない場合、path フィールドで path1=path2 という形式を使用できます。この形式では、path1 はターゲットシステム上でのオブジェクトの場所であり、path2 は使用中のシステム上でのオブジェクトの場所です。

また、path1=path2 というパス名の形式を使用する場合、path1 を再配置可能なオブジェクト名に指定し、使用中のシステム上での対象のオブジェクトへのフルパス名に path2 を指定することもできます。


注 –

path1 には、未定義の構築変数を含むことはできませんが、未定義のインストール変数は含むことができます。path2 では、構築変数とインストール変数の両方を使用することができますが、未定義の変数を含むことはできません。インストール変数と構築変数の違いについては、「パッケージ環境変数」を参照してください。


リンクは pkgadd コマンドで作成するので、リンクには path1= path2 形式を使用します。一般的な規則として、リンクの path2 は絶対リンクにはせず、path1 のディレクトリの一部を基準とした相対リンクにするようにしてください。

path1=path2 形式の代わりに、!search コマンドを使用することもできます。詳細については、pkgmk コマンドの検索パスの指定」を参照してください。

mode フィールド

mode フィールドには、8 進数、疑問符 (?)、または変数指定を含める可能性があります。8 進数は、ターゲットシステムにオブジェクトをインストールするときにオブジェクトのモードを指定します。? は、オブジェクトのインストール時にモードを変更しないことを示します。つまり、同じ名前のオブジェクトがターゲットシステム上にすでに存在することを意味します。

変数指定の形式 $mode では、変数の最初の文字を小文字で記述し、対象のフィールドはパッケージの構築時に設定されます。この変数は、prototype ファイルの作成時、または pkgmk コマンドのオプションとしての作成時に定義します。インストール変数と構築変数の違いについては、「パッケージ環境変数」を参照してください。

ファイルタイプ i (情報ファイル)、l (ハードリンク)、および s (シンボリックリンク) が指定されたファイルでは、このフィールドを空白のままにしてください。

owner フィールド

owner フィールドには、ユーザー名、疑問符 (?)、または変数指定を含める可能性があります。ユーザー名は、最大 14 文字であり、ターゲットシステム上にすでに存在する名前にしてください (bin または root など)。? は、オブジェクトのインストール時に所有者を変更しないことを示します。つまり、同じ名前のオブジェクトがターゲットシステム上にすでに存在することを意味します。

変数指定は、$Owner または $owner の形式 (変数の最初の文字が大文字または小文字) を使用できます。変数が小文字で始まる場合、prototype ファイル内または pkgmk コマンドのオプションとして、パッケージの構築時に変数が定義されます。変数が大文字で始まる場合、変数指定は pkginfo ファイルにデフォルト値として挿入され、インストール時に request スクリプトによって再定義される可能性があります。インストール変数と構築変数の違いについては、「パッケージ環境変数」を参照してください。

ファイルタイプ i (情報ファイル) と l (ハードリンク) が指定されたファイルでは、このフィールドを空白のままにしてください。

group フィールド

group フィールドには、グループ名、疑問符 (?)、または変数指定を含める可能性があります。グループ名は、最大 14 文字であり、ターゲットシステム上にすでに存在する名前にしてください (bin または sys など)。? は、オブジェクトのインストール時にグループを変更しないことを示します。つまり、同じ名前のオブジェクトがターゲットシステム上にすでに存在することを意味します。

変数指定は、$Group または $group の形式 (変数の最初の文字が大文字または小文字) を使用できます。変数が小文字で始まる場合、prototype ファイル内または pkgmk コマンドのオプションとして、パッケージの構築時に変数が定義されます。変数が大文字で始まる場合、変数指定は pkginfo ファイルにデフォルト値として挿入され、インストール時に request スクリプトによって再定義される可能性があります。インストール変数と構築変数の違いについては、「パッケージ環境変数」を参照してください。

ファイルタイプ i (情報ファイル) と l (ハードリンク) が指定されたファイルでは、このフィールドを空白のままにしてください。

prototype ファイルを最初から作成する

prototype ファイルを最初から作成する場合、任意のテキストエディタでファイルを作成し、パッケージオブジェクトごとにエントリを 1 つ追加できます。prototype ファイルの形式については、prototype ファイルの形式」prototype(4) のマニュアルページを参照してください。ただし、各パッケージオブジェクトを定義したあとには、prototype ファイルへの機能の追加」で説明されている機能をいくつか組み込むことが必要になる場合もあります。

例—pkgproto コマンドを使用した prototype ファイルの作成

Organizing a Package's Contentsで説明されているとおりにパッケージディレクトリ構造を編成している限り、pkgproto コマンドを使用して基本的な 「パッケージのコンテンツの編成」 ファイルを作成できます。たとえば、前の節で説明したディレクトリ構造のサンプルと pkginfo ファイルを使用すると、prototype ファイルを作成するコマンドは次のようになります。


$ cd /home/jane
$ pkgproto ./SUNWcadap > InfoFiles/prototype

この prototype ファイルの内容は次のとおりです。

d none SUNWcadap 0755 jane staff
d none SUNWcadap/demo 0755 jane staff
f none SUNWcadap/demo/file1 0555 jane staff
d none SUNWcadap/srcfiles 0755 jane staff
f none SUNWcadap/srcfiles/file5 0555 jane staff
f none SUNWcadap/srcfiles/file6 0555 jane staff
d none SUNWcadap/lib 0755 jane staff
f none SUNWcadap/lib/file2 0644 jane staff
d none SUNWcadap/man 0755 jane staff
f none SUNWcadap/man/windex 0644 jane staff
d none SUNWcadap/man/man1 0755 jane staff
f none SUNWcadap/man/man1/file4.1 0444 jane staff
f none SUNWcadap/man/man1/file3.1 0444 jane staff

注 –

パッケージ作成者の実際の所有者とグループは、pkgproto コマンドによって記録されます。pkgproto コマンドを実行する前にchown -R コマンドと chgrp -R コマンドを使用して、希望の所有者とグループを設定することをお勧めします。


なお、この例の prototype ファイルはまだ完成されていません。このファイルを完成するには、次の節を参照してください。

pkgproto コマンドで作成した prototype ファイルの微調整

pkgproto コマンドは、初期の prototype ファイルを作成するのに役立ちますが、定義が必要な各パッケージオブジェクトのエントリは作成しません。このコマンドでは、エントリは完了されません。pkgproto コマンドは、次のどちらの処理も実行しません。

ファイルタイプ vex、および i を指定したオブジェクトのエントリの作成

少なくとも、prototype ファイルを変更して、ファイルタイプ i を指定したオブジェクトを追加する必要があります。情報ファイルとインストールスクリプトをパッケージディレクトリの最初のレベルに格納した場合 (例: /home/jane/SUNWcadap/pkginfo)、prototype ファイル内のエントリは次のようになります。


i pkginfo

情報ファイルとインストールスクリプトをパッケージディレクトリの最初のレベルに格納しなかった場合、それらのソースの場所を指定する必要があります。次に例を示します。


i pkginfo=/home/jane/InfoFiles/pkginfo

あるいは、!search コマンドを使用して、パッケージの構築時に pkgmk コマンドの場所を検索するように指定できます。詳細については、pkgmk コマンドの検索パスの指定」を参照してください。

ファイルタイプ ve、および x を指定したオブジェクトのエントリを追加するには、prototype ファイルの形式」で説明されている形式に従うか、prototype(4) のマニュアルページを参照してください。


注 –

必ず、e (編集可能) のファイルタイプを指定したファイルにクラスを割り当て、そのクラスの関連するクラスアクションスクリプトを含めるようにしてください。そのようにしない場合、パス名がその他のパッケージと共有されていても、パッケージの削除時にこれらのファイルも削除されます。


複数のクラス定義の使用

pkgproto コマンドを使用して基本的なprototype ファイルを作成する場合、すべてのパッケージオブジェクトを、 none クラスまたはある特定のクラスに割り当てることができます。「例—pkgproto コマンドを使用した prototype ファイルの作成」で示されるように、基本的な pkgproto コマンドは、すべてのオブジェクトを none クラスに割り当てます。すべてのオブジェクトをある特定のクラスに割り当てるには、-c オプションを使用します。次に例を示します。


$ pkgproto -c classname /home/jane/SUNWcadap > /home/jane/InfoFiles/prototype

複数のクラスを使用する場合、prototype ファイルを手動で編集し、各オブジェクトの class フィールドを変更することが必要になります。また、クラスを使用する場合には、pkginfo ファイルに CLASSES パラメータを定義し、クラスアクションスクリプトを書く必要もあります。クラスの使用は、省略可能な機能であり、「クラスアクションスクリプトの書き込み」で詳細に説明されています。

例—pkgproto コマンドを使用して作成した prototype ファイルの微調整

Example—Creating a prototype File With the pkgproto Commandで説明されている pkgproto コマンドで 「例—pkgproto コマンドを使用した prototype ファイルの作成」 ファイルを作成した場合、いくつかの変更を行う必要があります。

prototype ファイルへの機能の追加

prototype ファイルでは、各パッケージオブジェクトの定義に加えて、次の事項を行うことができます。

これらの変更を行う方法については、次の節を参照してください。

インストール時に作成される追加のオブジェクトの定義

prototype ファイルを使用して、実際にはインストールメディアに提供されないオブジェクトを定義できます。これらのオブジェクトは、インストール時に pkgadd コマンドを使用すると、インストール時にまだ存在しない場合、必要なファイルタイプで作成されます。

オブジェクトがターゲットシステムに作成されるように指定するには、適切なファイルタイプを指定した prototype ファイルにそのオブジェクトのエントリを追加します。

たとえば、ターゲットシステムにディレクトリを作成し、インストールメディアにはそのディレクトリを提供しない場合、prototype ファイル内でそのディレクトリに次のエントリを追加します。


d none /directory 0644 root other

ターゲットシステム上で空のファイルを作成する場合、prototype ファイル内での空のファイルに対するエントリは次のようになります。


f none filename=/dev/null 0644 bin bin

インストールメディアに提供されるオブジェクトは、通常ファイルおよび編集スクリプト (ファイルタイプ e vf) と、そのファイルおよびスクリプトを格納する必要があるディレクトリだけです。追加のオブジェクトは、提供されるオブジェクト、ディレクトリ、名前付きパイプ、デバイス、ハードリンク、およびシンボリックリンクを参照せずに作成されます。

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

パッケージのインストール時にリンクを作成するには、リンクオブジェクトのprototype ファイルエントリ内で次の内容を定義します。

パッケージが絶対パスまたは再配置可能としてインストールされるかどうかにかかわらず、相対リンクはこの方法で指定できます。

複数のボリュームにわたるパッケージの配布

pkgmk コマンドを使用してパッケージを構築すると、このコマンドにより、複数ボリュームのパッケージを編成するのに必要な計算と処理が実行されます。複数ボリュームのパッケージは、分割パッケージと呼ばれます。

ただし、prototype ファイル内で省略可能な part フィールドを使用して、配置するオブジェクトの部分を定義することもできます。このフィールドの数値が pkgmk コマンドに優先され、このフィールドに指定された部分にコンポーネントが強制的に配置されます。ファイルシステムとしてフォーマットされたリムーバブルメディアでは、各部分と各ボリューム間に一対一の対応が存在します。ボリュームが開発者によって事前に割り当てられている場合、 容量が不足しているボリュームが存在すると pkgmk コマンドでエラーが発生します。

prototype ファイルの入れ子化

複数の prototype ファイルを作成し、!include コマンドを使用してそれらのファイルを prototype ファイルに組み込むことができます。保守を容易にするために、ファイルを入れ子にすることもできます。

次の例では、prototype ファイルが 3 つあります。メインファイル (prototype) は編集します。その他の 2 つのファイル (proto2proto3) は組み込みます。


!include /source-dir/proto2
!include /source-dir/proto3

mode フィールド、owner フィールド、および group フィールドのデフォルト値の設定

mode フィールド、 owner フィールド、および group フィールドにデフォルト値を設定するには、!default コマンドを prototype ファイルに挿入します。次に例を示します。


!default 0644 root other

注 –

!default コマンドの範囲は、コマンドの挿入位置から始まり、ファイルの末尾までに及びます。コマンドの範囲は、組み込まれたファイルには適用されません。


ただし、ターゲットシステム (/usr または /etc/vfstab など) に存在することがわかっているディレクトリ (ファイルタイプ d) および編集可能なファイル (ファイルタイプ e) の場合、 prototype ファイル内で mode フィールド、owner フィールド、および group フィールドを疑問符 (?) に設定する必要があります。これにより、サイト管理者が変更した可能性がある既存の設定が破棄されません。

pkgmk コマンドの検索パスの指定

パッケージオブジェクトのソースの場所がターゲットの場所と異なり、「オブジェクトのソースおよびターゲットの場所の簡略な記述」で説明されているpath1=path2 形式を使用しない場合、prototype ファイル内で !search コマンドを使用できます。

たとえば、ホームディレクトリに pkgfiles というディレクトリを作成し、そのディレクトリにすべての情報ファイルとインストールスクリプトが含まれる場合、pkgmk コマンドでパッケージを構築するときにこのディレクトリが検索されるように指定できます。

prototype ファイル内のこのコマンドは次のようになります。


!search /home-dir/pkgfiles

注 –

検索要求は、組み込まれたファイルには適用されません。また、検索は、リストされた特定のディレクトリに制限され、再帰的には検索しません。


環境変数の設定

!PARAM=value 形式の prototype ファイルには、コマンドを追加することもできます。この形式のコマンドは、現在の環境の変数を定義します。複数の prototype ファイルを使用する場合、このコマンドのスコープは、コマンドが定義されている prototype ファイルに対してローカルです。

変数 PARAM は、小文字または大文字で始めることができます。PARAM 変数の値が構築時に不明な場合、pkgmk コマンドはエラーで中断されます。構築変数とインストール変数の違いについては、「パッケージ環境変数」を参照してください。

Procedurepkgproto コマンドを使用して prototype ファイルを作成する方法


注 –

情報ファイルとインストールスクリプトは、prototype ファイルを作成する前に作成したほうが簡単です。ただし、この順序は必須ではありません。パッケージコンテンツを変更したあと、prototype ファイルをいつでも編集できます。情報ファイルとインストールスクリプトについては、第 3 章パッケージの機能の拡張 (作業)を参照してください。


  1. まだ決定していない場合、絶対的なパッケージオブジェクトと再配置可能なパッケージオブジェクトを決定します。

    この手順を完了させるための情報については、path フィールド」を参照してください。

  2. ターゲットシステム上での配置を模倣するようにパッケージオブジェクトを編成します。

    「パッケージのコンテンツの編成」で説明されているようにパッケージを編成済みの場合、手順 1 での決定に基づき、いくつかの変更を加える必要が生じることがあります。パッケージをまだ編成していない場合、ここで編成するようにしてください。パッケージを編成しない場合、pkgproto コマンドを使用して基本的な prototype ファイルを作成できません。

  3. 集合的再配置可能オブジェクトがパッケージに含まれる場合、pkginfo ファイルを編集して、BASEDIR パラメータを適切な値に設定します。

    次に例を示します。


    BASEDIR=/opt

    集合的再配置可能オブジェクトについては、「集合的再配置可能オブジェクト」を参照してください。

  4. 個別再配置可能オブジェクトがパッケージに含まれる場合、インストーラに対して適切なパス名を要求する request スクリプトを作成します。あるいは、ファイルシステムデータから適切なパスを決定する checkinstall スクリプトを作成します。

    次の一覧に、共通の作業を参照するためのページ番号を示します。

  5. すべてのパッケージコンポーネントの所有者とグループを、ターゲットシステム上で希望の所有者とグループに変更します。

    パッケージと情報ファイルのディレクトリ上で chown -Rchgrp -R コマンドを使用します。

  6. pkgproto コマンドを実行して、基本的な prototype ファイルを作成します。

    pkgproto コマンドは、ディレクトリをスキャンして基本的なファイルを作成します。次に例を示します。


    $ cd package-directory
    $ pkgproto ./package-directory > prototype
    

    prototype ファイルは、システム上の任意の場所に配置できます。情報ファイルとインストールスクリプトを 1 つの場所に保管すると、アクセスと保守が容易になります。pkgproto コマンドについては、pkgproto(1) のマニュアルページを参照してください。

  7. 任意のテキストエディタを使用して prototype ファイルを編集し、v ex、および i のタイプのファイルにエントリを追加します。

    必要となる特定の変更内容については、pkgproto コマンドで作成した prototype ファイルの微調整」を参照してください。

  8. (省略可能) 複数のクラスを使用する場合、prototype ファイルと pkginfo ファイルを編集します。任意のテキストエディタを使用して、必要な変更を加え、対応するクラスアクションスクリプトを作成します。

    必要となる特定の変更内容については、pkgproto コマンドで作成した prototype ファイルの微調整」および「クラスアクションスクリプトの書き込み」を参照してください。

  9. 任意のテキストエディタで prototype ファイルを編集して、パス名を再定義し、その他のフィールド設定を変更します。

    詳細については、pkgproto コマンドで作成した prototype ファイルの微調整」を参照してください。

  10. (省略可能) 任意のテキストエディタで prototype ファイルを編集して、prototype ファイルに機能を追加します。

    詳細については、prototype ファイルへの機能の追加」を参照してください。

  11. ファイルを保存してエディタを終了します。

参照

次の作業の準備が整っている場合、「パッケージの構築方法」を参照してください。

パッケージの構築

pkgmk コマンドを使用してパッケージを構築します。 pkgmk コマンドは、次の処理を実行します。

最も簡単な pkgmk コマンドの使用

pkgmk コマンドの最も簡単な形式は、オプションを指定しない場合です。オプションを指定せずに pkgmk コマンドを使用する前に、現在の作業用ディレクトリにパッケージの prototype ファイルを含める必要があります。コマンド、ファイル、およびディレクトリの出力は、/var/spool/pkg ディレクトリに書き込まれます。

pkgmap ファイル

pkgmk コマンドでパッケージを構築する場合、prototype ファイルに置き換える pkgmap ファイルがコマンドによって作成されます。前の例で使用した pkgmap ファイルには、次のコンテンツが含まれています。


$ more pkgmap
: 1 3170
1 d none SUNWcadap 0755 root sys
1 d none SUNWcadap/demo 0755 root bin
1 f none SUNWcadap/demo/file1 0555 root bin 14868 45617 837527496
1 d none SUNWcadap/lib 0755 root bin
1 f none SUNWcadap/lib/file2 0644 root bin 1551792 62372 837527499
1 d none SUNWcadap/man 0755 bin bin
1 d none SUNWcadap/man/man1 0755 bin bin
1 f none SUNWcadap/man/man1/file3.1 0444 bin bin 3700 42989 837527500
1 f none SUNWcadap/man/man1/file4.1 0444 bin bin 1338 44010 837527499
1 f none SUNWcadap/man/windex 0644 root other 157 13275 837527499
1 d none SUNWcadap/srcfiles 0755 root bin
1 f none SUNWcadap/srcfiles/file5 0555 root bin 12208 20280 837527497
1 f none SUNWcadap/srcfiles/file6 0555 root bin 12256 63236 837527497
1 i pkginfo 140 10941 837531104
$

このファイルの形式は、prototype ファイルの形式とよく似ています。ただし、pkgmap ファイルには、次の情報が含まれます。

Procedureパッケージの構築方法

  1. まだ作成していない場合、pkginfo ファイルを作成します。

    作成手順については、pkginfo ファイルの作成方法」を参照してください。

  2. まだ作成していない場合、prototype ファイルを作成します。

    作成手順については、pkgproto コマンドを使用して prototype ファイルを作成する方法」を参照してください。

  3. 現在の作業用ディレクトリを、パッケージの prototype ファイルを含むディレクトリと同じものにします。

  4. パッケージを構築します。


    $ pkgmk [-o] [-a arch] [-b base-src-dir] [-d device]
       [-f filename] [-l limit] [-p pstamp] [-r rootpath]
       [-v version] [PARAM=value] [pkginst]
    -o

    既存のバージョンのパッケージを上書きします。

    -a arch

    pkginfo ファイル内のアーキテクチャー情報を上書きします。

    -b base-src-dir

    pkgmk コマンドが開発システム上のオブジェクトを検索するときに base-src-dir が再配置可能なパス名の先頭に追加されるように要求します。

    -d device

    device (絶対ディレクトリパス名、フロッピーディスク、またはリムーバブルディスクの場合がある) にパッケージがコピーされるように指定します。

    -f filename

    prototype ファイルとして使用されるファイル filename を指定します。デフォルト名は、prototype または Prototype です。

    -l limit

    512 バイトブロック単位で、出力デバイスの最大サイズを指定します。

    -p pstamp

    pkginfo ファイル内の製品スタンプ定義を上書きします。

    -r rootpath

    開発システム上でオブジェクトを検出するためにルートディレクトリ rootpath が使用されるように要求します。

    -v version

    pkginfo ファイル内のバージョン情報を上書きします。

    PARAM=value

    グローバルの環境変数を設定します。小文字で始まる変数は、構築時に解釈処理されます。大文字で始まる変数は pkginfo ファイルに配置され、インストール時に使用されます。

    pkginst

    パッケージの省略名または特定のインスタンス (例: SUNWcadap.4) を指定します。

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

  5. パッケージのコンテンツを確認します。


    $ pkgchk -d device-name pkg-abbrev
    Checking uninstalled directory format package pkg-abbrev
    from device-name
    ## Checking control scripts.
    ## Checking package objects.
    ## Checking is complete.
    $
    -d device-name

    パッケージの位置を指定します。device-name には、完全なディレクトリ パス、またはテープやリムーバルディスクの識別子を指定できます。

    pkg-abbrev

    チェックされる、1 つ以上の (空白で区切られた) パッケージの名前です。やこの引数を省略すると、pkgchk コマンドにより、使用可能なすべてのパッケージがチェックされます。

    pkgchk コマンドは、必要に応じて、パッケージのチェックされる内容を印刷し、警告やエラーを表示します。pkgchk コマンドについては、「パッケージの整合性の確認」を参照してください。


    注意 – 注意 –

    エラーについては、真剣に検討するようにしてください。エラーがある場合、スクリプトの修正が必要な可能性があります。pkgchk コマンドの出力が好ましくない場合、すべてのエラーをチェックしてから先に進んでください。



例 2–2 パッケージの構築

次の例では、Fine-Tuning a prototype File Created With the pkgproto Commandで作成した pkgproto コマンドで作成した prototype ファイルの微調整」 ファイルを使用します。


$ cd /home/jane/InfoFiles
$ pkgmk
## Building pkgmap from package prototype file.
## Processing pkginfo file.
WARNING: parameter  set to "system990708093144"
WARNING: parameter  set to "none"
## Attempting to volumize 13 entries in pkgmap.
part  1 -- 3170 blocks, 17 entries
## Packaging one part.
/var/spool/pkg/SUNWcadap/pkgmap
/var/spool/pkg/SUNWcadap/pkginfo
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/demo/file1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/lib/file2
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file3.1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file4.1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/windex
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file5
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file6
## Validating control scripts.
## Packaging complete.
$


例 2–3 再配置可能ファイルのソースディレクトリの指定

パッケージに再配置可能ファイルが含まれる場合、pkgmk コマンドの -b base-src-dir オプションを使用して、パッケージの作成時に再配置可能なパス名の先頭に追加するパス名を指定します。このオプションは、再配置可能ファイルに対して path1=path2 形式を使用していない場合や、prototype ファイル内で !search コマンドを使用して検索パスを指定していない場合に便利です。

次のコマンドでは、次に示す特性によってパッケージを構築します。


$ cd /home/jane/InfoFiles
$ pkgmk -o -b /home/jane
## Building pkgmap from package prototype file.
## Processing pkginfo file.
WARNING: parameter  set to "system960716102636"
WARNING: parameter  set to "none"
## Attempting to volumize 13 entries in pkgmap.
part  1 -- 3170 blocks, 17 entries
## Packaging one part.
/var/spool/pkg/SUNWcadap/pkgmap
/var/spool/pkg/SUNWcadap/pkginfo
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/demo/file1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/lib/file2
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file3.1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file4.1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/windex
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file5
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file6
## Validating control scripts.
## Packaging complete.

この例では、-o オプションを指定して、デフォルトのディレクトリ /var/spool/pkg にパッケージが構築されます。このオプションにより、例 2–2 で作成されたパッケージが上書きされます。



例 2–4 情報ファイルとパッケージオブジェクトへの異なるソースディレクトリの指定

パッケージ情報ファイル (pkginfo および prototype) とパッケージオブジェクトを 2 つの異なるディレクトリに配置する場合、pkgmk コマンドの -b base-src-dir オプションと - r rootpath オプションを使用してパッケージを作成できます。パッケージオブジェクトが /product/pkgbin というディレクトリに含まれ、その他のパッケージ情報ファイルが /product/pkgsrc というディレクトリに含まれる場合、次のコマンドを使用してパッケージを /var/spool/pkg ディレクトリに配置できます。


$ pkgmk -b /product/pkgbin -r /product/pkgsrc -f /product/pkgsrc/prototype

また、次のコマンドを使用した場合でも、同じ結果が得られます。


$ cd /product/pkgsrc
$ pkgmk -o -b /product/pkgbin

この例では、pkgmk コマンドは現在の作業用ディレクトリを使用してパッケージの残りの部分 (prototype 情報ファイルや pkginfo 情報ファイルなど) を検索します。


参照

省略可能な情報ファイルおよびインストールスクリプトをパッケージに追加するには、第 3 章パッケージの機能の拡張 (作業)を参照してください。追加しない場合、パッケージの構築後にパッケージの整合性を確認するようにしてください。第 4 章パッケージの確認と転送では、パッケージの確認方法について説明し、確認済みのパッケージを配布媒体に転送する方法について順を追って説明します。