InterSystems IRIS ディストリビューションへの UNIX® インストール・パッケージの追加
この付録では、既存の InterSystems IRIS® Data Platform ディストリビューションに新しい UNIX® インストール・パッケージを追加する方法を説明します。この追加方法はチュートリアル形式で示し、InterSystems IRIS インスタンス・ディレクトリに追加ファイルをコピーする単純なパッケージを作成する場合について解説します。
インストール・パッケージは UNIX® シェル・スクリプトを使用して実装するため、これよりはるかに複雑な操作を実行するパッケージも作成できます。
チュートリアル
Foo9000 という名前のイメージング・デバイスに接続するインターシステムズのコールアウト共有ライブラリ ("コールアウト・ゲートウェイの使用法" の “InterSystems コールアウト・ライブラリの作成” の章を参照) を記述したとします。このライブラリを libfoo9000.so としてコンパイルします。このライブラリが InterSystems IRIS と共にインストールされるようにしたいとします。また、インストール時に、このライブラリの接続先デバイス (Foo9000) のネットワーク・サーバ名を入力するようにユーザに求めるプロンプトが表示されるようにする必要もあります。この情報は InterSystems IRIS インスタンスの install-dir\mgr ディレクトリ内の構成ファイルに保存されます。
既存の InterSystems IRIS キットから開始します。
~/kit:>ls
irisinstall cplatname docs lgpl.txt NOTICE
copyright.pdf dist kitlist LICENSE package
また、コンパイルしたライブラリ (libfoo9000.so) を使用します。
~/lib:>ls
libfoo9000.so
まず、ライブラリを保存するキット内の場所を選択し、その場所にライブラリをコピーする必要があります。規約により、プラットフォーム別のライブラリは dist/package/platform ディレクトリ (~/kit/dist/foo9000/lnxsusex64 など) に保存します。
~/kit:>cd dist
~/kit/dist:>mkdir foo9000
~/kit/dist:>cd foo9000
~/kit/dist/foo9000:>mkdir lnxsusex64
~/kit/dist/foo9000:>cd lnxsusex64
~/kit/dist/foo9000/lnxsusex64:>cp ~/lib/libfoo9000.so .
次に、インストール・パッケージのディレクトリを作成し、パッケージについて記述する manifest.isc ファイルをこのディレクトリに追加します。最も単純な形式の manifest.isc ファイルでは、パッケージ名のみを記述します。この名前はパッケージ・ディレクトリの名前 (foo9000) と一致させる必要があります。
~/kit/package:>mkdir foo9000
~/kit/package:>cd foo9000
~/kit/package/foo9000:>emacs manifest.isc
package: foo9000
パッケージ内が空だと処理は何も実行されませんが、このチュートリアルでは、次の処理を実行する必要があります。
-
Foo9000 をホストするサーバ名の入力をユーザに求めるプロンプトを表示する。
-
install-dir\mgr ディレクトリ内の構成ファイルにこの情報を保存する。
-
インスタンス・バイナリ・ディレクトリにライブラリ (libfoo9000.so) をコピーする。
パッケージ・インストーラは複数のフェーズで処理を実行します。そのうち重要なフェーズは次のフェーズです。
-
“parameters” フェーズ
-
“install” フェーズ
パッケージには、フェーズごとに、それぞれのフェーズの名前を持つ Bourne シェル・スクリプトを格納することができます。パッケージ・インストーラは、フェーズ内の適切な時点で、各パッケージのスクリプトを実行します。パッケージのスクリプトで所定のフェーズの実行が正常に終了すると、最終コマンドによって明示的または暗黙的にエラー・コード 0 が返されます。正常に終了しなかった場合は、0 以外のエラー・コードが返されます。
“parameters” フェーズでは、パッケージのインストールに必要な情報を (通常ユーザに入力を求めることによって) 収集します。このフェーズでは、システムへの永続的な変更は行いません。通常、“parameters” フェーズ後に、ユーザがインストールの取り消しを必要に応じて選択できるようにします。取り消しが選択された場合、システムがインストール・プロセスによる影響を何も受けていない状態になっていなければなりません。
“install” フェーズでは、システムを変更します。無人インストールや自動インストールが実行される場合があるため、install フェーズ中はユーザに情報の入力を求めないようにします。
パッケージによっては、ユーザからの情報の入力が不要、つまり “parameters” スクリプトが不要な場合があります。特定のフェーズのスクリプトがパッケージに含まれていない場合、そのフェーズ中、そのパッケージの処理は何も実行されません。
まず、foo9000 パッケージ用の “parameters” スクリプトとして、以下のようなスクリプトを作成したとします。
~/kit/package/foo9000:>emacs parameters
#!/bin/sh
echo "Please enter host name of the Foo9000 imaging server: "
read host
echo "Host $host entered."
このスクリプトを実行すると、以下のように、ホスト名の入力を求めるプロンプトが実際に表示されます。この情報は host 変数に記録されます。
~/kit/package/foo9000:>sh parameters
Please enter host name of the Foo9000 imaging server:
host1
Host host1 entered.
しかし、host 値を取得した後、この値をどう処理したらいいでしょうか。スクリプトの実行が終了すると、この情報は失われるため、“install” フェーズでこの情報を構成ファイルに書き込む必要が生じたときに利用できません。
“parameters” フェーズではユーザのシステムに何の影響も及ぼさないようにするため、この時点ではまだ構成ファイルを作成しません。
パッケージ・インストーラは、複数のフェーズや複数のパッケージで情報を共有できるようにする便利な関数のペア Import と Export を備えています。通常のシェル・スクリプトのメカニズムによって、これらの関数を parameters.include ファイルに組み込んで使用できます。
#!/bin/sh
. parameters.include
echo "Please enter host name of the Foo9000 imaging server: "
read host
echo "Host $host entered."
Export foo9000.host $host
Export 関数は、エクスポートする (通常、スクリプトのローカル変数から) パラメータ変数の名前とその値を取ります。Import 関数ではこの逆になります。最初の引数には、あらかじめエクスポートされている値のインポート先のローカル変数を指定し、2 番目の引数には、エクスポート先のパラメータ変数の名前を指定します。
規約により、パラメータ関数の名前は、package name.local variable name 形式の名前 (foo9000.host など) にします。
これで、インストール・プロセスに必要なすべての Foo9000 情報が “parameters” スクリプトで収集されるようになったため、次は “install”スクリプトを作成します。
~/kit/package/foo9000:>emacs install
#!/bin/sh
. parameters.include
Import host foo9000.host
echo host=$host > ????/mgr/foo9000.cfg
cp ????/dist/foo9000/????/libfoo9000.so ????/bin
以下の詳細を指定する必要があります (上記スクリプトの ???? の部分)。
-
インストールを作成するインスタンス・ディレクトリの場所。
-
インストール元のキットの場所。
-
インストールするプラットフォームの種類。
これらの質問は “parameters” スクリプトに組み込むこともできますが、ユーザはこれらの情報をインストールの初期段階で既に入力しているため、混乱を招く可能性があります。代わりに、必要な情報を提供する他のパッケージからパラメータ変数をインポートします。これが可能なのは、irisinstall、irisinstall_client または irisinstall_silent スクリプトを使用したインストールが成功すると ("InterSystems IRIS のインストール" を参照)、これらの変数と値を含んだ parameters.isc ファイルがインストール・ディレクトリに作成されるためです。parameters.isc ファイルの変数の一覧は、この付録の最後にある "InterSystems IRIS インストール・パラメータ・ファイルの変数" のテーブルに掲載しています。
セキュリティ上の理由により、parameters.isc ファイルには root ユーザのみがアクセスできます。
特定のパッケージのパラメータ変数を使用するためには、現在のパッケージ (foo9000) が別のパッケージに依存すること、したがって各フェーズで別のパッケージの後に処理する必要があることを、パッケージ・インストーラに認識させる必要があります。それには、以下に示すように、現在のパッケージの manifest.isc ファイルに “prerequisite” の各値を追加します。
~/kit/package/foo9000:>emacs manifest.isc
package: foo9000
prerequisite: server_location
prerequisite: legacy_dist
prerequisite: platform_selection
これで、指定したパッケージからパラメータ変数をインポートし、現在のパッケージのインストール・スクリプトの実行に使用できるようになります。
~/kit/package/foo9000:>emacs install
#!/bin/sh
. parameters.include
Import host foo9000.host
Import tgtdir "server_location.target_dir"
Import srcdir "legacy_dist.source_dir"
Import platform_family "platform_selection.platform_family"
echo host=$host > $tgtdir/mgr/foo9000.cfg
cp $srcdir/dist/foo9000/$platform_family/libfoo9000.so $tgtdir/bin
パッケージ foo9000 はほぼ完成しました。最後の作業として、関連する既存のパッケージの prerequisite リストにこのパッケージを追加します。それにより、パッケージ・インストーラは、その関連パッケージのインストールを完了するために、今回作成したパッケージを処理するようになります。この場合、InterSystems IRIS サーバのインストール時に必ずこのライブラリのインストールと構成が行われるようにする必要があるため、「database_server」パッケージの manifest.isc ファイルで、このパッケージの prerequisite リストに新しいパッケージを追加します。
~/kit/package/database_server:>emacs manifest.isc
package: database_server
prerequisite: legacy_dist
prerequisite: platform_selection
prerequisite: server
prerequisite: server_location
prerequisite: upgrade
prerequisite: available_disk_space
prerequisite: posix_tools
...
prerequisite: isql
prerequisite: zlib
prerequisite: udp
prerequisite: bi
prerequisite: foo9000
上のリストから明らかなように、サーバ・インストールの作成には多くのパッケージが必要ですが、これで、irisinstall を実行すると、パッケージ foo9000 の構成とインストールが実行されるようになりました。
~/kit:>sudo ./irisinstall
Your system type is 'SuSE Linux Enterprise Server 10 (x64)'.
Currently defined instances:
IRIS instance 'INSTANCE1'
directory: /home/testUser/INSTANCE1
versionid: 2018.1.0.508.0
conf file: iris.cpf (SuperServer port = 1972)
status: crashed, last used Sat Sep 22 08:37:32 2018
Enter instance name: INSTANCEPACK1
Do you want to create IRIS instance 'INSTANCEPACK1' ? Y
...
Please enter host name of the Foo9000 imaging server:
host1
Host host1 entered.
...
Do you want to proceed with the installation ? Y
...
Installation completed successfully
~/INSTANCEPACK1/bin:>ls libfoo*
libfoo9000.so
~/INSTANCEPACK1/mgr:>cat foo9000.cfg
host=host1
parameters.isc ファイルの内容
以下の表は、parameters.isc ファイルに記載されている変数とその説明、およびサンプル値、または有効な値の一覧です。
変数名 | 説明
(有効な値) または例 |
---|---|
dist.source_dir | インストール媒体のソース・ディレクトリ。
/iriskit |
legacy_dist.source_dir | 従来の目的では、インストール媒体のソース・ディレクトリ。
/iriskit |
product_info.version | インターシステムズ社製品のバージョン番号。
2018.1.0.100.0 |
product_info.name | インターシステムズ社製品の名前。
InterSystems IRIS |
platform_selection.platform | インストール先プラットフォームに対するインターシステムズ社の略称。
lnxrhx64 |
platform_selection.platform_family | インストール先プラットフォーム・ファミリに対するインターシステムズ社の略称。
lnxrhx64 |
platform_selection.endianness | プラットフォームのエンディアン・バイト・オーダー。
(big/little) |
platform_selection.os | プラットフォームのオペレーティング・システム。uname コマンドの値。
Linux |
posix_tools.user_add | Portable Operating System Interface (POSIX) 準拠のユーザ追加ツール。
/usr/sbin/useradd |
posix_tools.group_add | POSIX 準拠のグループ追加ツール。
/usr/sbin/groupadd |
posix_tools.grep | POSIX 準拠の grep ユーティリティ。
grep |
posix_tools.id | POSIX 準拠の id ユーティリティ。
id |
posix_tools.ps_opt | プロセスのリスト表示ですべて展開するオプション。
-ef |
posix_tools.gzip | Gnu 準拠の zip ユーティリティ。
gzip |
posix_tools.shared_ext | 共有ライブラリ・ファイルの拡張子。
so |
posix_tools.symbolic_copy | POSIX 準拠のシンボル・コピー・コマンド。
cp -Rfp |
posix_tools.tr | POSIX 準拠の変換ユーティリティ。
tr |
posix_tools.shared_ext1 | 共有ライブラリ・ファイルの代替の拡張子。
so |
posix_tools.permission | 選択されたファイルに適用される POSIX 準拠の特権。
755 |
posix_tools.dir_permission | 選択されたディレクトリに適用される POSIX 準拠の特権。
775 |
server_location.target_dir | サーバ・インストールのターゲット・ディレクトリ。
/test/IRIS |
server_location.is_server_install | これがサーバ・インストールであるかどうかを示す。
(N/Y) |
server_location.is_nonroot_install | これが非 root インストールであるかどうかを示す。
(N/Y) |
server_location.instance_name | インスタンス名。
IRIS |
server_location.is_new_install | これが新規インストールであるかどうかを示す。
(N=アップグレード/Y=新規) |
server_location.is_new_directory | 新規ディレクトリを作成するかどうかを示す。
(N/Y) |
server_location.registry_dir | InterSystems IRIS レジストリ・ディレクトリの場所 (ローカルのファイル・システム上に配置する必要がある)。
/usr/local/etc/irissys |
server_location.iris | インストール中に、iris が存在するディレクトリ。
/iriskit/dist/lnxrhx64/bin/shared/iris |
server_location.is_dr_mirror | このインスタンスが災害復旧 (DR) ミラー・メンバかどうかを示す。
(N/Y) |
postinstall* | パラメータ・ファイル・フェーズの後で実行するパッケージを指定。
upgrade |
install_mode.setup_type | インストールのタイプ。
(Development/Server/Custom) |
unicode_selection.binary_type | インストールするバイナリのタイプ。
(unicode/eightbit) |
unicode_selection.install_unicode | この製品の Unicode 版をインストールするかどうかを示す。
(N/Y) |
security_settings.iris_user | InterSystems IRIS スーパーサーバの実効ユーザ
irisusr |
security_settings.iris_group | InterSystems IRIS の実効グループ
irisusr |
security_settings.manager_user | インスタンスの所有者。
root |
security_settings.manager_group | インスタンスの開始および停止を許可されたグループ。
develop |
security_settings.dbencrypted | 起動時に暗号化キーを有効にするかどうかを示す。
(0/1) |
security_settings.dbenckeyfile | 暗号化キーのパス。
このパラメータは空白でもかまいません。 |
security_settings.dbenckeyuser | キーを有効にできる管理者の名前。
このパラメータは空白でもかまいません。 |
security_settings.dbenckeypassword | キー管理者のパスワード。パラメータ・ファイルが保存される前にクリアされます。
このパラメータは空白でもかまいません。 |
security_settings.personal_database | パーソナル・データベース機能を使用するかどうかを示す。
(N/Y) |
security_settings.initial_level | 初期のセキュリティ設定。
(Minimal/Normal/LockedDown) |
security_settings.already_secured | 5.1 以前のインスタンスからアップグレードしている場合に、セキュリティ設定が必要かどうかを示す。
(N/Y) |
security_settings.password | irisinstall から実行している場合は、パラメータ・ファイルの格納前にパスワード・フィールドがクリアされる。 |
installer.manifest | DefaultInstallerClass.xml (エクスポートされた %Installer クラス) の場所。以下はその例です。
/home/user/Downloads/DefaultInstallerClass.xml |
installer.manifest_parameters | インストーラ・マニフェストのパラメータの場所。
SourceDir=/home/user/Downloads |
installer.manifest_loglevel | マニフェストのログ・レベルを指定する。
(-1/0/1/2/3) |
installer.manifest_logfile | ログ・ファイル名を指定する。
/manifests/IRIS-installManifestLog.txt |
port_selection.superserver_port | スーパーサーバ・ポート番号。
1972 |
port_selection.jdbcgateway_port | Java Database Connectivity (JDBC) ゲートウェイ・ポート番号。
62972 |
csp_gateway.configure | 外部 Web サーバ用に Web ゲートウェイを構成するかどうかを示す。
(N/Y) |
csp_gateway.web_server_type | Web ゲートウェイで使用する既存の Web サーバのタイプ。
(Apache/None) |
csp_gateway.apache_version | Apache Web サーバのバージョン |
csp_gateway.apache_user | Apache Web サーバのユーザ名 |
csp_gateway.apache_conf_file | Apache Web サーバ構成ファイルの場所。
/etc/httpd/conf/httpd.conf |
csp_gateway.apache_pid_file | Apache Web サーバ・デーモンのプロセス ID を記録するファイル。
/usr/local/apache/logs/httpd.pid |
csp_gateway.apache_use32bit | Apache Web サーバで 32 ビット・アーキテクチャを使用するかどうかを示す。
Y/N |
csp_gateway.directory | Web ゲートウェイ・ファイルが保存されるディレクトリ。 |
license_key.enter_key | インストール中にキーをインストールするかどうかを示す。
N/Y |
license_key.license_file | enter_key の値が Y の場合、キー・ファイル情報の場所。 |
agent.user_account | ISCAgent のユーザ名。
iscagent |
agent.user_group | ISCAgent のグループ名。
iscagent |
agent.install | ISCAgent がインストールされているかどうかを示す。
(N/Y) |
client_location.target_dir | クライアントのみのインストールのターゲット・ディレクトリ。
test/IRIS |
client_location.is_client_install | これがクライアント・インストールであるかどうかを示す。
(N/Y) |
install* |
database_server |
postinstall* |
database_server |
japanese_docs.install | 日本語ドキュメント・ソースをインストールするかどうかを示す。
(N/Y) |
install* | インストールするコンポーネント名。 |
* このインストール変数は、インストールするコンポーネント 1 つにつき 1 回ずつ、パラメータ・ファイルに登場します。カスタム・インストール、またはクライアントのみのインストールでは、条件に応じて、以下のいずれか、またはすべてが生成されます。
-
dev_kit
-
odbc
-
cpp_binding
-
cpp_sdk
-
engine_link_libraries
-
light_cpp_binding
-
addenda
-
install_confirmation
-
copyright