今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

BitNami RedmineのSubversionを動かそうとして超絶苦労した件

超絶苦労する前のいろいろ

 専門学校の授業でSubversionを教えようと思ったわけですよ。バージョン管理のメリットは学生のうちでも卒検とかではすごくメリットがあるだろうし。

 そこで、まず専門学校に依頼してみたのです。すると、使えるサーバーがないとかで用意ができない。

 しかたないので、クラウドにある自分のサイト(www.satoshis.com)上で、専門学校用のSubversionリポジトリを用意して、そこにアクセスさせようと思ったわけですよ。自宅パソコンからもテストして、生徒全員分のアカウントも用意して、これで完璧じゃー!と専門学校に行って接続しようとしてみたわけです。すると、なぜかエラーで接続できない。

 なにかのアクセス制限がかかってるんだろうってことで、www.satoshis.com へのアクセス制限はすべて解除してもらうよう依頼したのです。

 翌週になってアクセス制限はすべて解除したとの連絡をもらって、試してみた。すると、やっぱり接続できない。ブラウザからアクセスすると見えてるのに、EclipseやTurtoiseSvnでアクセスするとエラーになる。

 GETメソッドだけが通って、POSTやPUTがブロックされてるんじゃないかと問い合わせてみるけど、なかなか解決しない。

 しばらくしてやっと原因が判明したと連絡があった。専門学校内から外部にアクセスするときに、WevDAVがブロックされてて使えないという。WevDAVは接続先に関係なくすべてブロックしているという。つまり、学校外のSubversionやGitなんかは無理だということが判明。

(ここまでで1ヶ月以上)

 そこで、教室内の使ってないパソコンでSubversionを立ち上げとけば、朝一で登校した人が起動しとけば使えるじゃないかと。


Windows7Subversionを動かすまでの超絶苦労

 教室内のWindows7Subversionを手軽に動かすには何がいいかと調べてみたのです。結果、BitNami Redmine をインストールして、同梱の SubversionApache を連携させればいいらしい。

Redmine Cloud Hosting, Redmine Installer, Docker Container and VM

 さっそくこのサイトからWindowsインストーラをダウンロードして、教室のパソコンにインストールしてみることに。ただ、教室のパソコンは生徒が余計なことをできないように管理者権限は与えられてないし、管理者パスワードも教えてもらえない。授業の前に担任にお願いして、管理者でログインしてもらっといて、授業のちょっとした自習時間にインストールする予定で。

 あちこちのサイトで書かれてる手順で作業をちゃちゃっと進める。

  1. BitNami redmineをインストール
  2. .soファイルをコピー
  3. httpd.conf を変更
  4. システム環境変数を設定
BitNami redmineをインストール

exeファイルを実行するだけ。けっこう時間がかかる。

.soファイルをコピー

subversion/bin にある mod_dav_svn.so と mod_authz_svn.so を、apache/bin にコピー。

httpd.conf を変更

この部分のコメントアウトの#を消して活かす。

#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so

以下の2行を追加。

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

ファイルの最後にリポジトリの設定を追加。

<Location /svn>
  DAV svn
  SVNParentPath "c:/BitNami/svn"
</Location>
システム環境変数を設定

システム環境変数の PATH に、C:\BitNami\redmine-2.3.1-1\subversion\bin を追加して再起動すると管理者権限でログインできないので、コマンドプロンプト環境変数 PATH を設定してやる。

C:\BitNami\redmine-2.3.1-1> set PATH=%PATH%;C:\BitNami\redmine-2.3.1-1\subversion\bin
apache2 を再起動
C:\BitNami\redmine-2.3.1-1> net start redmineApache

エラーで起動しない。。。
ここが超絶苦労の始まりだった。

C:\BitNami\redmine-2.3.1-1> cd apache2\bin
C:\BitNami\redmine-2.3.1-1\apache2\bin> httpd -t
Syntax error on line 173 of C:/BitNami/redmine-2.3.1-1/apache2/conf/httpd.conf: Cannot load C:/BitNami/redmine-2.3.1-1/apache2/mod
ules/mod_dav_svn.so into server: The specified module could not be found.

ファイルがあるのに、なんで?
授業時間だけじゃ動かせなかったので、昼休みも使って調査したけど解決できないまま。

自宅でも調べてみたり

自宅のWindowsXPマシンで同じものをインストールして試してみたら、やはり同じエラーが出た。Google先生に聞いてみると、SubversionのDLLファイルをコピーすれば動くとかなんとか教えてくれたので、試してみたけどやっぱりダメ。

さらにGoogle先生に聞いてみたら、どうやら mod_dev_svn.so が依存してるDLLファイルを読み込めてないっぽい。

DependencyWalkerというアプリを使うと、依存してるDLLがどれなのかわかるってことなので、ダウンロードしてインストールして試してみた。

Dependency Walker (depends.exe) Home Page

すると、4つのDLLが足りないとかで、そいつらもGoogle先生から教えてもらったところからダウンロードしてコピーしてみたり。すると、さらに依存してるDLLが足りないとか言われて、さらにダウンロードしてコピーしたり。

でも、結局は動かないまま。DLLの欠落をすべて解消したのに。
これにかかりっきりではないにしても、調べて対策を繰り返すも数日間進展なし。

根本原因の発見

C:/BitNami/redmine-2.3.1-1/subversion/README.txt を改めて読んでみた。

This is Subversion for Win32, version 1.7.5. Read the CHANGES file to
see what changed in this release:

    http://svn.apache.org/repos/asf/subversion/branches/1.7.x/CHANGES

These binaries were built with:

    APR 1.4.5
    APR-util 1.3.12
    APR-ICONV 1.2.1
    Neon 0.29.6
    Berkeley DB 4.8.30
    OpenSSL 1.0.1c
    ZLib 1.2.7
    Apache 2.2.22
    Python 2.5.4 , 2.6.6 and 2.7.3 (2.5.6 and 2.6.8 is source only releases)
    Perl 5.14.2 (ActivePerl)
    libintl 0.14.1 (patched)
	Java 1.6.0_32
    Ruby 1.8.6
    Cyrus SASL 2.1.23
    serf 1.0.3
    sqlite 3.7.11.0
    SWIG 1.3.40
(以下略)

Apache 2.2.22 になってるんだけど、もしかしてこれが原因?
BitNami redmine-2.3.1-1 に同梱の apache2 は、2.4.x だった(xは忘れた)。
細かいことは気にしないで、コントロールパネルから BitNami Redmine Stack をアンインストールして再起動。

こちらから recommended ではない、BitNami redmine-1.4.7-2 をダウンロードしてインストールしてみた。
Install Redmine, Download Redmine

2つの .so ファイルのコピーと httpd.conf の変更とシステム環境変数 PATH の設定をして再起動した。

あっさり動いた。。。