インストール・マニフェストの作成および使用
この章では、特定の Caché 構成を記したインストール・マニフェストを作成し、これを使用して Caché インスタンスを構成するコードを生成するための %Installer ユーティリティの使用法について説明します。以下の項目について説明します。
インストール・マニフェストの概要
%Installer ユーティリティによりインストール・マニフェストを定義します。これは段階的なインストール・プロセスではなく、特定の Caché 構成を記述するものです。これには、通常インストール中 (スーパーサーバ・ポート、オペレーティング・システムなど) に指定した情報を含む変数を使用して、目的の構成を記述した XData ブロックを含むクラスを作成します。また、このクラスにインスタンス構成用のコードを生成するための XData ブロックを使用するメソッドを組み込みます。(このドキュメントより、このメソッドをコピーして貼り付けることができます。)
マニフェストを定義すると、インストール中、またはターミナル・セッションやコードからマニフェストを呼び出すことができます。マニフェストは %SYS ネームスペースで実行する必要があります。
マニフェストを定義するクラスの作成
インストール・マニフェストを定義するクラスを作成するため、以下のようなクラスを作成します。
-
%occInclude インクルード・ファイルを含める必要があります。
-
インストールの詳細を指定する XData ブロックを含める必要があります。
XData ブロックには正当な名前を任意に指定することができ、この名前を後に引数として使用します。
XData ブロックの名前の後に [XMLNamespace = INSTALLER] を使用すると、XData ブロックの入力に応じてスタジオによりサポートが提供されます。
XData ブロックのルート要素は <Manifest> とする必要があります。詳細は、“<Manifest> タグ” を参照してください。
-
以下の例で示すように、setup() メソッドを定義する必要があります。
-
setup() メソッドは、以下の例で示すような名前で XData ブロック を参照する必要があります。
以下に例を示します。
Include %occInclude
Class MyPackage.MyInstaller
{
XData MyInstall [ XMLNamespace = INSTALLER ]
{
<Manifest>
<Var/>
<If/>
<Log/>
<User/>
<Resource/>
<Role/>
<SystemSetting/>
<ForEach>
<!--Code for each iteration of named Index key while looping through values-->
</ForEach>
<CopyDir/>
<CopyFile/>
<Namespace>
<Configuration>
<Database/>
<ForEach>
<!--Code for each iteration of named Index key while looping through values-->
</ForEach>
<Log/>
<GlobalMapping/>
<RoutineMapping/>
<ClassMapping/>
</Configuration>
<Compile/>
<CopyClass/>
<CSPApplication/>
<ForEach>
<!--Code for each iteration of named Index key while looping through values-->
</ForEach>
<If/>
<Import/>
<Invoke/>
</Namespace>
</Manifest>
}
ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3,
pInstaller As %Installer.Installer,
pLogger As %Installer.AbstractLogger)
As %Status [ CodeMode = objectgenerator, Internal ]
{
#; Let XGL document generate code for this method.
Quit ##class(%Installer.Manifest).%Generate(%compiledclass,
%code, "MyInstall")
}
}
キー・オプション
1 番外側の xml タグ (<Manifest>) には、コード生成に関するすべての情報が格納されています。マニフェストでネームスペースを定義するために必要な数の <Namespace> タグを <Manifest> タグ内に入れることができます。
<Namespace> タグ内にある <Configuration> タグは、データベースおよびマッピング (またはこのいずれか) が定義されている場合にのみ必要です。ネームスペースを定義するために必要な数の <Database> タグを <Configuration> タグ内に入れる必要があります。また、以下の各 <Database> タグに続けて、必要に応じて <GlobalMapping> タグ、<RoutineMapping> タグ、および <ClassMapping> タグを追加できます。</Configuration> タグは、定義されたマッピングを有効化します。
データベースおよびそのマッピングが定義された後に、<Namespace> タグのコンテキスト内で、<Import> タグを使用して、グローバルをロードし、ルーチンおよびクラスをロードしてコンパイルできます。クラス・メソッドは、<Invoke> タグを使用して呼び出せます。呼び出したクラス・メソッドは、ルーチンを実行し、インポート済みのグローバルにアクセスできます。
必要に応じて、<Var> タグで変数の組み合わせを定義できます。各変数は、名前と値を指定する必要があります。<Var> の値が必要な場合、その名前が ${NameAssigned} 構文で参照されます。
使用例は、この章で後述する “例” を参照してください。
ユーザとパスワードの追加
インストールしたインスタンスにユーザ (ロールとパスワードを含む) を追加する方法は、次のように複数あります。
-
インストール完了後に管理ポータルを使用 ("Caché セキュリティ管理ガイド" を参照)。
-
マニフェストで <User> タグを使用 ("<Manifest> タグ" を参照)。
<User> タグの PasswordVar パラメータはユーザのパスワードを格納した変数を指定します。例えば、PasswordVar="Pwd" を定義すると、変数 Pwd の値がユーザのパスワードに指定されます。この変数にデータを移入する方法は多様ですが、移入方法は担当者次第です。Caché または Web サービスの別のインスタンスに対してメソッドをリモートで呼び出すことも検討できますが、この方法の問題点は、Caché がインストールされているサーバでインターネット・アクセスが必要な場合があることです。インストールしているインスタンスに対して使用するメソッドをインポートするか、ユーザとパスワード (マニフェストに渡すことができます) の入力を求めるインストールにクライアント側フォームを追加する方法も考えられます。
-
Caché や Ensemble のステージング・インスタンスで Security.UsersOpens in a new tab クラスを使用 (以下を参照)。
-
Security.Users.Export()Opens in a new tab メソッドを使用して、ユーザ情報をエクスポートします。
-
ユーザ情報をインポートするには、(%SYS ネームスペースの) マニフェスト・クラスの先頭で以下を追加します。
<Invoke Class="Security.Users" Method="Import" CheckStatus="true"> <Arg Value="PathToExportedUserInformation"/> </Invoke>
PathToExportedUserInformation は、Security.Users.Export()Opens in a new tab メソッドで指定された出力ファイルの場所です。
-
メッセージの追加
次の形式でクラスに <Log> タグを組み込むことで、ログに追加するメッセージを定義できます。
<Log Level="<level>" Text="<text>"/>
ログのレベルは 0 から 3 までの範囲になる必要があります。0 は “none” (なし)、3 は “verbose” (詳細) です。setup() メソッドで指定されたログのレベルが <Log> タグの Level プロパティの値以上の場合にメッセージがログに記録されます。テキストは 32,000 文字に制限されます。
setup() メソッドの 2 番目の引数によりレベルを設定します (詳細は、この章で後述の “マニフェストの使用” を参照)。これはインストールからマニフェストへ渡すことはできないため、次のようにクラスに設定する必要があります。
ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3,
pInstaller As %Installer.Installer,
pLogger As %Installer.AbstractLogger)
As %Status [ CodeMode = objectgenerator, Internal ]
メッセージの表示位置を setup() メソッドの 4 番目の引数 (%Installer.AbstractLogger) により指定できます。例えば、オペレーティング・システム・ファイルを参照する %Installer.FileLogger オブジェクトをインスタンス化する場合、すべての %Installer およびログ・メッセージはそのファイルに書き込まれます。(この引数がないと、setup() が直接呼び出された場合には、すべてのメッセージがプライマリ・デバイスに書き込まれ、インストーラによって実行された場合には無視されます。)
<Manifest> 内で使用できる変数
以下のテーブルに、マニフェストで使用できる事前定義変数を示します。
変数名 | 説明 |
---|---|
SourceDir | (インストーラ実行中にのみ使用可能) インストール (setup_cache.exe または cinstall) の実行元となるディレクトリ。 |
ISCUpgrade | (インストーラ実行中にのみ使用可能) 新規インストールまたはアップグレードであるかを示します。この変数は 0 (新規インストール) または 1 (アップグレード) のいずれかになります。 |
CFGDIR | "INSTALLDIR" を参照してください。 |
CFGNAME | インスタンス名。 |
CPUCOUNT | オペレーティング・システムの CPU の数。 |
CSPDIR | CSP ディレクトリ。 |
HOSTNAME | ホスト・サーバの名前。 |
HTTPPORT | Web サーバのポート。 |
INSTALLDIR | Caché のインストール先ディレクトリ。 |
MGRDIR | 管理者用 (mgr) ディレクトリ。 |
PLATFORM | オペレーティング・システム。 |
PORT | Caché のスーパーサーバ・ポート。 |
PROCESSOR | プロセッサ・チップ。 |
VERSION | Caché のバージョン番号。 |
マニフェストの使用
以下のように、マニフェストを使用できます。
-
%SYS ネームスペースで、ターミナルに以下のコマンドを入力します。
%SYS>Do ##class(MyPackage.MyInstaller).setup()
配列を参照として setup() メソッドに渡せます。ここで、添え字は、<Manifest> の変数として使用され、ノード値は、変数 <value> です。以下に例を示します。
%SYS>Set vars("SourceDir")="c:\myinstaller" %SYS>Set vars("Updated")="Yes" %SYS>Do ##class(MyPackage.MyInstaller).setup(.vars,3)
この例では、2 番目の引数 (3) はログ・レベルです。
-
マニフェスト・クラスを DefaultInstallerClass.xml として Caché インストール (.msi、setup_cache.exe、または cinstall) が実行されているディレクトリにエクスポートします。これは %SYS にインポートされてコンパイルされ、setup() メソッドが実行されます。
エクスポートする方法では、引数を setup() メソッドに直接渡せないことに注意してください。ただし、以下の操作を実行できます。
-
Microsoft Windows システムでは (“Microsoft Windows への Caché のインストール” の章を参照)、.msi インストール・パッケージを変更して、変数の名前と値のペアを setup() メソッドに渡すことができます。また、以下の例に示すようにインストーラでコマンド行引数を使用して、エクスポートされるマニフェスト・クラスの場所、変数のペア、ログ・ファイル名、およびログのレベルを渡すこともできます。
setup.exe INSTALLERMANIFEST="c:\MyStuff\MyInstaller.xml" INSTALLERMANIFESTPARAMS="SourceDir=c:\mysourcedir,Updated=Yes" INSTALLERMANIFESTLOGFILE="installer_log" INSTALLERMANIFESTLOGLEVEL="2"
Note:INSTALLERMANIFESTPARAMS 引数を使用して渡される変数名には、アルファベット文字と数字 (A-Za-z0-9)、およびアンダースコア (_) のみを含めることができますが、先頭をアンダースコアにすることはできません。
-
UNIX®、Linux、および macOS システムでは (“UNIX®、Linux、および macOS への Caché のインストール” の章を参照)、以下の例に示すように、cinstall または cinstall_silent のいずれかを実行する前に環境変数を設定して、エクスポートされるマニフェスト・クラスの場所、変数の名前と値のペア、ログ・ファイル名、およびログのレベルを定義できます。
ISC_INSTALLER_MANIFEST=/MyStuff/MyInstaller.xml ISC_INSTALLER_PARAMETERS=SourceDir=/mysourcedir,Updated=Yes ISC_INSTALLER_LOGFILE=installer_log ISC_INSTALLER_LOGLEVEL=2 ./cinstall
-
例
以下のクラスは、ネームスペース (MyNamespace) および 3 つのデータベースを作成します。このうち 2 つのデータベースは、グローバル (MyDataDB) およびルーチン (MyRoutinesDB) の既定のデータベースとして定義され、3 番目のデータベース (MyMappingDB) は、MyNamespace ネームスペースにある t* グローバルの既定のデータベース・マッピングをオーバーライドするグローバル・データベースです。
Include %occInclude
/// Simple example of installation instructions (Manifest)
Class MyInstallerPackage.SimpleManifest
{
XData SimpleManifest [ XMLNamespace = INSTALLER ]
{
<Manifest>
<Namespace Name="MyNamespace" Create="yes"
Code="MyRoutinesDB" Data="MyDataDB">
<Configuration>
<Database Name="MyRoutinesDB" Create="yes"
Dir="C:\MyInstallerDir\MyRoutinesDB"/>
<Database Name="MyDataDB" Create="yes"
Dir="C:\MyInstallerDir\MyDataDB"/>
<Database Name="MyMappingDB" Create="yes"
Dir="C:\MyInstallerDir\MyMappingDB"/>
<GlobalMapping Global="t*" From="MyMappingDB"/>
</Configuration>
</Namespace>
</Manifest>
}
/// This is a method generator whose code is generated by XGL.
ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3,
pInstaller As %Installer.Installer,
pLogger As %Installer.AbstractLogger)
As %Status [ CodeMode = objectgenerator, Internal ]
{
#; Let our XGL document generate code for this method.
Quit ##class(%Installer.Manifest).%Generate(%compiledclass,
%code, "SimpleManifest")
}
}
クラスがコンパイルされると、そのクラスは以下に示すようにターミナルで呼び出せます (USER ネームスペースにクラスを作成したと仮定しています)。
%SYS>znspace "USER"
USER>do ##class(MyInstallerPackage.SimpleManifest).setup()