Yosemiteリリースから1年以上たったのもあり、Mac miniをYosemiteにアップグレード。
主にSVN利用のために使っていたサーバーなのですが、アップグレードしたらSVNがつながらなくなってしまいました。
最終的にはApacheを再構築するはめになったのですが、色々ややこしいこともあったので記事にしておきます。

2016/4/26 追記: SVNバックアップに使っていた「svn-backup-dumps.py」が使えなくなっていたので、使えるようにする方法を追記しました。

前提

  • OS : MacOSX Yosemite (10.10.5)
  • SVN : 1.9.1
  • Apache : 2.2

後述ですが、YosemiteにプリインストールされているApache2.4で連携しようとしたのですがどうもうまくいきませんでした。
結論から言うと、YosemiteにプリインストールされているApacheは使わず、新規インストールのApache2.2を利用することになりました。

使っていたSVNの構成

数人だけどソースコードをバージョン管理したほうがいいよね〜ということで、サーバーとして使っていたMacにプリインストールされているSVNとApacheを入れて構築していました。

  • SVN : Macにもともと入っていたsvn(バージョン忘れた)
  • Apache : Macにもともと入っているapache2(apache2.2)

それから、この構成で作ったことある人ならご存知かもしれませんが、SVNとApacheを連携されるために「mod_dav_svn.so」というApache用のモジュールを使います。

原因1 : OSアップデートでApacheが2.4にバージョンアップされ、httpd.confも初期化された

実は前にMacOSX LionからMacOSX Mavericksにアップグレードした時にも同じ失敗をしていたのですが、MacOSをアップデートすると、プリインストールされているApacheも一緒にアップデートされ、httpd.confが初期化されてしまいます。

Marvericksへのアップデートの時は、たしかhttpd.confの入っているconfフォルダに元ファイルのバックアップがあって、それをリネームするだけでうまくいったような気がするんですが、今回はhttpd.confのバックアップも見当たらずどこかに消えてしまっていました…(2.2 → 2.4にバージョンアップした所為なのかな??)

svnと連携とかしてなくて単純にApacheを動かしたい人は、httpd.confファイルを修正して、Apacheの起動をすればなおるんでしょう。
ただ、Apache2.4では文法が変わっているところがあるらしいので、もしバックアップがあったとしても書き換えが必要かもしれないので注意です。

それから、これは後から気がついたのですが、使っていたはずの「mod_dav_svn.so」ファイルもどこかに消えてしまっていたようです。

原因2 : Apache2.4ではmod_dav_svnが認識しない…??(要検証)

困ったことに、Apacheのバージョンアップによる弊害もありました。
以下の方法で作ったmod_dav_svn.soを組み込もうとしたのですがどうしてもうまく行かず…
(mod_dav_svn.soをロードできませんみたいなエラーが出ていたが、どうしたらロードできるかわかりませんでした)

「.so」ファイルの知識もなくてApacheをソースからコンパイルとかしているような人でないと難しそうだったので、Apache2.2を新規インストールしてそっちを使うという方針に変更。

SVNをMacPortsでインストールするときにオプションでmod_dav_svn.soもインストールできるし、Apacheも一緒に入るという情報を見つけたので、その方法で環境を再構築しました。

/* MacPortsを利用しmod_dav_svnオプション付きでsvnをインストール */

% sudo port install subversion +mod_dav_svn

インストールがはじまって、しばらく放置。installが完了したら、「/opt/local/」以下に新しいsvnやapacheが入っています。
この時点でMacにプリインストールのsvnとapacheと、MacPortsでインストールしたものが2個ずつ存在することになるので、混乱してました…

MacPortsでSVNをインストールすると$PATHに/opt/local/bin/が追加されるので、何もしなくてもMacPortsで入れた方が優先されるようになりました。
でもapacheは元のままなので注意。
/opt/local/apache2/の中の設定ファイル修正やmodulesの追加して、apachectlも/opt/local/apache2/bin/apachectlを使う必要があります。

apache用のsvnモジュール類は、以下の場所に出現しているはずなので、必要なやつを持っていきましょう。
mod_dontdothat.soは何につかうかわからないからいらないかも。

/* コピー元ファイル */

/opt/local/libexec/mod_authz_svn.so
/opt/local/libexec/mod_dav_svn.so
/opt/local/libexec/mod_dontdothat.so

Macプリインストールのapacheのモジュール置き場は「/usr/libexec/apache2/」の中です。上のファイルをコピーします。

/* コピー先 */

/opt/local/apache2/modules/mod_authz_svn.so
/opt/local/apache2/modules/mod_dav_svn.so
/opt/local/apache2/modules/mod_dontdothat.so

後はこれらのモジュール読み込みの設定とSVNの設定(httpd.conf)、Apacheの起動(再起動)をするだけです。

/* /opt/local/apache2/conf/httpd.conf に追記 */

# mod_dav_svn.so モジュールの読み込み
LoadModule dav_svn_module modules/mod_dav_svn.so

# SVNとの接続設定。自分の環境に合わせる
# 以下だと http://xxx.local/web みたいなURLで /var/www/svn/web リポジトリに接続できる

<Location /web>
DAV svn
SVNPath /var/www/svn/web
</Location>

今回追加したApacheを起動。

% sudo /opt/local/apache2/bin/apachectl start

追記:SVNバックアップ「svn-backup-dumps.py」を追加

SVNの定期バックアップに「svn-backup-dumps.py」を使っていたのですが、アップデート後止まっているのに気づきました。SVN標準のものではないようで、MacPortsのSVNを新しく使うように変更した時に追加しないといけなかったようです。

/* WEBリポジトリ上からsvn-backup-dumps.pyをエクスポート(取得)する。 */

svn export http://svn.apache.org/repos/asf/subversion/trunk/tools/server-side/svn-backup-dumps.py [エクスポートしたいフォルダパス]

エクスポートパスを指定しなかった場合現在のカレントフォルダにファイルがエクスポートされます。
(今回は指定していません。)
これをsvnコマンド群が入っているフォルダに移動したらコマンドが使えるようになります。

$ sudo mv svn-backup-dumps.py /opt/local/bin/

以上。

おまけ:今回他にやったことなど

  • MacPortを使うとSVNのインストールが楽らしいとのことでMacPortをインストール(xcodeも必要だったからそれもインストール)
  • 何かとsudoするからroot権限(パスワード)が必要だった(忘れていた…)
  • http.confの編集でいちいち管理者承認でパスワードを要求されたので、chmodでファイルのパーミッションを変更した(ファイルだけじゃだめで、そのファイルが入っているフォルダも管理者権限が必要だった。)
  • http.confの編集で、コピペでSVNの設定を書いたらタブやスペースやらエンコードの関係なのか、エラーが出た。(手打ちで打ち直したらうまくいった)
  • Apache2.4にmod_dav_svn.soを読み込ませようと色々調べたけど結局よくわからず。Apacheのapxsコマンドで追加モジュールのロードができそうだったけど、そのやり方が間違っていたのか、mod_dav_svn.soがApache2.4に対応していなかったのかも不明。(とりあえずmod_dav_svn.soをコピーしてきてhttpd.confでロードするだけではダメでした。)

■お世話になった参考サイト
mod_dav_svn – すがブロ
httpd.confでMacportsのApacheを設定 | kudox.jp
MacPortsでインストールしたものをスタートアップで起動する – YAMAGUCHI::weblog
Mac OS Xでlaunchdでcronのように定期実行するメモ – launchd.plistの作成とか – tweeeetyのぶろぐ的めも
Macに apache2 + svn 環境を作る – 日々是笑心