パッケージを構築する前に、作成する必要があるファイルと、実行する必要があるコマンドについて理解しておく必要があります。また、アプリケーションソフトウェアおよび要件および顧客の需要についても考慮する必要があります。顧客が管理者となり、パッケージをインストールします。この章では、パッケージを構築する前に理解および考慮しておくべきファイル、コマンド、および条件について説明します。
この章で説明する情報は次のとおりです。
パッケージの構築および確認のための作業を特定するには、次の作業マップを使用します。
アプリケーションソフトウェアは、パッケージと呼ばれる単位で配信されます。パッケージは、ソフトウェア製品に必要なファイルおよびディレクトリの集合です。通常、パッケージは、アプリケーションコードの開発が完了したあとでアプリケーション開発者が設計して構築します。配布媒体に転送しやすいように、ソフトウェア製品を 1 つ以上のパッケージに分けて構築する必要があります。これにより、管理者は、ソフトウェア製品を大量に生成し、インストールできるようになります。
パッケージは、定義された形式でのファイルおよびディレクトリの集合です。このフォーマットは、アプリケーションバイナリインタフェース (ABI) に準拠します。ABI は、System V インタフェース定義を補足するものです。
パッケージのコンポーネントは 2 つのカテゴリに分類されます。
パッケージオブジェクトは、 インストールされるアプリケーションファイルです。
制御ファイル は、パッケージをインストールする方法、場所、および条件を制御します。
また、制御ファイルは、情報ファイルとインストールスクリプトという 2 つのカテゴリに分類されます。制御ファイルには、必須のものと省略可能なものがあります。
アプリケーションをパッケージ化するには、パッケージを構成する必須コンポーネントをまず作成し、次に省略可能なコンポーネントを作成します。そのあと、 pkgmk コマンドを使用して、パッケージを構築できます。
パッケージを構築するには、次のものを用意します。
パッケージオブジェクト (アプリケーションソフトウェアのファイルとディレクトリ)
省略可能な情報ファイル
省略可能なインストールスクリプト
次の図に、パッケージのコンテンツを示します。
パッケージを構築する前に、次のコンポーネントを作成する必要があります。
パッケージオブジェクト
このコンポーネントはアプリケーションを構成します。パッケージオブジェクトは、次の項目で構成されます。
ファイル (実行可能ファイルまたはデータファイル)
ディレクトリ
名前付きパイプ
リンク
デバイス
pkginfo ファイル
pkginfo ファイルは、パラメータ値を定義する必須のパッケージ情報ファイルです。パラメータ値には、パッケージの省略名、正式名称、およびアーキテクチャーが含まれます。詳細については、「pkginfo ファイルの作成」と pkginfo(4) のマニュアルページを参照してください。
pkginfo(1) のマニュアルページは、2 ページで構成されています。1 ページ目では、インストールされるパッケージに関する情報を表示する、セクション 1 のコマンドについて説明します。2 ページ目では、パッケージの特性を記載した、セクション 4 のファイルについて説明します。マニュアルページにアクセスする場合、マニュアルページの該当するセクションを指定する必要があります。次に入力例を示します。 man -s 4 pkginfo
prototype ファイル
prototype ファイルは、必須のパッケージ情報ファイルであり、パッケージのコンポーネントの一覧が記述されます。パッケージオブジェクト、情報ファイル、およびインストールスクリプトには、それぞれ 1 つのエントリが存在します。エントリは、場所、属性、ファイルタイプなど、各コンポーネントを説明するいくつかの情報フィールドで構成されます。詳細については、「prototype ファイルの作成 」と prototype(4) のマニュアルページを参照してください。
パッケージには、次に示す省略可能な 4 つのパッケージ情報ファイルを含めることができます。
作成するパッケージのバージョンと互換性がある、以前のバージョンのパッケージを定義します。
パッケージと特別な関連があるほかのパッケージを示します。
ターゲット環境で必要なディスク容量を定義します。prototype ファイルで定義されたオブジェクトが必要とする容量よりも大きなサイズを指定します。たとえば、インストール時にファイルが動的に作成される場合、追加の容量が必要になることがあります。
パッケージのインストール時に表示される、著作権に関するメッセージのテキストを定義します。
各パッケージ情報ファイルには、prototype ファイル内にエントリが必要です。パッケージ情報ファイルの作成の詳細については、「情報ファイルの作成」を参照してください。
インストールスクリプトは必須ではありません。 ただし、インストールスクリプトを用意すると、パッケージのインストール時にカスタマイズしたアクションを実行できます。インストールスクリプトには、次の特性があります。
スクリプトは、Bourne シェルコマンドで構成されます。
スクリプトのファイル権限は 0644 に設定するようにしてください。
スクリプトには、シェル識別子 ( #! /bin/sh) を含める必要はありません。
request スクリプト
checkinstall スクリプト
checkinstall スクリプトは、特別なファイル システム検査を実行します。
checkinstall スクリプトは、SolarisTM 2.5 リリースおよび互換性のあるリリースでのみ使用できます。
手続きスクリプトは、パッケージのインストールおよび削除時の特定の時点で発生するアクションを定義します。次に示す定義済みの名前を指定して、4 種類の手続きスクリプトを作成できます: preinstall、postinstall、preremove、および postremove 。
クラスアクションスクリプトは、オブジェクトのグループで実行される一連のアクションを定義します。
インストールスクリプトの詳細については、「インストールスクリプトの作成」を参照してください。
パッケージを構築する前に、製品を 1 つ以上のパッケージで構成するかどうかを決定する必要があります。小さいパッケージを数多くインストールする場合、大きなパッケージを 1 つインストールするよりも時間がかかります。単一のパッケージを作成することが良い選択ではありますが、いつでも可能というわけではありません。複数のパッケージを構築することに決めた場合、アプリケーション コードを分割する方法を決定する必要があります。この節では、パッケージの構築を計画するときに使用する条件の一覧を示します。
パッケージ化の条件は、各条件の間でトレードオフが生じることがよくあります。すべての要件を均等に満たすことは、多くの場合、困難です。これらの条件を重要度の高いものから順に紹介します。ただし、この順序は、大まかな目安であり、状況に応じて変更すべきものです。条件はどれも重要ですが、適切なパッケージのセットを作成するためにこれらの条件を最適化するかどうかはユーザーで判断してください。
パッケージ設計の詳細な手法については、第 6 章パッケージの作成のための高度な手法を参照してください。
すべてのパッケージを、リモートでインストールできるようにしてください。パッケージをリモートでインストールできれば、管理者がクライアントシステムでインストールできるので、pkgadd コマンドを実行するルート (/) ファイルシステムにパッケージをインストールする必要はなくなります。
パッケージの配置時に、スタンドアロンシステムやサーバーなど、各種のシステムソフトウェア構成を検討します。構成タイプごとにインストールが最適化されるよう、パッケージを適切に設計し、影響を受けるファイルを分割します。たとえば、ルート (/) ファイルシステムと /usr ファイルシステムの内容を分割すると、サーバー構成のサポートが容易に行えるようになります。
パッケージは、自己完結的で、明確に 1 つにまとまった機能を持つようにしてください。たとえば、UFS を含むパッケージは、すべての UFS 機能を含み、UFS のバイナリにのみ制限されるべきです。
パッケージは、顧客の観点から見て、機能単位ごとに分類するようにしてください。
契約上の合意のためにロイヤリティーの支払いが必要となるコードは、専用のパッケージまたはパッケージグループに配置します。必要以上の数のパッケージにコードを分散させないでください。
システムに依存するバイナリは専用のパッケージに格納します。たとえば、カーネルコードは、各実装アーキテクチャーを個々のパッケージインスタンスで構成して、専用のパッケージに格納するようにしてください。また、この規則は、別のアーキテクチャーのバイナリにも適用されます。たとえば、SPARC システムのバイナリと x86 システムのバイナリは、それぞれ別のパッケージに格納するようにしてください。
パッケージを作成するとき、重複するファイルはできるだけ削除します。ファイルが無駄に重複すると、サポートとバージョン管理が困難になります。複数のパッケージが製品に含まれる場合、それぞれの内容を繰り返し比較し、重複するファイルがないか調べてください。
ローカライズ版に固有の項目は、専用のパッケージに格納するようにしてください。理想的なパッケージモデルは、製品のローカライズ版をロケールごとに 1 つのパッケージとして配信するものです。残念ながら、組織的な境界が、機能的な境界や製品的な境界と両立しない場合があります。
また、各国で共有される標準設定もパッケージで配信できます。このようにパッケージを設計すると、ローカライズ版の変更に必要なファイルを識別し、ローカライズ版パッケージの配信形式を標準化できます。
本書では、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 パッケージ化のためのコマンド
作業 |
コマンド/マニュアルページ |
説明 |
詳細 |
---|---|---|---|
パッケージの作成 |
pkgmk コマンドに入力するための prototype ファイルを生成します | ||
インストール可能なパッケージの作成 |
|
||
パッケージのインストール、削除、および転送 |
ソフトウェアパッケージをシステムにインストールします | ||
応答を request スクリプトに格納します |
|
||
パッケージを配布媒体にコピーします |
|
||
パッケージをシステムから削除します |
|
||
パッケージに関する情報の取得 |
ソフトウェアパッケージの整合性を確認します | ||
ソフトウェアパッケージの情報を表示します |
|
||
パッケージのパラメータ値を表示します |
|
||
インストールされたパッケージの変更 |
インストール済みのパッケージに新規のパッケージオブジェクトを組み込みます | ||
インストール済みのパッケージからパッケージオブジェクトを削除します |
|
表 1–3 パッケージ情報ファイル
ファイル |
説明 |
詳細 |
---|---|---|
パッケージをインストールするためのデフォルトのファイル | ||
パッケージの互換性ファイル | ||
パッケージの著作権に関する情報ファイル | ||
パッケージの依存関係に関するファイル | ||
パッケージの特性に関するファイル | ||
パッケージコンテンツについての説明ファイル | ||
パッケージ情報ファイル | ||
パッケージのディスク容量要件に関するファイル |
次の表では、省略可能なインストールスクリプトについて示します。これらのインストールスクリプトはユーザーが書き込むことができ、パッケージのインストール条件および方法に影響を与えます。
表 1–4 パッケージインストールスクリプト
スクリプト |
説明 |
詳細 |
---|---|---|
request |
インストーラから情報を要求します | |
checkinstall |
ファイルシステムデータを収集します | |
preinstall |
クラスをインストールする前に、いずれかのカスタムインストール要件を実行します | |
postinstall |
ボリュームをすべてインストールしたあとに、カスタムインストール要件をすべて実行します | |
preremove |
クラスを削除する前に、いずれかのカスタム削除要件を実行します | |
postremove |
クラスをすべて削除したあとに、カスタム削除要件をすべて実行します | |
クラスアクション |
オブジェクトの特定のグループで一連のアクションを実行します |