Subversionでhttp(s)のURLスキームを認識しない問題を解決する。
RetrospectivaのtrunkをGoogle Codeからcoしようとしたらエラーが出る。
$ svn co -q http://retrospectiva.googlecode.com/svn/trunk/ retrospectiva svn: 'http://retrospectiva.googlecode.com/svn/trunk' 用の URL スキームを認識できません
色々調べてみたものの分からなかったので、エラーメッセージでググるとあっさり原因が見つかった。svnコマンドでhttp(s)系のリポジトリにアクセスする場合には、neonと言うライブラリが必要になるらしい。subversionのINSTALLファイルには以下のように書かれている。
4. Neon library 0.25.x or 0.26.x (http://www.webdav.org/neon/) The Neon library allows a Subversion client to interact with remote repositories over the Internet via a WebDAV based protocol. If you want to use Subversion to connect to a server over ra_dav (via a http:// or https:// url), you will require Neon. (See also section I.11 for information about "serf", an experimental alternative to Neon for accessing servers over WebDAV.)
まず既存環境にNeonがあるか確認する。
$ rpm -qa | grep -i neon neon-0.24.7-4
あった。でも要件を満たしていないようだ。と言うわけでNeonを含めてSubversionを再コンパイルする。NeonはNeon公式からダウンロードするか、Subversionの依存ファイルを一括してパッケージしたtarファイルに含まれている。今回は後者を利用する。インストール方法も同様にINSTALLファイルに書かれているのでこれを参考に。
The source code is included with the Subversion dependencies package, and it can also be obtained from: http://www.webdav.org/neon/neon-0.25.5.tar.gz -or- http://www.webdav.org/neon/neon-0.26.1.tar.gz Building Neon inside the subversion build: The Neon library source code can be placed in "./neon" if you want Subversion to build it as part of the Subversion build process. Unpack the archive using tar/gunzip. Rename the resulting directory from ./neon-0.XX.Y to just "./neon", inside the top level of your Subversion source tree. (This is what unpacking the Subversion dependencies package does, too.)
手順は以下の通り。
$ wget http://subversion.tigris.org/downloads/subversion-1.4.6.tar.gz $ tar zxf subversion-1.4.6.tar.gz $ wget http://subversion.tigris.org/downloads/subversion-deps-1.4.6.tar.gz $ tar zxf subversion-deps-1.4.6.tar.gz $ cd subversion-1.4.6 $ ./configure $ make $ sudo make install
特に問題なく終了。configure時には以下の出力を確認した。
# #configure: Configured to build neon 0.25.5: # # Install prefix: /usr/local # Compiler: gcc # XML Parser: expat # SSL library: SSL support is not enabled # zlib support: zlib support enabled, using -lz # Build libraries: Shared=no, Static=yes
再度チェックアウトし、無事チェックアウト出来る事を確認。
2008/1/29 追記
上記の手順でコンパイルした後、svkが動作しなくなったり、rubyのSubversionバインディングが動かなくなったりした。バインディングはバージョンが古いだけだったのだけれど、svkは原因がよく分からなかった。
以前とconfigureのオプションが違っていたりする事はあったのだが、Subvresionの依存パッケージにはNeon以外にapr,apr-util,zlibが入っていたので、それが問題になったのかもしれない。復旧した際にはNeon単体のみをソースツリーに含めるようにした。
2008/1/29 追記 その2
configureに--with-sslオプションを追加しないとhttpsでチェックアウトが出来なかったので、再度コンパイルし直し。
$ ./configure \ PERL=/usr/local/bin/perl \ PYTHON=/usr/local/bin/python \ --with-swig=/usr/local/bin/swig \ --with-ssl $ make $ sudo make install
コンパイル前。
$ svn --version (snip) 以下のリポジトリアクセス (RA) モジュールが利用できます: * ra_dav : WebDAV (DeltaV) プロトコルを使ってリポジトリにアクセスするモジュール。 - 'http' スキームを操作します * ra_svn : svn ネットワークプロトコルを使ってリポジトリにアクセスするモジュール。 - 'svn' スキームを操作します * ra_local : ローカルディスク上のリポジトリにアクセスするモジュール。 - 'file' スキームを操作します
コンパイル後。
$ svn --version (snip) 以下のリポジトリアクセス (RA) モジュールが利用できます: * ra_dav : WebDAV (DeltaV) プロトコルを使ってリポジトリにアクセスするモジュール。 - 'http' スキームを操作します - 'https' スキームを操作します * ra_svn : svn ネットワークプロトコルを使ってリポジトリにアクセスするモジュール。 - 'svn' スキームを操作します * ra_local : ローカルディスク上のリポジトリにアクセスするモジュール。 - 'file' スキームを操作します