いやー。cvsup.icmpv6.org というサーバを立てていたのですが csup がいよいよ利用できなくなりましたね。 cvsupd から持ってきたソースコード、例えば ports を portmaster -D -a とかすると「もう使えないぜ。ベイビー。」とか怒られる。
それならば、と、いうことで ports などは snv で取ってくることにしましょう。基本的には以下のコマンドで svn で FreeBSD の ports ツリーを取ってくることができます。
|
FreeBSD のソースコードを取ってくるには svn というのが必要で、それはつまりは ports 的にいうと devel/subversion が必要になるのでこいつをインストールしてあげる必要があります。後で出てきますが、svn サーバを必要としない、クライアントのみで利用するのであれば devel/subversion-static のほうが、余計なのがインストールされないので良いかもしれません。
上記コマンドを実行するときには一旦 /usr/ports/ の中を綺麗にしたほうが良いかもしれんですね。 ports/distfiles/ の中に色々とゴミが残るのでどこかに一時的に移動するか、サッパリと \rm -r /usr/ports してしまったほうが良いかな? 個人的に自由にしてください;-)。
さてさて。svn コマンドを実行したときに、海外のサーバを見に行くことになるのですが、ちょっと遅いかもしれないし大変ですよねぇ。今まで cvsupd なサーバを自分で構築していたので svn なサーバも自分で構築してみましょう。 FreeBSD のための Subversion のミラーサイト (FreeBSD.org subversion mirror) を構築してみます。それが今回のお題目です。
まずは ports から devel/subversion をインストールします。こちらを make すると make config で色々聞いてきます。 devel/subversion-static のほうは特に何も聞いてきません。 FreeBSD の svn サーバを構築する場合には以下のオプションを [X] にして make install しましょう。
|
すると apache22 までインストールしてくれます。うひっ。 php とか、この手の apache 絡みのヤツを ports からインストールすると強制的に apache までインストールされてしまうのは、ちょっとどーかと思う。僕は apache は自分で make する派なのでねぇ。 mod_* だけインストールしてくれれば嬉しいなぁ。
と、いうことで apache まで起動できる状態になったので svn サーバ (仮に svnweb と言います)を作成していきましょう。
まずは FreeBSD のソースコードや ports 一式を先に取ってきます。
|
base のほうは FreeBSD のソースコードです。 ports は ports ですね。 r238500 とか r301235 ってのはレビジョンのようです。以下の URL が参考になるかと思います。
http://svnweb.freebsd.org/base/
ftp で取ってきたやつでさえも古いので更に sync して最新のものに揃えます。それが上記コマンドの下の二行です。 snvsync するとどこから取ってくるんでしょうなぁ? 後でキャプチャしてみよう(キャプチャした結果 svn.FreeBSD.org からでした;-)。
と、いうことで最新のソースがこれで準備できたと思います。あ。定期的に svnsync するには以下のスクリプトを書いて cron に登録すれば良いでしょうね。
|
ちなみに、base と ports だけで 20GByte くらいのディスク容量が必要になります。HDD の容量に気をつけてください。
さささ。続いてサーバのほうを設定していきましょう。基本的には httpd が動作していて port:80 にアクセスします。 SSL に対応しているのであれば https:// でアクセスできます。
まずは httpd.conf ですが、 devel/subversion をインストールしたのであれば特に何もせずとも動作します。うひっ。 ports/subversion インストール時に上に書いた二つのオプションを有効にしたのであれば、多分 httpd.conf に以下の設定が既に追加されているはず。
|
ほー。svn のサーバって dav で動作するんだねぇ。するっていと多分 extra/httpd-dav.conf にも設定必要だね。って思うんですが、果たしてそのとおりで、 extra/httpd-dav.conf の中身を全部消して、以下の行を追加して上げます。
|
あとは httpd を起動すれば動作すると思います。あ。Include etc/apache22/extra/httpd-dav.conf の行は当然コメントアウトをはずす必要があります。
ウェブブラウザでアクセスすると http://svnweb.icmpv6.org/base/ こんな感じで見えるようになります;-)。
では実際に正しく動作するか確認してみましょう。手元にある FreeBSD から以下のコマンドを実行してみます。
|
既に一回、他の svnweb から /usr/ports に持ってきてしまうと svn のエラーコード E155000 で怒られます。その場合には違うディレクトリに co するか、 /usr/ports/.svn/ というディレクトリが svn の接続先情報を管理しているようなのでこのディレクトリを mv すれば良いかもしれません。
さてさて。 apache の設定に戻りますが、svnweb のためだけに httpd を起動する人は皆無だと思うので、多分 httpd-vhosts.conf で VirtualHost の設定をしているかと思います。 DAV svn の設定も簡単で VirtualHost ディレクティブの中に httpd-dav.conf で書いた設定をそのまま書いてあげると良いです。その場合は Include httpd-dav.conf の設定は必要なくなります。
と、いうことで 簡単な svn の使い方と svnweb の立て方をサラっと書いてみました。皆さんもどんどん日本に FreeBSD 用の svn のサーバを起動してみてください;-)。 ちなみにですが、以下を一応用意しました。それぞれのサーバに base/ と ports/ があります。
http://svnweb.icmpv6.org/ (IPv4/IPv6)
https://svnwebv4.icmpv6.org/ (IPv4)
いつも動作している保証はありません;-)。
なんか、IPv4 でアクセスした場合は svn クライアントがエラーになって止まる傾向があるようです。
クライアント側、それはつまりは svn co や svn update する側の FreeBSD ですが、多分ファイアーウォールの内側にあると正しく WebDAV で接続できないようです。
サーバから切断された旨のメッセージが表示されます。そしてその時に http サーバでは以下のログが出力されます。
—
Unable to deliver content. [500, #0]
Could not write EOS to filter. [500, #175002]
Provider encountered an error while streaming a REPORT response. [500, #0]
A failure occurred while driving the update report editor [500, #53]
—
svn update するクライアント側は以下のメッセージが表示されます。WITH_NLS=YES なので日本語ですが、エラーコードは万国共通でしょう。
—
svn: E000054: Error retrieving REPORT: 接続が通信相手によってリセットされました
—
例えば僕の場合は svnweb.icmpv6.org の場合はデュアルスタクなのですが、IPv6 でアクセスすると正常終了し IPv4 でアクセスするとエラーになります。同じクライアントで svn0.us-west.FreeBSD.org の svnweb にアクセスしても同じ終了コードです。
パケットをキャプチャしてないのですが、何かしら(多分ファイアウォール? が)悪さしているのではないか?と思えるんですね。
なので IPv4 側のサーバは SSL にしてみました。僕の環境では svnwebv4.icmpv6.org は https にしたら無事に svn update が動作するようになりました。
当分はこれで行ってみたいと思います。多分、エラーとなる原因はクライアント側にあるように思えます。
あ。外していたらごめんなさいf(^^;;。
[…] 以前のエントリで「SVN サーバを構築して FreeBSD のソースをミラーする。」と、いうのを書いたのですが、これはプロトコル的には http:// にしか対応していないんですね。svn co には http: […]