hserver は、Houdini、Engine、Mantra、Karmaなどの製品を実行するのと同じコンピュータ上で稼働するサービスです。sesinetd サーバーのプロキシとして機能し、同じコンピュータ上で複数のHoudini製品が実行されていても、sesinetd からは該当タイプのライセンスを1つだけチェックアウトするように制御する機能が含まれています。
バックグラウンドで常に実行される sesinetd とは異なり、Linux/macOSでは、Houdiniは初回起動時に「自動的に裏側」で hserver を起動します。Windowsでは hserver はサービスとして実行されます。hserver プロセスは一度起動するとバックグラウンドで実行され続けるため、Houdiniの起動や終了のたびに手動で hserver を開始・停止する必要はありません。
Houdiniのコマンドライン環境を起動すると、hserver はコマンドパスに設定されます。新しいコマンドラインオプションを指定して手動で再起動することも可能ですし、既に実行中のインスタンスがある状態で hserver コマンドを実行すると、既存のプロセスと通信して制御を行うことができます。(「コマンドラインからhserverを制御する」を参照)
新機能に関する注意:
現在の hserver は新しいコマンドラインおよび設定ファイルシステムを使用しています。コマンドラインでは、従来の短いオプション(例: -u)だけでなく、わかりやすい英語ベースのオプション(例: --user-group="Beta")も使用できます。 設定ファイルは正式な .ini 形式となり、すべてのオプションは name=value の構文で指定する必要があります。古い形式のオプションファイルは読み込まれない場合があるため注意してください。
Windows環境について:
Houdini 19以降、WindowsでもLinux/macOSと同様に「非サービスアプリケーション」として hserver を実行できるようになりました。
ライセンス設定ファイル(
.sesi_licenses.pref)の保存場所:C:\Users\<username>\AppData\Localログファイルの保存場所: Houdiniアプリケーションが使用する一時フォルダ(
houdini_temp)内
オプションファイル について
hserver の動作オプションは、設定ファイルで指定できます。このファイルの名前と保存場所はOSによって異なります。
Mac
hserver.iniファイルを/Library/Preferences/sesi/hserver/に配置します。サービスとして実行しない場合は$HOME/Library/Application Support/sidefx/に配置します。Windows
hserver.iniファイルを%SystemDrive%\ProgramData\SideFX\に配置します。サービスとして実行しない場合は%USERPROFILE%\AppData\Roaming\SideFX\に配置します。Linux
hserver.iniファイルを/usr/lib/sesi/hserver/に配置します。サービスとして実行しない場合は$HOME/.local/share/sidefx/に配置します。
※ 行の先頭が # で始まる場合はコメントとして無視されます。
ログオプション
logfile=‹path› ログの書き込み先となるファイルパスです。
enableConsole=‹0|1› hserver がコンソールにログを出力するかどうかを指定します。Windowsではすべてのログがログファイルに記録されるため、このオプションは適用されません。
disableColor=‹0|1› コンソールにログを出力する際に、hserver がカラー表示を使用しないように指定します。
minLogLevel=‹level› このオプションは、コマンドライン引数の -u に相当するファイル設定です。ログレベルの値のリストについては -u の項目を参照してください。
minConsoleLogLevel=‹level› このオプションは、コマンドライン引数の -U に相当するファイル設定です。ログレベルの値のリストについては -U の項目を参照してください。
logToSystem=‹0|1› システムのログファイルにログを出力します。hserver 自身のログファイルへの記録は、このオプションの影響を受けません。
サーバーオプション
maxThreads=‹max› このサーバーが内部で使用する最大スレッド数です。この値は、hserver と同時に通信すると予想される最大プロセス数よりも大きくする必要があります。デフォルトは 6 です。6 未満の値は無視されます。
readIPMask=‹ip_mask› このマスクに一致するIPv4アドレスを持つクライアントのみが、hserver に情報の要求(リクエスト)を行うことができます。デフォルトは空(指定なし)で、すべてのクライアントが hserver に接続できるようになっています。
writeIPMask=‹ip_mask› このマスクに一致するIPv4アドレスを持つクライアントのみが、hserver の起動や終了、レンダリングの一時停止・再開・強制終了、またはライセンスサーバーの変更を行うことができます。デフォルトは空(指定なし)で、すべてのクライアントが hserver に接続できるようになっています。
debugMode=‹0|1› hserver をデバッグモードにするかどうかを指定します。これは、SideFXの開発者がバグを特定(絞り込み)する際に役立ちます。
useExperimental=‹0|1› ライセンスを要求する際に、1つずつ送信するのではなく、試行およびチェックアウトしたい製品のリストを一度に送信します。 ※ これには、バージョン18.5以上のライセンスサーバーへの接続が必要です。
storageLocation=‹file location› hserver が使用する永続的な情報を保存するための、カスタムファイルの場所を指定します。
ネットワークレンダリング
maxRenders=‹max› 使用可能なレンダリングプロセスの最大数です。デフォルトはマシンのプロセッサ数です。マシンの物理プロセッサ数よりも多くのレンダリングを許可すると、パフォーマンスが低下する可能性があります。
maxUsage=‹pct› 使用するCPUの最大パーセンテージです(パーセント記号 % は含めないでください)。ホストマシン上のサーバープロセスのロードアベレージがこの数値より高い場合、サーバーはレンダリングの受付を停止します。100 より大きい値を指定すると、このチェックは無効になります。デフォルトは 101(無効)です。
注意: このオプションの使用には注意してください。時間経過に伴うロードアベレージに基づいているため、平均値がしきい値を下回るまでに、サーバーが複数のレンダリングリクエストを拒否する可能性があります。
renderOnly=‹0|1› これを 1 に設定すると、非グラフィカルライセンスのみを使用できます。(これと graphicsOnly の両方が 1 の場合、両方とも無視されます。)これにより、Houdiniなどのインターフェースを持つ「グラフィカルな」アプリケーションが、このホストを使用するのを防ぎます。
graphicsOnly=‹0|1› これを 1 に設定すると、グラフィカルライセンスのみを使用できます。(これと renderOnly の両方が 1 の場合、両方とも無視されます。)これにより、hbatch などのコマンドラインアプリケーションが、このホストを使用するのを防ぎます。
relaxNonGraphics=‹0|1› これが 1 の場合、renderOnly が 1 であっても、非グラフィカルアプリケーションがグラフィカルライセンスを使用できるようになります。
hold=‹license› ‹secs› hserver がアプリケーションのライセンスをチェックアウトする際、使用後にライセンスを返却するのではなく、「保持 (hold)」するように指定できます。これにより、同じマシンでのライセンスの再取得がはるかに速くなりますが、その分ライセンスが拘束されます。 指定する2つの引数は、「ライセンスの種類」と「その種類のライセンスを保持する秒数」です。秒数が -1 の場合、サーバーはその種類のライセンスを無期限に保持します。デフォルトは以下の通りです。
hold Houdini-Master 3600hold Render -1(つまり、FXライセンスを1時間保持し、Renderライセンスを無期限に保持します。Renderライセンスは無料であるため、将来の使用に備えて無期限に保持することは理にかなっています。)
mantra=version=X.X command="‹command›" 特定のバージョンのMantraレンダラーでリモートレンダリングを開始する際に使用する、レンダリングコマンドを指定します。これにより、同じホスト上で複数バージョンのレンダラーをサポートできるようになります。
vmantra=version=X.X command="‹command›" 上記の mantra オプションと同じです。
APIオプション
readTimeoutMs=‹ミリ秒› このサーバーがエンドポイントからの応答を待機する最大時間(ミリ秒単位)です。デフォルトは5分(300,000ミリ秒)です。どのようなAPI呼び出しであっても、このタイムアウト時間に近づくことは通常あり得ないため、この値は変更しないことが推奨されます。 (hserver が複数のライセンスサーバーを使用するように設定されている場合、これはリスト内の1つのサーバーを諦めて次のサーバーへ移行するまでの待機時間となります。)
connectTimeoutMs=‹ミリ秒› 接続のタイムアウトを指定します。これは、hserver がエンドポイントへの接続を諦めるまでに試行する時間(ミリ秒単位)です。デフォルトは30秒(30,000ミリ秒)です。
ClientID=‹値› APIキーを提供する際に必要となるクライアントIDです。同時に ClientSecret も指定する必要があります。
ClientSecret=‹値› APIキーを提供する際に必要となるクライアントシークレットです。同時に ClientID も指定する必要があります。
enableIPv6=‹値› IPv6サポートを有効にします。
APIKey=‹クライアントID› ‹クライアントシークレット› APIキー情報のクライアントIDとクライアントシークレットを指定します。詳細については、「APIキーライセンス 」の項目を参照してください。
APIKeyFile=‹ファイルの場所› hserver で使用するAPIキー情報を記載したファイルの保存場所を指定します。詳細については、hkey の「APIキーライセンス」に関する項目を参照してください。
ライセンスのパーティショニング
userGroup=‹グループ名› ライセンスサーバーにライセンスを要求する際に、使用をリクエストするユーザーグループを指定します。
コマンドラインからのhserverの制御
情報
--help このヘルプを表示します。
--ini-help iniファイルのヘルプを表示します。
--version hserverのバージョン文字列を出力(表示)します。
ログオプション
-u/--min-logfile-level ログファイルの最小エラーログレベルを指定します。
0: なし1: メッセージ (デフォルト)2: プロンプト3: 警告4: エラー5: 致命的エラー
-U/--min-console-log-level コンソールの最小エラーログレベルを指定します。
0: なし1: メッセージ2: プロンプト (デフォルト)3: 警告4: エラー5: 致命的エラー
-B/--enable-console コンソールログ出力を有効にします。
-b/--disable-console-colors デバッグコンソールのカラー表示を無効にします。
-Y/--log-to-system オプションファイルの logToSystem と同じです。
サーバーオプション (Server options)
-L/--logfile ‹file› logfile オプションを設定します。詳細はログのセクションを参照してください。
-D/--debug-mode サーバーをデバッグモードにします。
-d/--run-in-foreground hserverをバックグラウンドではなく、フォアグラウンド(画面上)で実行します。このオプションは、Linux/macOS、およびhserverをWindowsのサービスとして実行していない場合のWindowsで利用可能です。
-t/--max-threads ‹count› maxThreads オプションを設定します。デフォルトは 6 です。
-m/--read-mask ‹ip_mask› readIPMask オプションを設定します。デフォルトは +.+.+.* です。
-M/--write-mask ‹ip_mask› writeIPMask オプションを設定します。デフォルトは +.+.+.* です。
-E/--enable-experimental オプションファイルの useExperimental と同じです。
-C/--force-http 接続URLにかかわらずHTTP通信を強制し、従来の通信プロトコルへのフォールバック(切り替え)を行いません。
クライアントオプション (Client options)
-h/--host ‹host› クエリや制御を行うリモートホストを任意で指定します。
-l/--info 実行中のhserverに接続し、情報を取得します。
-V/--mantra-commands バージョン固有のすべてのMantraコマンドをリスト表示します。
-q/--quit 実行中のhserverを終了します。
-Q/--blocking-quit 実行中のhserverを終了します。クライアントにレスポンスを返す前に、サーバーはすべてのライセンスと実行中のタスクを放棄(解放)します。これは事実上のブロッキングシャットダウンであり、Dockerのような正常なシャットダウンが不可能なシステムでのみ使用されることを想定しています。
-p/--reload-options 実行中のhserverにオプションファイルを再読み込みさせます。
-P/--pause-pid ‹pid› pid (プロセスID) によってhserverのタスクを一時停止します。
-R/--resume-pid ‹pid› pid によってhserverのタスクを再開します。
-S/--server ‹servers› 使用するライセンスサーバーを選択するために、名前でサーバーを指定します。
-K/--kill-pid ‹pid› 強制終了するhserverのタスクを pid で指定します。
-H/--hold-license ‹license› ‹time› プロセスが不要になった後、ライセンスを保持するための「ライセンスの種類」と「時間」を指定します。
APIオプション (Api options)
-T/--read-timeout-ms ‹millis› readTimeout オプションを設定します。デフォルトは 15s (15秒) です。
--connect-timeout-ms ‹millis› サーバーへの接続を試行する最大時間(ミリ秒)です。
--clientid ‹value› APIキーを提供するために必要なクライアントIDです。ClientSecret も提供する必要があります。
--clientsecret ‹value› APIキーを提供するために必要なクライアントシークレットです。ClientID も提供する必要があります。
ライセンスのパーティショニング (License partitioning)
--user-group ‹group name› ライセンスサーバーにライセンスを要求する際に、使用をリクエストするユーザーグループを指定します。
サーバーリストの変更
クライアントマシンのライセンス設定を行う際、リモートのライセンスサーバーを参照するようにサーバーリストを変更する必要がよくあります。サーバーは、Hkey ▸ File ▸ Change License Server から変更するか、コマンドラインで hserver -S <hostname> を実行することで変更できます。これらの方法はどちらも手動での操作が必要となりますが、スタジオ環境以外(個人や小規模環境など)では通常これで問題ありません。
Houdiniのインストールを自動化したいスタジオ環境で推奨される方法は、DNS SRV エントリを使用することです。DNS SRVを使用する利点は、IT部門がスクリプトを更新したり、各クライアントマシンを手動で更新したりすることなく、サーバーリストを更新できる点にあります。さらに、DNS SRVはスタジオの冗長サーバー構成ともうまく統合できます。
アプリケーションがサーバーリストを決定する優先順位は以下の通りです。
hserverの照会
アプリケーションがhserver自身ではない場合、まずはhserverに対してサーバーリストを照会します。
レジストリキーの確認 (Windowsサービス用)
アプリケーションがhserverであり、かつWindows上で正式なサービスとして実行されている場合は、レジストリキーが確認されます。レジストリキーの場所はhklm\software\Side Effects Software\Houdiniで、変数名はLicenseServerです。
環境変数
SESI_LMHOSTの確認 アプリケーションがLinux/OSXで実行されているか、Windowsで正式なサービスとして実行されていない場合、環境変数SESI_LMHOSTが確認されます。
Windowsでの注意点:
hserverはシステムアカウントで実行されるため、この環境変数はシステムアカウントだけでなく、ユーザーアカウントからもアクセス可能である必要があります。
設定ファイル
.sesi_licenses.prefの使用
アプリケーションがLinux/OSXで実行されているか、Windowsで正式なサービスとして実行されていない場合、.sesi_licenses.prefファイルが使用されます。
Windows: 場所は
%USERPROFILE%/AppData/Local/.sesi_licenses.prefです。hserverを正式なサービスとして実行している場合、システムアカウント下で動作するためこのファイルの場所は異なります。したがって、このファイルを手動で編集することは推奨されません。ライセンス管理ソフトウェアに自動で調整させてください。Linux: 場所は
$HOME/.sesi_licenses.prefです。Mac: 場所は
$HOME/.sesi_licenses.prefです。
DNS SRV エントリの確認 DNS SRVエントリが確認されます。アプリケーションは
_sesi-lmを検索します。
mDNS エントリの確認 mDNSエントリが確認されます。(※システムが許可している場合、
sesinetdがこれを自動的にセットアップします。ユーザー側で必要な操作はありません。)
localhostの使用 上記のすべてのオプションでサーバーリストを見つけられなかった場合は、localhostが使用されます。(※まっさらなマシンにHoudiniを新規インストールした直後は、この状態になります。)
ライセンスサーバーのチェーン接続
この構成では、複数のライセンスサーバー (sesinetd) をチェーン状に連結することができます。これにより、任意の仕様(例:ライセンスの製品タイプなど)に基づいてライセンスサーバーを分割することが可能になります。この設定を行うと、Houdiniはまずリスト内の最初の sesinetd サーバーからライセンスのチェックアウト(確保)を試み、空きがない場合は次のサーバー、さらに次のサーバーというように順番に試行します。
この設定を行うには、単一の sesinetd を接続先として指定するのではなく、ライセンスサーバーのリストをセミコロン(;)で区切って指定します。 リストの先頭にある sesinetd がコマンド(例:チェックアウト)の実行を試み、何らかの理由(接続不可、コマンドの失敗など)で失敗した場合、次の sesinetd が試行され、以降も同様に続きます。 hserver -S を使用してこのリストを指定する場合は、必ず接続リスト全体を引用符(クォーテーション)で囲んでください。
例:
hserver -S "sesinetd1;sesinetd2"
セミコロンの代わりにカンマが使用された場合(以前のサポート対象外の設定で使用されていました)、アプリケーションはエラーをログに記録しますが、内部的にはセミコロンが使われたものとして自動的に再設定して動作します。ただし、以前のバージョンのHoudiniを考慮して意図的にカンマが選択された可能性も十分にあるため、アプリケーションはキャッシュされたサーバー情報の場所を上書き更新することはありません。
この設定を使用するには、バージョン18.0以上のHoudiniライセンスサーバー (hserver) が必要です。現在のところ、この設定を利用するにあたり sesinetd およびHoudini自体のバージョンに特別な要件はありません。