Subversionを設置してみた。

家サーバを落としている&OS不調で再インストール。
によって WindowTeleport のソースを取り出せないでいる…。
前から計画していた Subversion の導入を今日やってみた。
導入したソフトは

  • Subversion 1.4.5
  • Apache Portable Runtime 0.9.17
  • Apache Portable Runtime Utillity 0.9.15
  • trac 0.10.4(ja-1)
  • swig 1.3.33
  • clearsilver 0.10.5
  • pysqlite 2.3.5

の8つ。
前に会社で借りている方に入れたときは、 sqlite も入れたんだけど FreeBSD 6.1 にVersionアップしてからは標準で入ってるようなので、今回は除外。
そういや、 trac のプラグインで

  • TracAccountManager 0.1.3dev
  • TracWebAdmin 0.1.2dev

も入ってる。
1回経験してるから、すんなり行くだろうと思ったら…大間違いだった。
できるだけ新しいバージョンを利用しようとしたのも原因かもしれないけど、なかなか一筋縄ではいかないものだなと…。


【準備】

$ cd ~/
$ mkdir -p local/lib/python2.4/site-packages
$ cd local/lib
$ ln -s python2.4 python
$ export PYTHONPATH=$HOME/local/lib/python:$HOME/local/lib/python/site-packages

~/local/lib/python2.4/ 以下に今回コンパイルするpythonのライブラリ群を入れていくことにする。
PYTHONPATH(pythonのライブラリ位置を指定する環境変数)に今回作成したディレクトリパスを指定する。
PYTHONPATHは最終的に .bashrc に追記した。
【Subversion】

$ mkdir ~/local/src
$ cd ~/local/src
$ wget http://subversion.tigris.org/downloads/subversion-1.4.5.tar.gz
$ wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-0.9.17.tar.gz
$ wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-0.9.15.tar.gz
$ tar xzf subversion-1.4.5.tar.gz
$ tar xzf apr-0.9.17.tar.gz
$ tar xzf apr-util-0.9.15.tar.gz
$ mv apr-0.9.17 subversion-1.4.5/apr
$ mv apr-util-0.9.15 subversion-1.4.5/apr-util
$ cd subversion-1.4.5
$ ./configure --prefix=$HOME/local
$ make
$ make install

~/local/src/ ディレクトリにソースファイルをダウンロードしてコンパイルを行う。
Apache Portable Runtilme と Utility はSubversionの中に移動して Subversion のコンパイルを行うだけでOK。
Subversionの configure 時に設置先を $HOME/local とする。
make、make install でインストール完了。
特段エラーは出なかった。
【trac用の準備】

$ cd ~/local/src
$ wget http://www.i-act.co.jp/project/products/downloads/trac-0.10.4-ja-1.zip
$ wget http://nchc.dl.sourceforge.net/sourceforge/swig/swig-1.3.33.tar.gz
$ wget http://www.clearsilver.net/downloads/clearsilver-0.10.5.tar.gz
$ wget http://initd.org/pub/software/pysqlite/releases/2.3/2.3.5/pysqlite-2.3.5.tar.gz

trac、swig、clearsilver、pysqliteのソースをダウンロード。
【Subversionからswigのライブラリをつくる】

$ tar xzf swig-1.3.33.tar.gz
$ cd swig-1.3.33
$ ./configure --prefix=$HOME/local
$ make
$ make install
$ cd ../subversion-1.4.5
$ make swig-py
$ make install-swig-py
$ cd ~/local/lib/python/site-packages
$ ln -s $HOME/local/lib/svn-python svn-python
$ ln -s $HOME/local/lib/svn-python/svn svn
$ ln -s $HOME/local/lib/svn-python/libsvn libsvn

swigのライブラリを作り、その後にSubversionのswigライブラリを作る。
~/local/lib/python/site-packages ディレクトリに存在しないとpythonが認識してくれないらしいのでシンボリックリンクを張る。
【pysqlite】

$ cd ~/local/src
$ tar xzf pysqlite-2.3.5.tar.gz
$ cd pysqlite-2.3.5
$ cp setup.cfg setup.cfg.org
$ vi setup.cfg
$ diff setup.cfg.org setup.cfg
3,4c3,4
< include_dirs=/usr/include
< library_dirs=/usr/lib
---
> include_dirs=/usr/local/include:/home/rottarte/local/include
> library_dirs=/usr/local/lib:/home/rottarte/local//lib
$ python setup.py build
$ python setup.py install --prefix=$HOME/local

最初は、pysqlite-2.4.0を使っていたが、コンパイル・インストールは上手くいくが trac-admin initenv で

Creating and Initializing Project
Failed to create environment. database parameter must be string or APSW Connection object
Traceback (most recent call last):
File "/home/rottarte/local/lib/python2.4/site-packages/trac/scripts/admin.py", line 613, in do_initenv
options=options)
File "/home/rottarte/local/lib/python2.4/site-packages/trac/env.py", line 145, in __init__
self.create(options)
File "/home/rottarte/local/lib/python2.4/site-packages/trac/env.py", line 250, in create
DatabaseManager(self).init_db()
File "/home/rottarte/local/lib/python2.4/site-packages/trac/db/api.py", line 71, in init_db
connector.init_db(**args)
File "/home/rottarte/local/lib/python2.4/site-packages/trac/db/sqlite_backend.py", line 121, in init_db
cnx = sqlite.connect(path, timeout=int(params.get('timeout', 10000)))
ValueError: database parameter must be string or APSW Connection object
Failed to initialize environment. 1
Traceback (most recent call last):
File "~/local/lib/python2.4/site-packages/trac/scripts/admin.py", line 617, in do_initenv
sys.exit(1)
SystemExit: 1

というエラーになってしまい、pysqlite-2.3.5 にしたら上手くいったので2.3.5を使うことにした。
2.4.0で何か変わってしまったのかな…。
【clearsilver】
tracで使うテンプレートエンジン。
でも、次期バージョンのtracでは使われなくなるとか…

$ cd ~/local/src
$ tar xzf clearsilver-0.10.5.tar.gz
$ cd clearsilver-0.10.5
$ ./configure --prefix=$HOME/local --oldincludedir=$HOME/local/include --disable-apache --disable-ruby --disable-java --disable-perl --disable-csharp --disable-static
$ make
"rules.mk", line 54: Missing dependency operator
"rules.mk", line 56: Need an operator
"rules.mk", line 57: Missing dependency operator
"rules.mk", line 59: Need an operator
"rules.mk", line 105: Missing dependency operator
"rules.mk", line 107: Need an operator
"rules.mk", line 108: Missing dependency operator
"rules.mk", line 111: Need an operator
"rules.mk", line 167: Missing dependency operator
"rules.mk", line 168: Could not find Makefile.depends
"rules.mk", line 169: Need an operator
make: fatal errors encountered -- cannot continue
$ gmake clean
$ gmake
$ gmake install

make コマンドではエラーになり、gmakeでは正常にコンパイルできた。
正常にインストールが完了していれば $HOME/local/python/site-packages に neo-cgi.so がある。
【trac本体】

$ cd ~/local/src
$ unzip trac-0.10.4-ja-1.zip
$ cd trac-0.10.4-ja-1
$ python ./setup.py install --prefix=$HOME/local

上記でインストール完了。
local/share にいろいろ出来てるはず。
【リポジトリ】

$ mkdir p ~/var/svn/repos

var/svn/repos ディレクトリ以下に置いていくことにする。
今回は、家サーバのリポジトリデータがあるのでそれを展開して使う。
【trac設置】

$ mkdir ~/var/trac
$ cd ~/var/trac/
$ rm -rf WindowTeleport/
$ ~/local/bin/trac-admin WindowTeleport initenv

trac-adminの質問に答えていけばWindowTeleport用のtracが作成される。

$ mkdir -p ~/www/trac
$ cd ~/www/trac
$ vi WindowTeleport.cgi
$ chmod u+x WindowTeleport.cgi

Web上からアクセスすためのCGI作成。
WindowTeleport.cgiのソースは

#!/bin/sh
ROOT_DIR=/home/rottarte
LD_LIBRARY_PATH=$ROOT_DIR/local/lib
export LD_LIBRARY_PATH;
TRAC_ENV=$ROOT_DIR/var/trac/WindowTeleport
export TRAC_ENV
PYTHONPATH=$ROOT_DIR/local/lib/python:$ROOT_DIR/local/lib/python/site-packages
export PYTHONPATH
/usr/local/bin/python $ROOT_DIR/local/share/trac/cgi-bin/trac.cgi

となる。
(実際には、 trac/WindowTeleport.cgi にアクセスしても Not Found なのであしからず…)
【TracWebAdmin】
svn co http://svn.edgewall.com/repos/trac/sandbox/webadmin/
でのチェックアウトは出来なかったので、Windows上でチェックアウトしてからFTPでアップロード。

$ cd ~/local/src/TracWebAdmin
$ python setup.py install --prefix=$HOME/local
Installed /home/rottarte/local/lib/python2.4/site-packages/TracWebAdmin-0.1.2dev-py2.4.egg
Processing dependencies for TracWebAdmin==0.1.2dev
Finished processing dependencies for TracWebAdmin==0.1.2dev

【TracAccountManager】

$ cd ~/local/src
$ mkdir accountmanagerplugin
$ cd accountmanagerplugin/
$ wget http://trac-hacks.org/changeset/latest/accountmanagerplugin/0.10?old_path=/\&filename=accountmanagerplugin/0.10\&format=zip
$ mv  0.10\?old_path\=%2F\&filename\=accountmanagerplugin%2F0.10\&format\=zip  accountmanagerplugin.zip
$ unzip accountmanagerplugin.zip
$ cd accountmanagerplugin
$ cd 0.10
$ python setup.py --prefix=$HOME/local

階層がaccountmanagerplugin/accountmanagerplugin/ と多重になったのは、気にしないでください。
【tracにプラグインの利用設定】

$ cd ~/var/trac/WindowTeleport/conf/
$ vi trac.ini

trac.iniには以下を追記

[account-manager]
password_format = htpasswd
password_file = /home/xxxxxx/var/trac/trac.htpasswd
[components]
trac.web.auth.LoginModule = disabled
acct_mgr.* = enabled
acct_mgr.web_ui.RegistrationModule = enabled
webadmin.* = enabled

初期ユーザー登録後は、acct_mgr.web_ui.RegistrationModule = disable とする。
こんな感じでインストール完了。
あとは、var/svn/repos などは自分以外アクセス出来ないように

chmod -R go-rwx ~/var/svn/repos/

としておく。
【外部からのアクセス】
外側からは svn+ssh プロトコルを使ってアクセスする。
そのためには、あらかじめSSHnおキーファイルを作る必要がある。
また、 authorized_keys にコマンド指定すると PuTTY の PAgeant にキーを読み込ませておけばアクセスできるようになる。

$ ssh-keygen -t rsa -f $HOME/.ssh/USERNAME_id_rsa
$ cd .ssh/
$ cat USERNAME_id_rsa.pub >> authorized_keys
$ vi authorized_keys

authorized_keysファイルは以下のように変更する

ssh-rsa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= username@hostname

command="$HOME/local/bin/svnserve -t --tunnel-user=USERNAME -r $HOME/var/svn/repos",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= username@hostname

これで、今作ったキーによるアクセスでは svnserve コマンドのみが実行されるようになる。
この方法でユーザーごとにキーファイルを作ってauthorized_keysファイルに追加していけば、複数のユーザーでSubversionを使うことができる。
最初、no-X11-forwarding を no-X11-fowarding と forwarding の r を抜いて記述していて1時間くらい接続できずに悩んでいた…。
ただの誤字だったとわかったときは、なんか凹んだ。
2回目とは言え、いろいろ試しながらやったことをまとめた記事なので…もしかしたら順番的におかしい部分があるかもしれない。
また、sakura.ne.jpのレンタルサーバでこの方法で上手くいくという保証もないので、やってみる方は頑張ってください。
ネットで探すと、結構情報があるようなので…そっちの方を参考にしていただければ。

「Subversionを設置してみた。」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。