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

第 1 章 パッケージの設計

パッケージを構築する前に、作成する必要があるファイルと、実行する必要があるコマンドについて理解しておく必要があります。また、アプリケーションソフトウェアおよび要件および顧客の需要についても考慮する必要があります。顧客が管理者となり、パッケージをインストールします。この章では、パッケージを構築する前に理解および考慮しておくべきファイル、コマンド、および条件について説明します。

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

パッケージ作業の場所

パッケージの構築および確認のための作業を特定するには、次の作業マップを使用します。

パッケージとは

アプリケーションソフトウェアは、パッケージと呼ばれる単位で配信されます。パッケージは、ソフトウェア製品に必要なファイルおよびディレクトリの集合です。通常、パッケージは、アプリケーションコードの開発が完了したあとでアプリケーション開発者が設計して構築します。配布媒体に転送しやすいように、ソフトウェア製品を 1 つ以上のパッケージに分けて構築する必要があります。これにより、管理者は、ソフトウェア製品を大量に生成し、インストールできるようになります。

パッケージは、定義された形式でのファイルおよびディレクトリの集合です。このフォーマットは、アプリケーションバイナリインタフェース (ABI) に準拠します。ABI は、System V インタフェース定義を補足するものです。

パッケージコンポーネント

パッケージのコンポーネントは 2 つのカテゴリに分類されます。

また、制御ファイルは、情報ファイルインストールスクリプトという 2 つのカテゴリに分類されます。制御ファイルには、必須のものと省略可能なものがあります。

アプリケーションをパッケージ化するには、パッケージを構成する必須コンポーネントをまず作成し、次に省略可能なコンポーネントを作成します。そのあと、 pkgmk コマンドを使用して、パッケージを構築できます。

パッケージを構築するには、次のものを用意します。

次の図に、パッケージのコンテンツを示します。

図 1–1 パッケージのコンテンツ

直前のコンテキストと次のコンテキストでは、上記の図について説明します。

必須のパッケージコンポーネント

パッケージを構築する前に、次のコンポーネントを作成する必要があります。

省略可能なパッケージコンポーネント

パッケージ情報ファイル

パッケージには、次に示す省略可能な 4 つのパッケージ情報ファイルを含めることができます。

各パッケージ情報ファイルには、prototype ファイル内にエントリが必要です。パッケージ情報ファイルの作成の詳細については、「情報ファイルの作成」を参照してください。

パッケージインストールスクリプト

インストールスクリプトは必須ではありません。 ただし、インストールスクリプトを用意すると、パッケージのインストール時にカスタマイズしたアクションを実行できます。インストールスクリプトには、次の特性があります。

スクリプトには、次の 4 つのタイプがあります。

インストールスクリプトの詳細については、「インストールスクリプトの作成」を参照してください。

パッケージを構築する前の考慮事項

パッケージを構築する前に、製品を 1 つ以上のパッケージで構成するかどうかを決定する必要があります。小さいパッケージを数多くインストールする場合、大きなパッケージを 1 つインストールするよりも時間がかかります。単一のパッケージを作成することが良い選択ではありますが、いつでも可能というわけではありません。複数のパッケージを構築することに決めた場合、アプリケーション コードを分割する方法を決定する必要があります。この節では、パッケージの構築を計画するときに使用する条件の一覧を示します。

パッケージ化の条件は、各条件の間でトレードオフが生じることがよくあります。すべての要件を均等に満たすことは、多くの場合、困難です。これらの条件を重要度の高いものから順に紹介します。ただし、この順序は、大まかな目安であり、状況に応じて変更すべきものです。条件はどれも重要ですが、適切なパッケージのセットを作成するためにこれらの条件を最適化するかどうかはユーザーで判断してください。

パッケージ設計の詳細な手法については、第 6 章パッケージの作成のための高度な手法を参照してください。

パッケージをリモートでインストールできるようにする

すべてのパッケージを、リモートでインストールできるようにしてください。パッケージをリモートでインストールできれば、管理者がクライアントシステムでインストールできるので、pkgadd コマンドを実行するルート (/) ファイルシステムにパッケージをインストールする必要はなくなります。

クライアントサーバー構成の最適化

パッケージの配置時に、スタンドアロンシステムやサーバーなど、各種のシステムソフトウェア構成を検討します。構成タイプごとにインストールが最適化されるよう、パッケージを適切に設計し、影響を受けるファイルを分割します。たとえば、ルート (/) ファイルシステムと /usr ファイルシステムの内容を分割すると、サーバー構成のサポートが容易に行えるようになります。

機能ごとのパッケージ

パッケージは、自己完結的で、明確に 1 つにまとまった機能を持つようにしてください。たとえば、UFS を含むパッケージは、すべての UFS 機能を含み、UFS のバイナリにのみ制限されるべきです。

パッケージは、顧客の観点から見て、機能単位ごとに分類するようにしてください。

ロイヤリティの適用規定に沿ったパッケージ

契約上の合意のためにロイヤリティーの支払いが必要となるコードは、専用のパッケージまたはパッケージグループに配置します。必要以上の数のパッケージにコードを分散させないでください。

依存するシステムごとのパッケージ

システムに依存するバイナリは専用のパッケージに格納します。たとえば、カーネルコードは、各実装アーキテクチャーを個々のパッケージインスタンスで構成して、専用のパッケージに格納するようにしてください。また、この規則は、別のアーキテクチャーのバイナリにも適用されます。たとえば、SPARC システムのバイナリと x86 システムのバイナリは、それぞれ別のパッケージに格納するようにしてください。

パッケージ内での重複の排除

パッケージを作成するとき、重複するファイルはできるだけ削除します。ファイルが無駄に重複すると、サポートとバージョン管理が困難になります。複数のパッケージが製品に含まれる場合、それぞれの内容を繰り返し比較し、重複するファイルがないか調べてください。

ローカライズ版ごとのパッケージ

ローカライズ版に固有の項目は、専用のパッケージに格納するようにしてください。理想的なパッケージモデルは、製品のローカライズ版をロケールごとに 1 つのパッケージとして配信するものです。残念ながら、組織的な境界が、機能的な境界や製品的な境界と両立しない場合があります。

また、各国で共有される標準設定もパッケージで配信できます。このようにパッケージを設計すると、ローカライズ版の変更に必要なファイルを識別し、ローカライズ版パッケージの配信形式を標準化できます。

Image Packaging System (IPS) パッケージ

本書では、SVR4 のパッケージについて説明しています。OpenSolaris OS への配信に際し、Image Packaging System (IPS) パッケージの使用を検討してください。OpenSolaris OS は SVR4 と IPS の両方のパッケージをサポートします。IPS ソフトウェアは、ネットワークリポジトリと対話し、ZFS ファイルシステムを使用します。OpenSolaris OS では、pkgsend(1) コマンドを使用して既存の SVR4 パッケージを IPS リポジトリに公開できます。

次の表は、SVR4 パッケージ化システムと IPS パッケージ化システムのコマンドを比較したものです。IPS の詳細は、Getting Started With the Image Packaging System を参照してください。

表 1–1 パッケージ化の作業: IPS と SVR4

作業 

IPS コマンド 

SVR4 コマンド 

新しいパッケージのインストール 

pkg install

pkgadd -a

パッケージの状態に関する情報を表示する 

pkg list

pkginfo

パッケージが正しくインストールされたかどうかを確認する 

pkg verify

pkgchk -v

パッケージに関する情報を表示する 

pkg info

pkginfo -l

パッケージの内容を一覧表示する 

pkg contents

pkgchk -l

パッケージをアンインストールする 

pkg uninstall

pkgrm

コマンド、ファイル、およびスクリプトのパッケージ化

この節では、パッケージの操作時に使用する可能性があるコマンド、ファイル、およびスクリプトについて説明します。これらは、各々が実行する固有の作業とともに、マニュアルページで説明されており、本書の中でも詳細に説明されています。

次の表に、パッケージについての情報を作成、確認、インストール、および取得するのに役立つコマンドを示します。

表 1–2 パッケージ化のためのコマンド

作業 

コマンド/マニュアルページ 

説明 

詳細 

パッケージの作成 

pkgproto(1)

pkgmk コマンドに入力するための prototype ファイルを生成します

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

pkgmk(1)

インストール可能なパッケージの作成 

「パッケージの構築」

 

パッケージのインストール、削除、および転送 

pkgadd(1M)

ソフトウェアパッケージをシステムにインストールします 

「ソフトウェアパッケージのインストール」

pkgask(1M)

応答を request スクリプトに格納します

request スクリプトの設計規則」

 

pkgtrans(1)

パッケージを配布媒体にコピーします 

「配布媒体へのパッケージの転送」

 

pkgrm(1M)

パッケージをシステムから削除します 

「パッケージの削除」

 

パッケージに関する情報の取得 

pkgchk(1M)

ソフトウェアパッケージの整合性を確認します 

「パッケージの整合性の確認」

pkginfo(1)

ソフトウェアパッケージの情報を表示します 

pkginfo コマンド」

 

pkgparam(1)

パッケージのパラメータ値を表示します 

pkgparam コマンド」

 

インストールされたパッケージの変更 

installf(1M)

インストール済みのパッケージに新規のパッケージオブジェクトを組み込みます 

「手続きスクリプトの設計規則」第 5 章パッケージ作成のケーススタディー

removef(1M)

インストール済みのパッケージからパッケージオブジェクトを削除します 

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

 

次の表に、パッケージの構築に役立つ情報ファイルを示します。

表 1–3 パッケージ情報ファイル

ファイル 

説明 

詳細 

admin(4)

パッケージをインストールするためのデフォルトのファイル 

「管理デフォルトファイル」

compver(4)

パッケージの互換性ファイル 

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

copyright(4)

パッケージの著作権に関する情報ファイル 

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

depend(4)

パッケージの依存関係に関するファイル 

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

pkginfo(4)

パッケージの特性に関するファイル 

pkginfo ファイルの作成」

pkgmap(4)

パッケージコンテンツについての説明ファイル 

pkgmap ファイル」

prototype(4)

パッケージ情報ファイル 

prototype ファイルの作成 」

space(4)

パッケージのディスク容量要件に関するファイル 

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

次の表では、省略可能なインストールスクリプトについて示します。これらのインストールスクリプトはユーザーが書き込むことができ、パッケージのインストール条件および方法に影響を与えます。

表 1–4 パッケージインストールスクリプト

スクリプト 

説明 

詳細 

request

インストーラから情報を要求します 

request スクリプトの書き込み」

checkinstall

ファイルシステムデータを収集します 

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

preinstall

クラスをインストールする前に、いずれかのカスタムインストール要件を実行します 

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

postinstall

ボリュームをすべてインストールしたあとに、カスタムインストール要件をすべて実行します 

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

preremove

クラスを削除する前に、いずれかのカスタム削除要件を実行します 

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

postremove

クラスをすべて削除したあとに、カスタム削除要件をすべて実行します 

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

クラスアクション 

オブジェクトの特定のグループで一連のアクションを実行します 

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