基本的に今のところ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の時とおんなじでいい。
以上。