メイン コンテンツにスキップ

Java シグナルチェーン

Glasswall ライブラリはクラッシュの発生を防ぐためにシグナル処理を使用しますが、Glasswall を Java から実行する場合、これが JVM に干渉することがあります。これを正しく動作させるには、Glasswall 内のエラーが JVM に伝播するのを防ぐために、signal chaining を設定する必要があります。設定時には、libjsig.so ライブラリの場所が必要です。一般的によく見つかる場所の例は次のとおりです。

  • /usr/lib/jvm/jre/lib/libjsig.so
  • /usr/lib/jvm/jre/lib/amd64/libjsig.so
  • /usr/lib/jvm/java/lib/libjsig.so

これはシステム構成や Java のインストール場所によって異なります。ここでの例では、/usr/lib/jvm/java/lib/libjsig.so のパスを使用しています。

設定なしの signal chaining

特定の環境要因により、libjsig ライブラリを設定していなくても Glasswall ライブラリが問題なく動作する場合があります。これは保証されておらず、設定を実施することを強く推奨します。

Release 16.3 以前

Release 16.3 以前では、LD_PRELOAD 環境変数を設定して、libjsig.so ライブラリの場所を指すようにする必要があります。詳細は Signal Chaining を参照してください。

LD_PRELOAD の例としては、export LD_PRELOAD=/usr/lib/jvm/java/lib/libjsig.so、または Docker file 内で ENV LD_PRELOAD=/usr/lib/jvm/java/lib/libjsig.so のようになります。これは実際の libjsig.so ライブラリのパスによって異なります。

Release 16.4 以降

Release 16.4 以降では、Editor ライブラリ用の Java ラッパーは libjsig ライブラリに直接依存しています。そのため、リンカーがライブラリを見つけて依存関係を解決できるように、少し設定が必要です。パスはライブラリの場所によって変わります。設定例をいくつか以下に示します。

システムに応じて、/usr/lib または /usr/lib64 のいずれかにシンボリックリンクを作成し、libjsig ライブラリを指すようにできます。

たとえば、管理者権限のあるターミナルで次のコマンドを実行します。

ln -s -T /usr/lib/jvm/java/lib/libjsig.so /usr/lib64/libjsig.so
ldconfig

ln はシンボリックリンクを作成し、ldconfig はライブラリキャッシュを更新して、依存関係を解決できるようにします。

例 2 - LD_LIBRARY_PATH 環境変数の使用

LD_LIBRARY_PATH 環境変数を設定して、libjsig ライブラリを含むディレクトリを指すようにできます。

たとえば、設定は export LD_LIBRARY_PATH=/usr/lib/jvm/java/lib のようにするか、Docker file では ENV LD_LIBRARY_PATH=/usr/lib/jvm/java/lib のようになります。

その後、そのディレクトリ内のすべてのライブラリがリンカーから利用可能になります。

例 3 - /etc/ld.so.conf.d/ の新しい設定

/etc/ld.so.conf.d に新しい設定を作成し、その中に libjsig ライブラリのディレクトリを含めることができます。

たとえば、管理者権限のあるターミナルで次のコマンドを実行します。

echo "/usr/lib/jvm/java/lib/" | tee -a /etc/ld.so.conf.d/jvm.conf
ldconfig

最初のコマンドは、内容が /usr/lib/jvm/java/lib/ の設定ファイルを作成します。ldconfig コマンドが呼び出されると、ライブラリキャッシュが更新され、設定ファイルで指定されたディレクトリ内のすべてのライブラリが含まれるようになります。