
Subversionによるバージョン管理
− Apache 2.0でWebDAV(後編) −
宮本 久仁男<miyamotokn@nttdata.co.jp>
NTTデータ システム開発事業本部
基盤システム事業部 第一ソリューション技術担当
2002/7/13
Subversionのコンパイル&インストール
下準備ができたところで、Subversionのインストールに取り掛かりましょう。
■Subversionのアーカイブ入手と展開
まず、Subversionのtarボールを入手、展開します。tarボールは、File Sharingメニューの1つ(http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=74)から入手可能です。今回は、原稿執筆時点での最新版であるsubversion-r2291.tar.gzを使用しました(注)。
| 注:Subversionで管理されているリポジトリからスナップショットを取得する手もありますが、ここではtarボールで配布されているものを紹介します。 |
$ gzip -dc subversion-r2291.tar.gz | tar xvf - |
■configureとmake
tarボールを展開したら、生成されたディレクトリに移動してconfigureとmakeを実行します。
$ cd subversion-r2291 |
--with-aprと--with-apr-utilで指定するaprおよびapr-utilのディレクトリについては、コンパイルしたApache 2.0のビルドツリー配下にあるものを指定します。--with-berkeley-dbは、DBライブラリをインストールしたディレクトリを指定します。
なお、Berkeley DBの検出がうまくいかないなどでconfigureが失敗することがありますが、これについてはトラブルシューティングとして後述します。
■Subversionのインストール
makeが終わったら、rootになってインストールを行います。
$ su root |
この時点で、httpd.confにSubversion用のモジュールを組み込む設定が追加されます。
2行目のrmコマンドは、「古いライブラリを明示的に消去するように」というドキュメントの記述に従っています(注)。
| 注:Subversionを初めてインストールする場合などは必要ありません。筆者は、何十回となくインストールを繰り返したので、この作業を実施するのが染み付いています。 |
なお、mod_encodingのコンパイルで発生したようなlibtool関係の問題については、Subversionが自前でlibtoolを生成するため、発生しません。
■リポジトリのエントリ追加と作成
次世代プロトコルWebDAVの可能性で説明した方法と何ら変わるところはありません。また、以下の
と
は順序を逆にして実行しても問題ありません。
リポジトリのエントリ追加
httpd.confの中に、以下のようにしてリポジトリのLocationとSubversionの使用、そして実際のPATHを指定します。
<Location /svn/repos> ←ロケーションの指定 |
リポジトリの作成
SVNPathで指定した/home/svn/reposの配下にSVNリポジトリを作成します。/home/svnをあらかじめ作成しておく必要があります。
リポジトリの作成には、svnadminコマンドを使用します。
$ svnadmin create /home/svn/repos |
最後にnobodyにchownしているのは、httpdの権限で実際にリポジトリを読み書きできるようにするためです。
ここまでで作成されたリポジトリの様子を以下に示します。
$ ls -lR /home/svn/repos/ |
■httpdの起動と試験
ここまでの設定で、Subversionが使用できるようになるはずです。Apache 2.0を起動してみましょう。
# /usr/local/apache/bin/apachectl start |
ちゃんと動いているかどうかのチェックは、OPTIONSメソッドを「
リポジトリのエントリ追加」で指定したLocationに対して発行することで行えます。以下にチェックの例を示します。
$ telnet localhost 80 |
おおよそこんな感じのメッセージが出てくれば、インストールは成功しています。ただし、許可されているメソッドについては、一部出力されないものもあります。
Subversionのインストールトラブルシューティング
今回の記事を書くに当たっての検証では、いくつか大きなトラブルが出ています。ドキュメントを読んだだけではまったく分からないものもいくつかあります。ここでは、そういったトラブルとその対策についていくつか述べてみます。
コンパイル、インストールできない
Subversionは、Apache 2.0で導入されたAPR(Apache Portable Runtime)ライブラリを利用します。ところが、正式リリースされた後もAPRのAPIがFIXされず、コンパイルできないなどということが発生することがあります。
この事象をクリアするには、APRをApache 2.0で利用されているものに差し替えるのが一番の早道です。Subversionのtarボールは、APRライブラリも同梱された形で作成されていますが、Apache 2.0のどのバージョンを使ってビルド&機能チェックしているのかが不明なため、上記のような事象が発生した場合はAPRライブラリのAPIなどの不整合を疑ってみてください。
インストール時に、--with-aprおよび--with-apr-utilを明示的に指定しているのは、このトラブルを避けるためです。こうすると、tarボールに同梱されているAPRおよびARP-UTILは使われません。
コンパイル、インストールはできたが、OPTIONSメソッドによるチェックが成功しない
一番ありがちなのは、こちらの事象でしょう。以下に、実際に発生した例を示しますが、ここでは「データベースのバージョンが不正である」というエラーが出ています。
# telnet localhost 80 |
libsvn_fs-1.soというライブラリにおいて、DBライブラリのバージョンチェックを実施しているのですが、このトラブルはそのバージョンチェックで返却されたバージョン値が「期待されているものよりも古い」ことに起因しています。これは、動いているApache 2.0で有効なDBライブラリのバージョンが古いことにほかなりません。このような事象が発生する原因は、以下の2つが考えられます。
- httpdが参照しているDBライブラリが古い
- libsvn_*で参照しているDBライブラリがまちまち
それぞれの場合における解決方法の例を以下で説明します。
■httpdが参照しているDBライブラリが古い
こちらの問題が発現していると、libsvnにおいていくら新しいDBライブラリを参照するようにしていても、決してSubversionが動作することはありません。
問題が発生している場合に、httpdについてlddを実行した結果を示します。
$ ldd httpd |
解決法としては、2つあります。
本稿に示す手順で、Apache 2.0をインストールし直す
本格的な対処です。このトラブルが解決したのが、Apache 2.0でWebDAVの掲載後だったため、あの記事でApache 2.0をインストールして「Subversionが動かない」という方は、まずインストールされたhttpd実行ファイルについてlddコマンドを実行し、その結果を確認してみてください。
(強引に)新しいDBライブラリを参照するようにする
httpdのバイナリ中で、db-3.3.so(環境によって異なる)と記述されている部分をdb-4.0.soと修正し、新しいDBライブラリを参照するようにします。あまりお勧めできる対処方法ではありませんが、Apache 2.0を再インストールしたくない場合に有効です。ただし、この方法で修正したバイナリを使用して不具合が起きる可能性は否定できないため、あくまで急場しのぎと考えてください。
画面1に、実際にEmacsを用いた編集の様子を(libdb-3.3.soという文字列を探し出したところ)を、画面2に保存の様子を示します。
![]() |
| 画面1 「libdb-3.3.so」という文字列が見える |
![]() |
| 画面2 修正したファイルを保存 |
その結果更新されたバイナリファイルに対してlddコマンドを実行した結果を以下に示します。
$ ldd httpd |
場合によっては、httpdから実行権が落ちていることがあるため、lddがそのようなエラーを出力する場合は、
# chmod +x httpd |
としてhttpdに実行権を付加した後にlddを再実行してみてください。
■libsvn_*で参照しているDBライブラリがまちまち
httpdがDBライブラリを参照していない場合は、こちらの原因でトラブルが発生することがあります。注意しないと、システム標準のDBライブラリを参照しているものとBerkeley DB 4.0を参照しているものが混在したり、古いライブラリを参照したりと、動作不安定の原因にしかなりません。以下に動作不安定なSubversionをインストールした場合のldd libsvn_*の結果を示しますが、libdb-4.0を参照したりlibdb-3.3を参照したりとまちまちなのが分かります。
解決方法として理想的なのは、どちらの場合においても新しいDBライブラリを参照するようにすることです。
- Subversionのコンパイル時に--with-berkeley-db=[Berkeley DB
4.0.14をインストールしたディレクトリ]というオプションを付加する
- Subversionを展開したディレクトリ直下でBerkeley DB 4.0.14のアーカイブを展開し、作成されたディレクトリをdbとリネームする
- libdb-3.3.soを参照しているダイナミックリンクライブラリの内容を修正し、db-4.0.soを参照できるようにする
いずれの場合も、Subversionのconfigure時に以下のような形になることがあります。
SVN_APRUTIL_LIBS = /home/wakatono/cleaninstall/httpd-2.0.39/srclib/apr-util/libaprutil.la
-lgdbm -ldb -lexpat |
このような場合、SVN_APRUTIL_LIBSにおいてDBライブラリが-ldbとしか指定されていないため、configureの結果作成されたMakefileに対して、
SVN_APRUTIL_LIBS = /home/wakatono/cleaninstall/httpd-2.0.39/srclib/apr-util/libaprutil.la
-lgdbm -L/usr/local/BerkeleyDB.4.0/lib -ldb-4.0 -lexpat |
などとして、必ず/usr/local/BerkeleyDB.4.0/lib配下のlibdb-4.0.soを参照するように記述するという手もあります。
|
2/3
|
|
||||||
|
||||||
| Linux Square全記事インデックス |
| Linux Squareフォーラム WebDAV関連記事 |
| 特集:次世代プロトコルWebDAVの可能性[前編] 技術仕様徹底解説 将来、SambaやCVSを不要にする可能性を秘めた「WebDAV」。このプロトコルの仕様から実用化までを徹底解説。今回は、技術仕様を明らかにする |
|
| 特集:次世代プロトコルWebDAVの可能性[中編] WebDAVクライアント/サーバ環境の構築 WebDAVの実装はすでに存在する。LinuxによるWebDAVサーバの構築とクライアントの整備を行い、実際に使ってみよう |
|
| 特集:次世代プロトコルWebDAVの可能性[後編] 日本語ファイル名の利用とバージョン管理 日本語ファイル名を扱えるようにするほか、WebDAVの「V」を司るバージョン管理機能を実現。WebDAV解説完結編! |
|
| 特集:WebDAV時代のセキュリティ対策[前編] WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる |
|
| 特集:WebDAV時代のセキュリティ対策[後編] WebDAVの使用に際し、包括的な対策を行っておくのも重要である。何をどのように設定すればよいのかをここで明らかにする |
|
| 特集:Apache
2.0でWebDAV Apache 2.0の正式リリースでWebDAVも新たな段階に入った。一方で、1.3時代のmod_encodingがうまく機能しないという問題も浮上した |
|
| 特集:Subversionによるバージョン管理 DeltaVがRFCとしてリリースされ、WebDAVのバージョン管理機能も足元か固まった。DeltaVの実装である「Subversion」を導入しよう |
|
| Linux Squareフォーラム全記事インデックス |
|
TechTargetジャパン
- クライアントがアクセスできる範囲を制限する (2012/2/10)
今回は、サーバ上のファイルの扱いに関係する設定項目について解説します - 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします - エラーメッセージをどう扱うか? (2012/2/2)
今回は、スクリプト実行時にエラーが発生したことを知らせるメッセージの扱い方を説明します - ファイルのアップロードを制限する (2012/1/30)
HTTPクライアントがアップロードしてくるファイルの扱いについて解説します。そもそも受け入れる必要があるのか? ということのほかにも、いろいろ設定が必要です
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


