Apacheの設定ファイルでLD_LIBRARY_PATH環境変数が設定できない
apacheの設定ファイル中にこういう行があります。
<Directory "/usr/local/apache2/cgi-bin"> SetEnv LD_LIBRARY_PATH "/hoge/fuga/lib" </Directory>
SetEnvでCGIスクリプトが必要とする環境変数を設定しているんですね。
ところがスクリプトでチェックしてみてもLD_LIBRARY_PATHが設定されない。
他の環境変数、例えばORACLE_HOMEなんかはちゃんと設定される。
なんでじゃ、とapacheソース中でLD_LIBRARY_PATHを検索すると、こんなソースがありました。
server/util_scripts.cの232行目。
(前略) #elif defined(__HPUX__) /* HPUX PARISC 2.0W knows both, otherwise redundancy is harmless */ env2env(e, "SHLIB_PATH"); env2env(e, "LD_LIBRARY_PATH"); #else /* Some Unix */ env2env(e, "LD_LIBRARY_PATH"); #endif
env2envはadd_unless_null()関数へのラッパ。両関数はこんなソースです。
static void add_unless_null(apr_table_t *table, const char *name, const char *val) { if (name && val) { apr_table_addn(table, name, val); } } static void env2env(apr_table_t *table, const char *name) { add_unless_null(table, name, getenv(name)); }
つまり、関数が呼ばれた時点でのLD_LIBRARY_PATHをgetnevで取得して、それをapr_table_tに設定する。むぅ。そうすると、apache設定ファイルではLD_LIBRARY_PATHは設定できないってことだな。
検証のために、上記server/utils_scripts.cでの env2env(e,"LD_LIBRARY_PATH")の行をコメントアウトすると、ちゃんとapache設定ファイルで設定した値がLD_LIBRARY_PATHに渡ってくる。
うーむ、なんとかできないかなぁ。