jsvc 実行時に環境変数を固定して渡す
Continuum 1.1. on Tomcat 6.0.20 を jsvc で起動している環境で、CI 対象のプロジェクトに http ではなく、自己認証の https を加えた所、以下の通りのメッセージを残して、ビルドが失敗。
svn: OPTIONS of "<<website>>": Server certificate verification failed: issuer is not trusted.
証明書信頼できんよ、と、その通り。。。で、該当メッセージでググると、「実行ユーザで svn ls しなはれ」が大半なのですが、
- Tomcat の実行ユーザで、svn ls
を叩き、$HOME/.subversion/auth/ssl.server を作っても駄目。 - continuum で実行されている svn コマンド自身を叩くと問題なく成功する
という状況。で、jsvc 経由で実行している際に、$HOME が引き渡されてないから subversion の config-dir 見れてないのか、と思い jsvc-unix.c のソースの main 関数を簡単に手直し。
$ diff -p native/jsvc-unix.c ../jsvc-src/native/jsvc-unix.c *** native/jsvc-unix.c Fri Jan 22 13:14:40 2010 --- ../jsvc-src/native/jsvc-unix.c Tue May 17 22:13:39 2005 *************** int main(int argc, char *argv[]) { *** 622,629 **** return(0); } - setenv("HOME","ここにホームのパス",1); - #ifdef OS_LINUX /* On some UNIX operating systems, we need to REPLACE this current process image with another one (thru execve) to allow the correct --- 622,627 ----
今回の対応は、ざっくりハードコーディングしちゃいましたが、getenv とかしても良いやも。ま、あまり色々渡すのもなんなので、この辺りは自己責任な感じでしょうか。ともあれ、こんなのは、絶対後々忘れてしまうことなので、備忘も兼ねて。