web-dev-qa-db-ja.com

自動的に設定が解除された後、TomcatWebアプリケーションに$ LD_LIBRARY_PATHを設定するにはどうすればよいですか?

LD_LIBRARY_PATHを設定する必要があるTomcatWebアプリケーションがあります。

RHEL6とTomcat6(yumパッケージマネージャーから)を使用しています。webappの名前はadore-djatokaです。

いくつかの環境変数をエクスポートする提供されたスクリプトを使用してTomcatを起動していますが、LD_LIBRARY_PATHが設定されていないようです。これは、セキュリティ機能であると思います。initスクリプトはユーザー "root "ですが、Tomcatは" Tomcat "として実行されています。

Tomcatを再起動すると、ログファイル「djatoka.log」に次の行が表示されます。

2013-01-04/10:25:04.118/EST [main] DEBUG envParams: LD_LIBRARY_PATH=null | null/kdu_compress

これは、アプリがLD_LIBRARY_PATHが設定されることを期待しているが、nullであることがわかったため、ディレクトリkdu_compressnull/を検索することを示していると読みました。

起動スクリプトにechoを散らかして、LD_LIBRARY_PATHが設定およびエクスポートされていることを確認できるので、設定が解除されている必要があると想定しています。

正しくインストールされていることをテストするためにwebappにバンドルされているスクリプトがいくつかあり、コマンドラインから正常に実行されますが、非常に短く、環境変数(LD_LIBRARY_PATHを含む)をエクスポートしてJavaを呼び出すだけです。 。

追加してみました

LD_LIBRARY_PATH="/opt/adore-djatoka-1.1/lib/Linux-x86-64"
export LD_LIBRARY_PATH

to /usr/share/Tomcat6/bin/setenv.sh

追加してみました

LD_LIBRARY_PATH="/opt/adore-djatoka-1.1/lib/Linux-x86-64"

`/etc/Tomcat6/Tomcat6.confへ

LD_LIBRARY_PATHは、/etc/init.d/Tomcat6 [start/stop/restart]を呼び出す起動スクリプトにすでにエクスポートされています。

私はここでいくつかの主題にまったく慣れていないので、次にどこを見るべきか、またはどの情報を投稿するのに役立つかについてより良いアイデアを得る方法についてのガイダンスも高く評価されます。 「LD_LIBRARY_PATHが悪い理由」はすでに読んでいます

だから私の質問は、Tomcatを起動してLD_LIBRARY_PATHをnullに設定しないようにするにはどうすればよいですか?または、nullに設定した後、必要なものに再設定するにはどうすればよいですか?または、Webアプリがそれに依存するのを防ぐにはどうすればよいですか?

乾杯、

1
Andrew Martin

私は最終的に、webappのソースを取得し、必要なパスを関連する行にハードコーディングし、コンパイルして再デプロイすることで、この問題を回避しました。

問題のパスはソース内の文字列として単純に抽出されたため、LD_LIBRARY_PATHに格納する必要はありませんでした。

移植性を高めるには、ハードコーディングを削除して、構成スクリプトで設定されたカスタム環境変数の呼び出しに置き換える必要があります。

つまり、私の知る限り、「setuidプログラムのスコープ内で設定を解除した後、LD_LIBRARY_PATH環境変数を設定するにはどうすればよいですか」という答えは、「プログラム自体に次の機能がない限り、できません。実行後にこの情報を渡す」。

0
Andrew Martin

実際に必要なのは、Java_OPTSに適切なフラグを設定することでした(これは少し直感に反します)。

RHELボックスで、これを/ etc/sysconfig/Tomcat6または/etc/Tomcat6/Tomcat.confに配置します

Java_OPTS="-Xminf0.1 -Xmaxf0.3 -Xms1536m -Xmx1536m -XX:MaxPermSize=512m -Djava.awt.headless=true -DdjatokaUri=//thing.example.com/adore-djatoka -Dkakadu.home=/opt/adore-djatoka/bin/Linux-x86-64 -DLD_LIBRARY_PATH=/opt/adore-djatoka/lib/Linux-x86-64"

以下を使用して、これがJava)で設定されていることを確認できます。

# tr '\0' '\n' < /proc/$(pidof Java)/environ

また、djatokaログに次の情報が表示されます。

2015-08-31/08:33:01.683/NZST [http-bio-8080-exec-1] DEBUG envParams: LD_LIBRARY_PATH=/opt/adore-djatoka/lib/Linux-x86-64 | /opt/adore-djatoka/bin/Linux-x86-64/kdu_expand

または、グローバルに設定することもできます(/etc/ld.so.conf.d/adore-djatokaなどのファイルで)

# echo "/opt/adore-djatoka/lib/Linux-x86-64" > /etc/ld.so.conf.d/adore-djatoka
# ldconfig
2
Cameron Kerr

Tomcat 7の場合、$ CATALINA_HOME/conf/Tomcat.confにcoupleの行を設定するだけで、問題が解決しました(たとえば、Cryptoという名前のライブラリがlibCrypto.soになります):

Java_OPTS="-Djava.library.path=/usr/share/Tomcat/sharedLibs"
# NOTE: the above instructs only the JVM, the next is ALSO required by native libs to load dependent native libs! 
LD_LIBRARY_PATH="/usr/share/Tomcat/sharedLibs"

実際のところ、Tomcat.confのすべての<tag> = "<value>"行は「export <tag> = <value>」になります(たとえば、Tomcatサービス開始スクリプトをリバースエンジニアリングします:/etc/init.d/Tomcat) 。

構成した可能性のあるすべてのTomcatサービスについて、/ etc/sysconfig/Tomcatで値をグローバルにオーバーロードすることもできます。

したがって、Tomcat.confの設定が効果がないように見える場合は、/ etc/sysconfig/Tomcatが過負荷になる可能性があるものを確認してください...

0
berhauz