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 とかしても良いやも。ま、あまり色々渡すのもなんなので、この辺りは自己責任な感じでしょうか。ともあれ、こんなのは、絶対後々忘れてしまうことなので、備忘も兼ねて。