Subversion 1.4.4 から 1.6.0 へのアップグレード

sshfs を使って, サーバー側のディレクトリを直接マウントして作業をする場合, サーバーとクライアント SVN のメジャーバージョンが一致していないと, とても不便なので, サーバー側をアップグレードしてみました.

subversion: Subversion 1.6 Release Notes

Subversion 1.6 is a superset of all previous Subversion releases, and is considered the current "best" release. Any feature or bugfix in 1.0.x through 1.5.x is also in 1.6, but 1.6 contains features and bugfixes not present in any earlier release.

ということなので, アップグレードしておいた方が今後も幸せになれそうです.

Subversion 1.6.1 がリリースされていますが, Ports Freeze 期間中なので, とりあえず 1.6.0 を入れます.

また, Trac も最新にしないと動かないようなので, ついでにアップグレード... と思ったのですが, かなりハマったので書いておきます.

環境は, FreeBSD 6.4-RELEASE, mod_dav_svnSubversion, mod_pythonTrac を動作させています.

neon26 を neon28 にアップグレード

/usr/ports/UPDATING を見ると,

subversion now uses neon-0.28.x (www/neon28) port, and automatic
portupgrade will fail because www/neon28 will conflict with installed
www/neon26 port.

ということなので, neon26 を neon28 にアップグレード.

$ sudo portupgrade -o www/neon28 neon26

Subversion と関連ライブラリをアップグレード

このあたりまでのやり方は, /usr/ports/UPDATING に書いてあります.

$ sudo portupgrade -o devel/subversion subversion-\*

ここまでやって apache をリスタートさせれば, Subversion 1.6.0 が問題無く動作するはず.

Trac のアップグレード

Subversion 1.6 にすると, Trac 0.11.4 にしないと動作しないようなので, 0.10.4 から 0.11.4 へアップグレード.

$ sudo portupgrade www/trac

とやれば, すんなりアップグレードできます.

下記を見て, httpd.conf に PythonInterpreter main_interpreter の行を追記します.

TracModPython – The Trac Project


   SetHandler mod_python
   PythonInterpreter main_interpreter
   PythonHandler trac.web.modpython_frontend 
   PythonOption TracEnv /var/trac/myproject
   PythonOption TracUriRoot /projects/myproject

しかし, apache をリスタートさせても, 真っ白な画面になって動きませんorz


   SetHandler mod_python
   PythonInterpreter main_interpreter
   PythonHandler mod_python.testhandler

として, /mpinfo にアクセスしても, うんともスンとも言いません.

Apache のエラーログにも何も出ませんorz

どうも, Location が全く反応しないようなので, mod_python を疑ってみます.

Python 2.4 から 2.5 へのアップグレード

いろいろ調べてみると, Python 2.5 の方が動作事例多いようなので, アップグレードしてみることに.

関連ライブラリをすべてアップグレードしなくてはならないので大変です...

SQLite もアップグレードしておきます.

$ sudo portupgrade -o lang/python25 python24-2.4.3_3 
$ sudo portupgrade -r -x python25-2.5.4_1 python25-2.5.4_1
$ sudo portupgrade -o devel/py-subversion subversion-python-1.4.3_2
$ sudo portupgrade -f py24-docutils-0.4
$ sudo portupgrade -f py24-mx-base-2.0.6
$ sudo portupgrade -f py24-setuptools-0.6c9
$ sudo portupgrade -f py24-Genshi-0.5.1_2
$ sudo portupgrade -f py24-pygments-1.0
$ sudo portupgrade -f -o py25-sqlite3-2.5.4_1 py24-pysqlite-2.3.5
$ sudo portupgrade -f py24-pytz-2009e
$ sudo portupgrade -f mod_python-3.3.1_2
$ sudo portupgrade sqlite3

最初, portupgrade -f py24-\* とやってみましたが, うまくいかなかったので一つずつやってます...

キレイに Python 2.5 の環境になったところで Apache をリスタート.

してみましたが, まだ真っ白な画面で動きません...

しかし, 今度は, Apache のエラーログが出ました.

[Sat Apr 18 22:14:26 2009] [notice] Apache/2.0.63 (FreeBSD) mod_ssl/2.0.63 OpenSSL/0.9.7e-p1 SVN/1.6.0 DAV/2 mod_python/3.3.1 Python/2.5.4 PHP/5.2.6 with Suhosin-Patch mod_fastcgi/2.4.6 configured -- resuming normal operations
Fatal error 'Recurse on a private mutex.' at line 986 in file /usr/src/lib/libpthread/thread/thr_mutex.c (errno = 0)
[Sat Apr 18 22:14:47 2009] [notice] child pid 58346 exit signal Abort trap (6)

Subversion の再インストール

どうも, thread まわりのエラーらしいのですが, 調べてみても原因よくわからず.

いろいろ悩んだあげく, ソフト/Bug Tracking/trac - discypus の下の方に sqlite-amalgamation をすると解消したとのコメントが.

こちらの環境では, Trac の画面が全く表示されないので, ちょっと現象が違うのですが...

Subverison の INSTALL にも下記のようにあるので, 再コンパイルしてみます.

13. SQLite (REQUIRED)

Subversion (starting with version 1.6) requires SQLite version
3.4.0 or above, and you can meet this dependency several ways:
* Use an SQLite amalgamation file.
* Specify an SQLite installation to use.
* Let Subversion find an installed SQLite.

To use an SQLite-provided amalgamation, just drop sqlite3.c into
Subversion's sqlite-amalgamation/ directory, or point to it with the
--with-sqlite configure option. This file also ships with the Subversion
dependencies distribution, or you can download it from SQLite:

http://www.sqlite.org/download.html

$ cd /usr/ports/devel/subversion
$ sudo make extract
$ cd work
$ sudo mkdir subversion-1.6.0/sqlite-amalgamation
$ sudo fetch http://www.sqlite.org/sqlite-amalgamation-3.6.11.tar.gz
$ sudo tar xvfz sqlite-amalgamation-3.6.11.tar.gz
$ sudo cp sqlite-3.6.11/sqlite3.c subversion-1.6.0/sqlite-amalgamation
$ cd ../
$ sudo make deinstall
$ sudo make reinstall

Apache をリスタートさせると, やっと Trac の画面が表示されました(汗)

あとは, trac-admin から Trac をアップグレードさせれば完了です.

$ sudo trac-admin /path/to/trac/project upgrade
$ sudo trac-admin /path/to/trac/project wiki upgrade
$ sudo trac-admin /path/to/trac/project resync

まとめ

根本原因が SubversionSQLite 依存関係だったのが盲点でした.

TracInstall – The Trac Project とか TracModPython – The Trac Project を見ると, Python 2.4 でも動きそうなので, Python のアップグレードは不要かもしれません.

2009-04-26 追記

svkリポジトリTrac を sync しようとしたら,

[Sun Apr 26 23:45:19 2009] [notice] child pid 87585 exit signal Abort trap (6)
Fatal error 'Recurse on a private mutex.' at line 986 in file /usr/src/lib/libpthread/thread/thr_mutex.c (errno = 2)

と, 同じようなエラーが出た. svk は気に入らないらしい. ううむ.