2004/12/15

dumpファイル取得用phpスクリプト

subversionのレポジトリをダンプしてダウンロードするんにいちいちサーバを操作するんがめんどくさかったんで、phpでダンプを取るためのスクリプトを書いてみた。
ブラウザで、/path/to/script.php/repositoryName.dmp のように、このスクリプトのURLの後に「/レポジトリ名.dmp」と入れてやると、ダンプファイルをダウンロードする。
ちょっと思いのほか便利。
<?php

define("REPOS_HOME", "/home/svn/repos");
define("SVN_ADMIN", "/usr/local/bin/svnadmin");

dumpRepository(getRepositoryName($_SERVER["PATH_INFO"]));

function getRepositoryName($pathInfo) {

   $fileName = substr($pathInfo, 1);
   list($repository) = split("\.", $fileName, 2);
   $repository = escapeshellcmd($repository);

   return $repository;
}

function dumpRepository($repository) {
   header("Content-type: application/svndump");
   header("Content-Disposition: attachement; filename=${repository}.dmp");
   passthru(SVN_ADMIN . " dump " . REPOS_HOME . "/${repository}");
}
?>
どうせやったらRubyで書いた方がかっこよかったかな?勉強にもなったはずやし...

2004/12/14

自動起動設定

書いてなかったがおとといJBossの3と4を両方ともインストールした。 こいつは/usr/ports/java/jboss-n.n.n> make install一発で入るんやけど、自動起動までしてくれる。
基本的に便利やけど2つ入れるとまずいな、って事で自動起動設定を切ることに。

FreeBSDの自動起動設定てどうなってるんやろうと思ってぐぐると、トップでそれっぽいのが叫んでた。ふむふむ...
rc.d/は/usr/local/etc/の下にあるって事らしい。で、こいつの中の020jboss3.shをリネームして丁寧にパーミッションまで変えてやったら無事起動しなくなりました。よしよし。

subversionでの自動ビルド

今日仕事帰りに「Subversion解説書」を何気に立ち読みしてたら これまでずっと調べててわかんなかった自動ビルドの設定法をあっさり発見。
これにのってるって事は当然「Subversionによるバージョン管理」にものってるわけで...
5. リポジトリの管理 > リポジトリの作成と設定 > フックスクリプト に書いたあるやん。普通に。
まあ、やりたいことベースとかCVSからの移行イメージで、とかで 「subversion 自動ビルド」とか「subversion 自動テスト」とか「subversion commitinfo」とか、 そんな検索ワードを使ってたから見つからんかったんやろなぁ。
一通り読み込んでたつもりでまだまだ読めてない部分も多いんでしょう。

で、やり方やけど、リポジトリを作ったらその中にhooksてディレクトリがあるので そこに決められた名前のファイルを作っておけばそいつか実行される。
UNIX系ならまさしくの名前のものを、winなら拡張子は無視して実行ファイルなら 実行してくれるそうなので、けっこうなんでも置けそう。
自動ビルドならantをキックするスクリプトをpost-commitてな名前で追いとけばよさげ。
管理しやすいようにリポジトリディレクトリ内にautobuildという名前でtrunkをチェックアウトして、 そいつを自動ビルドする。てかコミットのたびに自動でテストしてレポートを吐きたかったんだ。
とりあえずwinノートで試したんやけどBSDのblog(じゃぁ無いよな、このメモ) なのでBSDベースでかきます。
まず、そのpost-commitの内容。

#!/bin/sh
cd ../autobuild
PATH = /usr/local/bin
export PATH

svn update
ant -l build.log test
てな感じで書いて、chmod +xすればよし。
そんだけでコミットするたんびに更新してくれる。なんて解りやすい...解っちゃえばこんなもんですな。
こんだけじゃなんなんで、ついでにbuild.xmlの内容なんかも。
<?xml version="1.0" encoding="UTF-8"?>
<project name="triggertest"  default="build"  basedir=".">

 
   <target name="build">
       <javac destdir="bin" debug="true">
             <src>
               <pathelement path="src"/>
             </src>
           <include name="**/*.java"/>
       </javac>
   </target>

 
   <target name="test" depends="build">

       <delete dir="test-result" />
       <mkdir dir="test-result"/>

       <junit>
           <formatter type="xml"/>
           <classpath path="bin"/>
           <batchtest todir="test-result">
               <fileset dir="bin">
                   <include name="**/*Test.class"/>
               </fileset>
           </batchtest>
       </junit>

       <junitreport todir="test-result">
           <fileset dir="test-result"/>
       </junitreport>

   </target>
</project>
こんな感じでした。まる。

2004/12/13

気を取り直してJDK1.4

JDKのインストールをいまさらながら行う。
てかJDKが入ってなかったことの方が驚きやけど。SVNのJavaサポートとか入れてるくせに。

これもなかなかはまった。まず/usr/ports/jdk14を試したんやけど、こいつに必要なpachsetというの野ダウンロードがなぜかうまくいかない。
Java 2 on FreeBSDのサイトでダウンロードページからボタンを押すと何もいわずに戻されてしまう。 仕方が無いので半日の格闘後あきらめました。
気を取り直して、やっぱ今からやったら1.5やんね、とlinux-sun-jdk15をmakeしたらBad System Callが出てインストールできない。で、linux-sun-jdk14をインストールすることにした。

まずはダウンロード

と りあえず/usr/ports/java/linux-sun-jdk1.4/でmakeしてみると、j2sdk-1_4_2_06-linux- i586.binを/usr/ports/distfilesに入れてくれといわれる。こいつは、なぜか自分でfetchしてくれへんのです、ports のくせに。ていうかライセンスの承諾がいるんやね、きっと。
で、自力でSunのJDCからダウンロードページへ行って、self-extracting file (j2sdk-1_4_2_06-linux-i586.bin)を取ってくる。
こいつを指定された/usr/ports/distfiles/にいれて、再度makeすると、今度はgettextのバージョンが古いと文句を言われてしまった。

gettextは0.13ですか。

甘やかしちゃいかんと思いつつもついつい/usr/ports/devel/gettext/でmake deinstall; make install(無茶は承知)。
で、再度/usr/ports/java/linux-sun-jdk1.4/に戻り、makeすると今度はlibintl.so.5が無いと止まってしまう。

libintl.so.5を作ってやる

ぐぐって調べるとなにやらlibintl.so.n(nは5以上の任意の整数)にシンボリックリンクを貼れば良い模様。(これは無茶ではない。んじゃ無いかとおもう)
/usr/local/lib/ でln -s libintl.so.6 libintl.so.5として、再度/usr/ports/java/linux-sun-jdk1.4/でmake すると、ようやくmake 完了。で、make install して晴れてインストールできました。再起動してjava --versionと ...したらエラーがTT。

続きは飯の後にしよう...

linuxバイナリ互換を入れないとね...

で。とりあえず、「FreeBSD jdk14 インストール」でぐぐって再度インストール法を確認。
そこで見つけたページで、こんなことが書いてある...
また、linux版には、Linuxバイナリ互換機能が必要です。 ...(略)... 実際にLinuxバイナリ互換機能を使用するには、/etc/rc.confに linux_enable="YES" の1行を追加します。
もちろん、そうですな。インストールだけして動かしてない。そら効いて無いわって話で。
やりました、rebootしました、動きました。しょうもな。ってrebootまでせんでもいいやん、UNIXやのに。win癖がついちゃって...

そんなわけで無茶をしつつもインストール完了です。無茶しすぎ。
サーバ管理の仕事は出来ひんなぁ、と改めて実感した半日*2でした。

いまさらXfree86設定

実は今までtextオンリーで使って来たんである。
いや、最初はちゃんとがんばってXFree86設定を完了させててんけど。 HDが逝ってしまわれて再セットアップせなあかんくなたらめんどくさくて。

で、さすがにGUI無しがなにやらもの悲しゅうてXFree86の設定に再挑戦する。 何がまずくて設定できなかったかと言うと、グラフィックカード。
サーバマシンにはATI Rage XLが入っているんやけど、 こいつとBSDの相性が悪いらしい。
ちなみになぜ今更かというと、たまたまネットを手繰っていてHPのサポートページに 同一構成の設定法がのってたから。HPではいないんやけど、参考になりそう。

その上ディスプレイはLCDで、ちょっと周波数がリストに無いんではまっていたらしい。

で、どんな設定をしたかというと。
まずキーボードとマウスは普通にデフォルトのままでうまくいった。
問題はまずディスプレイである。こいつはスペックを見て 水平はリスト上のHigh Frequency SVGA 1024*768@70 Hzを選択、 垂直は直入力で55 - 75とする。
後はグラフィックカード。リストに無いので正直にUnlisted cardとし、 メーカーのatiを選択。
で、次がポイントで、ディスプレイは16bitで1024*のみを設定しておく。 これでXFree86は動くようになった。
が、なぜかKDEが起動してくれないTT。 まだまだ苦難が続きそうです...

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の時とおんなじでいい。
以上。

subversion1.1.1登場

日本にいない間にsubversionが1.1.1になってた。 今回はPortsが対応してくれているので、そっちでインストール。
Lev Serebryakov氏に感謝!

さすがにportsは楽ちん。cvsupしてからmake; make installで終わる。 といってもMakeFileを調べてプションをつける必要はあったのだけれど。
やったのは以下の通り。


> cd  /usr/local/etc/cvsup
> cvsup ports-supfile

> cd /usr/ports/devel/subversion
> make clean
> make -DWITH_PYTHON -DWITH_JAVA -DWITH_MOD_DAV_SVN
基本的に最初に入れたときの準備完了後と同じなのだが、 subversion-pythonを使う代わりに-DWITH_PYTHONとしたのと、 なんとなく気分でWITH_JAVAしたら入ったので使っている。
しかしやっぱりportsは便利だなぁ、などと思ったりしたのでした。 いじょ。

2004/10/07

websvnの導入

ViewCVSの出力がいまいち気に入らなかったのでwebsvnを導入してみることにした.
こいつ自体のインストールは問題ないのだがphpを入れなおす必要がありそこでちょっとはまる.

websvnのインストール

これは非常に簡単.
websvnのサイトからtar.gzをダウンロードしてきて、web公開しているディレクトリに解凍するだけでいい.

websvnの設定

設定ファイルは解凍してできたディレクトリの下のinclude/にconfig.incというファイル名で置く.
distconfig.incというファイルがあるので、そいつをコピーして後は適当に設定を書き換えていく.
もう少ししっかり設定したほうが良いのかも...やけど.

phpではまる

phpのデフォルト構成に含まれない、gzopen()という関数を使っているらしく、そのままでは落ちた.
もしかしたら設定の問題かもしれないけど...
で、phpを入れなおそうとしたのだが.../usr/ports/lang/php5に入ってmake してみると落ちてしまってうまくいかない...
どうやらXMLサポートがうまく入れられていないよう.
結局Makefileを開いて、--with-xmlの行を消したらうまくいった.
さらに--with-zlibも書き足して、make cleanでいったんさらにしてから make; make install.
apachectl restartして確認してみるとエラーが「パーミッションがないよー」というものに変わり、とりあえずgzopenが呼べることは確認. 
が、まだpreg_replase()が無いと怒っている...そいつは標準やぞ.何で入んないんだか.
別にwithoutしているわけではなさそうだが、とりあえずphp5のMakefileに--with-pcre-regexも追加してmake clean; make; make deinstall; make installしてみる.
で、再度apachectl restart.
ようやく動いた...けどログが変..(TT)
後は設定次第か.

apacheの設定修正

今はわざわざindex.phpまで書かないとみれない.DirectoryIndexにindex.phpも追加すべきだわな.
というわけで書き加えてapachectl restart.

どうすればログが合うの???

いろいろ調べてみるとsvnlook自体が文字化けを起こしているらしい...涙涙.
バージョンあがるまで待つしかないのか...?

2004/10/06

pkgsrcによるsubversionのインストール

pkgsrcを導入し終えたので、めあてのsubversion1.1.0のインストールを行ってみる.

bmakeに注意

portsと基本的な使い方は同じだろうとおもい、make -D WITH_MOD_DAV_SVNとしてみたらぜんぜんうまくいかない.
makeじゃなくbmakeを使う必要があるんですな.
で、みてみるとDAVとかpythonとか使うように設定されているようなので、単にbmakeとしてみる.
なんだかpython2.3.4とかapache2とか、実物があるはずなのにtgzを落としてきているのが気になる...
たんにビルドに必要ならわかる話なので、とりあえずこのまま進めてみる.
普通に終了したので、bmake install.
バイナリがどこにできるのかと思えば/usr/pkg/以下にできていた。

バイナリの移動

/usr/pkg/binとかのパスは今のところrootのみで当てているので,移す必要あり.
svn関係の生成ファイルを全部cpしてしまう.無茶だけど.
/usr/pkg/binでcp *svn /usr/local/bin,
/usr/pkg/libでcp libsvn* /usr/local/lib, /usr/pkg/lib/httpdでmv mod*,
/usr/local/libexec/apache2/.
これでapachectl restartしたらちゃんとsubversion1.1.0で動くようになった.

pkg-srcの導入

subversionのページのダウンロードからたどってみると、pkg_srcではsubversionが1.1.0になっている模様.
なので、subversionのためにpkg_srcを導入してみることにした.

入手

pkgsrcのトップページにダウンロード用リンクがある.
これをとってくる.

インストール

/でtar -xzfをすれば/usr/pkgが入る.この下のbinとsbinにパスを通して完了.

pkgsrcの取得

cvsで取得する. まず/usrに行き、
cvs -d :pserver:[email protected]:/cvsroot login
してNetBSDのcvsにログインした後、
cvs -d :pserver:[email protected]:/cvsroot co pkgsrc
とするとcvsがどんどん取得してくれる.
これで/usr/pkgsrcでcvs updateすればいつでも最新にできるようになる.

2004/10/05

ソースからsubversionを 1.1にアップグレード失敗記

注:インストールは結局失敗してます。 (多分apache2を探し損ねているせい)
いつの間にやら1.1が安定版らしい。
まだ良く読んでいないがDeltaVへの準拠が含まれているっぽいので 更新する.
ただし、portsにはまだきていないのでtar.gzを開いてのインストールになる.
portsができたらやり直してみようかと思っている.はまることもないだろうし.

ファイルの入手

subversionのダウンロードページからソースコードのディレクトリに入り、ダウンロードする.
こいつを/usr/local/srcでtar -xzf subversion-1.1.0.tar.gzして準備完了.

バックアップ

レポジトリを片っ端からsvnadmin dump /repos/path > repos.dmpみたいにバックアップしていく.
/repos/pathとかreposとかはもちろんレポジトリごとに変えていく.

1.0.8 の削除

/usr/ports/devel/subversion-python/にいってmake deinstall. 楽だ.
再起動するならapacheの設定を直さないといけないことに注意. viでhttp.confを開いて、/svnで片っ端から検索して#でコメントアウト、でいいはず.
Locationとかはちゃんと意味が通じるようにしないといけないけど.

インストール

まずは./configureでmakeファイルを作る.
単に./configureとすると、aprにリンクしたバークレイが古いからバークレイサポートは作らないよ、とのたまうので、aprを指定する必要がある模様.
./configure --help | less としてオプションを確認する. (先にしろよ)
--with-aprと--with-apr-utilが必要そう.それぞれのツリーかconfigファイルのパスをおしえてね、と言っているのでどちらも/usr/local/lib/apache2を指定する.
あと、with-swigもいりそうかな...とも思うが、勝手に見つけているようなので省略.
./configure --with-apr=/usr/local/lib/apache2 --with-apr-util=/usr/local/lib/apache2
ひとまず通るのでmakeといってみる
基本的にオプションはportsでのmakeの時と同じでいいはず...なので, -D WITH_MOD_DAV_SVN と -D WITH_PYTHON を入れてみる.
make -D WITH_MOD_DAV_SVN -D WITH_PYTHON 
これも通ったのでmake install.>ってmake checkくらいしろよ...

移行

古いレポジトリが残っていたのでsvn coしてみた. ラッキーにも問題なく取れたので、以降作業は必要なさそう.
別にrm; mkdir; svnadmin load /repos/path < repos.dmpくらいなんでもないけど.量が量だけにね.
ここで、mod_dav_svn.soができていないことに気づく.
2時間の格闘の後断念. unix系のインストールってうまくいけばめんどくさいだけだけどうまくいかないときは難しい.
まあ、portsに乗るまで我慢することにした.

2004/09/30

まずはsubversion

subversionのインストールはややこしい.まずは要るものを下調べしておかないと.
やりたいのは、DeltaVベースのサーバを立てて、できればViewCVSも入れときたい...
けどViewCVSはなぜかうまくいったことが無いので不安...できなければあきらめることにする.
xmlのログがかなり使えるのであんまり要らないし.

要るものリスト(インストール順)

BerkeleyDB
svnのバックエンドになる.1.1からはバックエンドの選択肢がだいぶ広がる模様
Apache2 + apr
DeltaVのためにはApadhe2も必要らしい
python
ViewCVSはこいつで動いている.
swig
ViewCVSへのインターフェイスを開くために要る模様
subversion
これが本命.svn://で動かすならほぼこれのみでいいはずだけど...
ViewCVS
こいつがなぜかうまくいったためしがない. こいつ自身じゃなくてsvnのオプションが入らないんだけど.

BerkeleyDB

/usr/ports/databases/db42にある.-nocriptでもいいのかもしれない.
make; make installで普通に入る模様.

Apache2 + apr

最低限の条件は、
  • MOD_DAVが入っていて、MOD_DAV_SVNを登録できること
  • 上記BerkeleyDBを使用すること
の2つ.
なので、最低限を考えれば、WITH_DAV_MODULES=YESとWITH_BERKELEYDB=DB42の2つははずせない.
で、make WITH_DAV_MODULES=YES WITH_BERKELEYDB=DB42 してみるとopenssl,expatでエラーが発生する.
それぞれ下記の作業で入れなおすと何とかうまくいった.
で、そのたびにmakeをやり直してmake install した.本当はmake clean もすべきだろうけど.

openssl

どうもopensslのバージョンが合っていないそうなので、入れなおす.
whereis opensslで探して今有るのを削除してから/usr/ports/seculity/opensslでmake;make install.
# なんて大雑把な...やっちゃまずいっしょ.libとか残るし... < 社内サーバなので無茶してる
# /stand/sysinstallで削除すれば良いのに.

expat

/usr/ports/textproc/expat2でmake deinstall; make install

PHP

phpinfo()でapacheの設定を確認するためにPHPを入れてみる.
軽快なJavaでは「変なもの」呼ばわりされていたけど。
本気で使うわけではないのでオプションはほとんど無し. 本当に使うときには入れなおさないと.

/usr/ports/lang/php5でmakeすると設定メニューが立ち上がる. ちょっと感動.
APACHE2のみ有効にしてOK.
で、make install.

/usr/local/etc/apache2/httpd.confに、

AddType application/x-httpd-php .php
を追記して、
>?php phpinfo(); ?<
とだけ書いたファイルを/usr/local/www/data以下に.phpで作って、
apachectl restartする.
で、ブラウザで開いてみて設定を確認.

python

有るけど古かったので再インストール.
/usr/ports/lang/pythonに入ってmake; make deinstall; make install
なんでmake reinstallが効かないんだろう?古いのがあるからいやとかいわれてしまった.

swig

/usr/ports/devel/swig13に入ってmake; make install .
楽ちん、楽ちん.

subversion

いよいよ本番. ここまで長かった...(既に半日過ぎている)
Apache2用のDAV_SVNが要るので、WITH_MOD_DAV_SVNは必須. このオプションにはWITH_APACHE_APRも含まれているとの事.
pythonへのインターフェイスもいるが、これはsubversion-pythonという設定済みのものがあるらしい.
で、 /usr/ports/devel/subversion-python に入って make -D WITH_MOD_DAV_SVN としてみる. 通った!(実はここまでに何回か失敗し、1度apacheを入れなおしたりもしたんだけど...)
で、make install . 問題なし.

ようやくインストールはすんだのでレポジトリを作る.
まず、リポジトリは/usr以下にするか/home以下にするか、だけど.~svn/repos以下につくるのがいいかなぁ、と思っている.
/usr以下は大きめに取ってたんだけど(7G. homeは4G)いまやどちらも4Gずつしかない.
基本社内サーバなので/usr/local/wwwはどんどん太るだろうし. てなわけで、/home/svn/reposに決定.
で、svnユーザになって、mkdir ~/repos でレポジトリ置き場を作って svnadmin create /home/svn/repos/testした.

で、次はapacheの設定.rootになってvi /usr/local/etc/apache2/httpd.conf.
mod_dav.soのLoadModuleのコメントをはずす. mod_dav_svn.soはインストーラが書いてくれる.
つぎに、/etc/groupを編集してsvnグループにwwwを追加する.

svn:*:1002:www
1002は実際のGIDで、複数登録したければwww,user1,user2のようにカンマでつないでいく.
本当はwwwユーザでwebdavリポジトリを作るべきかも知れない.
で、httpd.confの設定. 作ったリポジトリをDeltaVで公開し、読み取りはフリーで書き込みはベーシック認証を使って行う.
<Location /svn>
  DAV svn
  SVNParentPath /home/svn/repos
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile /home/svn/repos/passwd
  
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept>
</Location>
意味は以下のとおり.
<URLが/svn以下の設定>
  DAVフォルダで、バックエンドはsvn
  /home/svn以下のリポジトリを/svn/repos以下に展開する
  ベーシック認証を行う
  認証の名前(ダイアログに出るやつ)は"Subversion repository"
  認証ファイルは /home/svn/repos/passwdを使う
  
  <次のプロトコル以外は制限 GET PROPFIND OPTIONS REPORT>
    有効なユーザを要求する
  </制限終わり>

</URL/svn以下の設定終わり>
あとは、/home/svn/reposでhtpasswd (-c) passwd user のようにしてパスワードを追加していく.
おつかれした.

ViewCVS

こいつはsourceforgeから取ってこないといけないらしい./usr/local/src/あたりでcvsを使って、
cvs -d:pserver:[email protected]:/cvsroot/viewcvs login
cvs -d:pserver:[email protected]:/cvsroot/viewcvs co viewcvs
で取得.
インストール先を聞いてくるので/usr/local/viewcvsあたりにおいてその中のwwwに入り、
cp -R cgi /usr/local/www/cgi-bin/viewcvs
などとしてコピーする.

で、設定. 設定ファイルはインストールしたフォルダにviewcvs.confという名前であるので、distを取っておいて編集.
それぞれコメントがあるので、コメントの直下に設定を書いていく.どこでも効きそうだけど.
デフォルトで効いているcvs_rootsを切っておいて、root_parentsは/home/svn/repos : svnに設定.
default_root はひとまず test としておく.
結果、以下の3点がそれぞれの場所の変更点となる
コメントアウト:

#cvs_roots=/home/cvs
追加:
root_parents = /home/svn/repos
値を変更:
default_root = test
以上で完了.
つかれたー、丸一日かかってしまった...

cvsupのインストール

FreeBSDが入って早速行ったのはcvsupのインストール.
こいつでportsを最新にしてからほかのものをおもむろに入れる.

portsで楽ちん

/usr/ports/net/cvsupに行ってrootでmake; make install.
これで/usr/local/binと/usr/local/man/man1にそれぞれコマンドとマニュアルが入った模様.

めんどくさい設定

設定項目のうち,ほんとにめんどくさいのは要らん言語のportsたちを除外すること.
ローカライズ物はjp以外いらないよ、って書ければ楽なのに、jp以外のあらゆるロケールを除外しないといけない.
あっても問題はおきないのでとりあえず除外はなしで手を抜く.
結果、設定は以下のとおり。
*default tag=.
*default host=cvsup.jp.freebsd.org
*default prefix=/usr
*default base=/usr/local/etc/cvsup
*default release=cvs delete use-rel-suffix

ports-all
上から順に、
cvsのタグが「.」のバージョンを取得
cvsのホストはcvsup.jp.freebsd.org
/usr以下に(portsディレクトリを)エクスポートする
更新記録は/usr/local/etc/cvsup以下に保存する
メインのcvsから取得 消えたファイルは削除する ???

ports全部を取る
use-rel-suffixの説明がどこにも見つからないが、書いておかないといけないとの事.

使い方

cvsup 設定ファイル
で起動できるので、cvsup /usr/local/etc/cvsup/ports-supfileとするか、
/usr/local/etc/cvsupまでいってcvsup ports-supfileとする.
rootで起動しないといけないことに注意する.

コマンドとX環境で自動的にCUI/GUIが切り替わるのは便利.
多分操作はほとんどCUIですることになるけど.