BitNami RedmineのSubversionを動かそうとして超絶苦労した件
超絶苦労する前のいろいろ
専門学校の授業でSubversionを教えようと思ったわけですよ。バージョン管理のメリットは学生のうちでも卒検とかではすごくメリットがあるだろうし。
そこで、まず専門学校に依頼してみたのです。すると、使えるサーバーがないとかで用意ができない。
しかたないので、クラウドにある自分のサイト(www.satoshis.com)上で、専門学校用のSubversionのリポジトリを用意して、そこにアクセスさせようと思ったわけですよ。自宅パソコンからもテストして、生徒全員分のアカウントも用意して、これで完璧じゃー!と専門学校に行って接続しようとしてみたわけです。すると、なぜかエラーで接続できない。
なにかのアクセス制限がかかってるんだろうってことで、www.satoshis.com へのアクセス制限はすべて解除してもらうよう依頼したのです。
翌週になってアクセス制限はすべて解除したとの連絡をもらって、試してみた。すると、やっぱり接続できない。ブラウザからアクセスすると見えてるのに、EclipseやTurtoiseSvnでアクセスするとエラーになる。
GETメソッドだけが通って、POSTやPUTがブロックされてるんじゃないかと問い合わせてみるけど、なかなか解決しない。
しばらくしてやっと原因が判明したと連絡があった。専門学校内から外部にアクセスするときに、WevDAVがブロックされてて使えないという。WevDAVは接続先に関係なくすべてブロックしているという。つまり、学校外のSubversionやGitなんかは無理だということが判明。
(ここまでで1ヶ月以上)
そこで、教室内の使ってないパソコンでSubversionを立ち上げとけば、朝一で登校した人が起動しとけば使えるじゃないかと。
Windows7でSubversionを動かすまでの超絶苦労
教室内のWindows7でSubversionを手軽に動かすには何がいいかと調べてみたのです。結果、BitNami Redmine をインストールして、同梱の Subversion と Apache を連携させればいいらしい。
≫Redmine Cloud Hosting, Redmine Installer, Docker Container and VM
さっそくこのサイトからWindows用インストーラをダウンロードして、教室のパソコンにインストールしてみることに。ただ、教室のパソコンは生徒が余計なことをできないように管理者権限は与えられてないし、管理者パスワードも教えてもらえない。授業の前に担任にお願いして、管理者でログインしてもらっといて、授業のちょっとした自習時間にインストールする予定で。
あちこちのサイトで書かれてる手順で作業をちゃちゃっと進める。
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 の設定をして再起動した。
あっさり動いた。。。