上記の目標や考えを踏まえて、IPS はソフトウェアの自己アセンブリという一般概念を取り入れています: システムにインストールされたソフトウェアのどのコレクションも、パッケージ化の操作が完了するときまで、またはソフトウェアの実行時に、そのシステムがブートすると、コレクション自身を作業用構成に組み込むことができます。
ソフトウェアの自己アセンブリでは、IPS でのインストール時のスクリプト作成が必要ありません。ソフトウェアは自身の構成に責任を持ち、パッケージシステムがソフトウェアの代わりにその構成を実行するのに頼ることはありません。ソフトウェアの自己アセンブリを使用すると、パッケージシステムは、現在ブートしていないブート環境や、オフラインのゾーンルートなどの代替イメージでも安全に動作できます。また、自己アセンブリは実行時イメージに対してのみ実行されるため、パッケージ開発者はバージョン間またはアーキテクチャー間の実行時コンテキストに対処する必要はありません。
ブート前にオペレーティングシステムイメージの準備が多少必要です。そうすれば、IPS はこれを透過的に管理できます。イメージの準備には、ブートブロックの更新、ブートアーカイブ (ramdisk) の準備、および一部のアーキテクチャーではブート環境選択のメニューの管理などがあります。
次の IPS 機能および特性により、ソフトウェアの自己アセンブリが容易になります。
アクションとは IPS でのソフトウェア配布の不可分単位です。各アクションは 1 つのソフトウェアオブジェクトを配布します。そのソフトウェアオブジェクトは、ファイル、ディレクトリ、リンクなどのファイルシステムオブジェクトにも、ユーザー、グループ、デバイスドライバなどのより複雑なソフトウェア構成にもなり得ます。SVR4 パッケージシステムでは、これらのより複雑なアクションタイプは、クラスアクションスクリプトを使用して処理されます。IPS では、スクリプト作成は必要ありません。
アクションは、いくつかのパッケージにまとめられ、ライブイメージとオフラインイメージの両方からインストール、更新、および削除できます。ライブイメージは、現在のゾーンのアクティブな実行中のブート環境の / にマウントされたイメージです。
アクションについては、パッケージの内容: アクションに詳しく説明されています。
IPS では、パッケージ化の操作中にスクリプトを使用して構成ファイルを更新するのではなく、構成ファイルのフラグメントを配布することを推奨しています。このフラグメントは、次の方法で使用できます。
ファイルフラグメントを認識するようにパッケージ化されたアプリケーションを作成できます。アプリケーションは、その構成の読み取り時に構成ファイルフラグメントに直接アクセスするか、あるいは、フラグメントを完全な構成ファイルにまとめてから読み取ることができます。
構成ファイルのフラグメントのインストール、削除、または更新が行われるたびに、SMF サービスは構成ファイルをまとめなおすことができます。
構成ファイルをまとめるサービスを配布するパッケージの作成例については、フラグメントファイルからのカスタムファイルの作成を参照してください。
アクチュエータとは、パッケージシステムによって配布されたアクションに適用されるタグのことで、そのアクションがインストール、削除、または更新されたときにシステム変更をもたらします。これらの変更は通常、SMF サービスとして実装されます。アクチュエータの詳細については、パッケージインストールの一環としてのシステム変更の自動化を参照してください。
SMF サービスはソフトウェアを直接構成するか、SMF マニフェストに配布されたデータまたはシステムにインストールされたファイルのデータを使用すると、構成ファイルを作成できます。
SMF には、依存関係を表現するための多機能な構文があります。各サービスが実行されるのは、その必要な依存関係がすべて満たされている場合だけです。SMF サービスの詳細については、Oracle Solaris 11.3 でのシステムサービスの管理を参照してください。
どのサービスも、それ自身を svc:/milestone/self-assembly-complete:default SMF マイルストーンへの依存関係として追加できます。ブートオペレーティングシステムがこのマイルストーンに到達すると、自己アセンブリのすべての操作が行われます。
不変ゾーンと呼ばれる特別な種類のゾーンは、そのファイルシステムの一部に対する制限付き書き込みアクセス権を持つように構成できるゾーンです。zonecfg(1M) のマニュアルページの file-mac-profile の説明を参照してください。このタイプのゾーンで自己アセンブリを完了するには、Oracle Solaris ゾーンの作成と使用 の 書き込み可能なルートファイルシステムを持つ読み取り専用ゾーンをブートするオプションの説明に従い、ゾーン読み取り/書き込みをブートします。self-assembly-complete SMF マイルストーンがオンラインになると、必要な file-mac-profile 設定に基づいてゾーンが自動的にブートされます。
次の例では、Oracle Solaris の一部として配布されるパッケージについて説明します。
Apache Web Server 向け Oracle Solaris パッケージ pkg:/web/server/apache-22 が配布する httpd.conf ファイルには、/etc/apache2/2.2/conf.d ディレクトリ内の構成ファイルを参照する次の Include 指令が含まれています。
Include /etc/apache2/2.2/conf.d/*.conf
カスタム構成を適用するには、カスタム .conf ファイルをその conf.d ディレクトリに配布し、新しい .conf ファイルを配布するパッケージがインストール、更新、または削除されるたびに refresh_fmri アクチュエータを使用して Apache インスタンスを自動的にリフレッシュするパッケージを 1 つまたは複数作成できます。
file etc/apache2/2.2/conf.d/custom.conf path=etc/apache2/2.2/conf.d/custom.conf \ owner=root group=bin mode=0644 refresh_fmri=svc:/network/http:apache22
refresh_fmri アクチュエータの使用方法については、必要とされるファセットまたはアクチュエータがあれば追加するおよび パッケージインストールの一環としてのシステム変更の自動化を参照してください。
Apache サービスインスタンスをリフレッシュすると、Web サーバーによりその構成が再構築されます。これを検証するには、次のコマンドを使用して、Apache サービスインスタンスのリフレッシュ時に実行されるメソッドの名前を表示します。
$ svcprop -p refresh/exec http:apache22 /lib/svc/method/http-apache22\ refresh
メソッドを確認すると、http:apache22 インスタンスのリフレッシュで、graceful コマンドにより apachectl が呼び出され、Apache httpd デーモンが再起動されていることが示されています。
ユーザー属性は /etc/user_attr と、/etc/user_attr.d 内の追加の構成ファイルで構成されます。
/etc/user_attr 構成ファイルは、システム上の役割とユーザーに対して拡張属性を構成するために使用します。Oracle Solaris 11 では、/etc/user_attr ファイルはローカルの変更にだけ使用されます。完全な構成は、/etc/user_attr.d ディレクトリに配布された別個のファイルから読み取られます。完全な構成のフラグメントが、複数のパッケージによって配布されます。たとえば /etc/user_attr.d/core-os は system/core-os パッケージによって配布され、/etc/user_attr.d/ikev2-daemon は system/network/ike パッケージによって配布されます。
これらの構成ファイルをインストールしても、その結果、サービスが再起動またはリフレッシュされることはありません。これらのファイルをインストール、アンインストール、または更新するときにスクリプト処理は不要です。/etc/user_attr.d 内のファイルは、ネームサービスキャッシュデーモン nscd によって作成されます。nscd デーモンの動作は svc:/system/name-service/cache サービスにより管理されます。
$ svcs -p cache STATE STIME FMRI online 15:54:24 svc:/system/name-service/cache:default 15:54:24 100698 nscd
ネームサービスキャッシュデーモンは、user_attr の説明と同様の方法でほとんどのネームサービス要求に対し構成の合成を提供します。nscd(1M) のマニュアルページを参照してください。
/etc/security/exec_attr.d/ ディレクトリにはセキュリティー構成ファイルが格納されます。
以前の Oracle Solaris リリースでは、SMF サービスは exec_attr.d に配布されたファイルをマージして 1 つのデータベース /etc/security/exec_attr にしていました。Oracle Solaris 11 では、セキュリティー属性データベースライブラリ libsecdb の関数が、exec_attr.d のフラグメントを直接読み取るため、サービスによりマージを実行する必要がありません。
/etc/security 内で構成フラグメントが含まれているその他のディレクトリ (auth_attr.d や prof_attr.d など) も同様に処理されます。