2004/12/09

おまけ:winにsubversion

基本的に今のところBSDはsubversion用にしか使ってない。のでここに置いたんやが...
普段サーバに置いとけばなんなとなるし、 subversion+apache+2、とかやとセキュリティ付きでインターネット経由のアクセス、なんかも (比較的)容易なんやけど、
けどサーバを持ち運べるわけじゃないんで、接続できない場面なんかも 当然発生する。
そんな場合でもPC持込、なんて場合が多いんで、開発用ノートPCにsubversionをセットアップしておけば 持ち出しも可能。
んで、そのノートPC側の設定を行ったんでその記録を。

まず、apache2をインストールする。まあ、deltavでアクセスせずに使うならいらんし、ファイアウォールでLAN内だけ許可しとけばsvnservで充分な気もするけど...
基本的にはインストーラを取ってきてインストールするだけ、何やけどうまいこといかなかった。
あとでわかっんやけどskypeが悪さをしていたらしい。
今回は仕事の変わり目でPCの中身をサラにしてから入れたのでここでは問題なし。
問題があったときはさっきのページとかそっから飛べる@ITの記事とかを参考に犯人を突き止めるべし。
場合によってはapache2のポートを変えるよりほかに無いかも。
まあ、今回はすんなり行ってよかった。

で、subversionのインストールやけど、これは簡単。
別に普通に使うのみならTortiseSVNで充分だが、サーバから移行して別サイトで使用したり、戻ってきてサーバに戻したり、なんて事をしたいんで、svnadminのついた本物のsuvbersionがいる。
で、どうするかっていうと、windows版のフォルダからインストーラをインストールして入れるだけ。.zipを取ってきて解凍してパスを通すだけでもいけるみたいやけど。

で、ここからが本番です。mod_dav_svnをApache2にインストールしないといけない。
基本的にはインストーラがやってくれて、後はmod_dav_svn.soとmod_authz_svn.soをApache2のmodulesにコピーすれば良い、はずなんやけど、うまくいかない。
ちなみにLoadModulesとかの修正はBSDの時とおんなじ。
でもおんなじにしても動かない。モジュールが見つかりません、と言うメッセージを丁寧に\xでエスケープして出してくれる。
このメッセージを読み解く為に、


public class UnescapeFilter extends FilterReader {

   public static void main(String[] args) {
       BufferedReader r = new BufferedReader(
               new UnescapeFilter(
               new InputStreamReader(System.in)));
      
       try {
           String line;
           while((line = r.readLine()) != null) {
               System.out.println(new String(line.getBytes("ISO-8859-1"),
                       "JisAutoDetect"));
               if (line.length() == 0) {
                   break;
               }
           }
       } catch (IOException e) {
           e.printStackTrace();
       }
       try {
           r.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
  
   public UnescapeFilter(Reader in) {
       super(in);
   }
  
   public int read(char[] buf, int ofset, int len) throws IOException {
       char[] myBuf = new char[buf.length - ofset];
       int count = super.read(myBuf, 0, len);
       int pos = ofset;
      
       for (int i = 0; i < count;) {
           char ch = myBuf[i++];
           if (ch == '\\') {
               ch = myBuf[i++];
               if (ch == 'x') {
                   ch = (char)toByte(myBuf[i++], myBuf[i++]);
               } else {
                   buf[pos++] = '\\';
               }
           }
           buf[pos++] = ch;
       }
      
       return pos - ofset;
   }

   private byte toByte(char upper, char lowwer) {
       return (byte)Integer.parseInt(
               new String(new char[]{upper, lowwer}), 16);
   }
}

みたいにしてJavaで変換して読んだ。このコード、前はごめんなさいな程汚かったんで書き直した。 で、この件、W32notes.txtを見る限り、パスを通したりすると直るらしいんやけど、うまくいかず。
結局どうやったかというと、subversionのbinから全部のdllをapache2のmodulesに移すと、動いた。 (また無茶を...)
あまりに無茶なんで1つずつ消して要らんやつをはずして見たら、libaprutil.dllとintl.dllとlibdb42.dllが必要だったらしい。今回は。でも常にこれで充分かは疑問。
んで、ようやく動きました。後はapache2の設定しだいなんでBSDの時とおんなじでいい。
以上。

0 件のコメント: