FreeBSD上にリポジトリを置き、Windowsからssh+svnでアクセスするための環境構築メモ。ここに旧サーバからリポジトリを移転。
追記: 「ssh+svnでアクセスするための環境設定」としてもっときれいな方法を書き直し。
環境
- サーバ: FreeBSD 9.0
- クライアント: Windows7 64bit版 (PuTTY ごった煮版インストール済み)
リポジトリ、作業コピーともにサーバ上に置く。リポジトリへやssh+svnでアクセスし、作業コピーはsambaを使ってネットワークファイルとして参照。リポジトリをネットワークドライブ上に置くことはできないけれども、作業コピーなら問題ないため。
作業コピーをそのままWebで公開したかったので、バージョン管理しつつ作業の手間を減らす方法をいろいろ考えた末にこうなった。
Subversion 1.7.5インストール (FreeBSD)
-
portsから。
portmaster devel/subversion
TortoiseSVN 1.7.7 (Windows)
-
プロジェクトのダウンロードページから、環境に合ったものを選択してダウンロード。本体ファイルと日本語用Language Packが必要。
-
インストールパッケージ、Language Packの順でインストール。
- C:\home\.ssh\svnplink (テキストファイル) を作成し、次の行を記述。
~/.ssh/svnserve
このファイルは、リポジトリパスを変更するためにサーバ側に置くシェルスクリプトを自動起動するために必要。
-
TortoiseSVNの設定→ネットワークのSSHクライアントに、引数を付けてplinkwを登録。
"C:\Program Files\PuTTY\plinkw.exe" -m C:\home\.ssh\svnplink
うまく通信できないときには、次のように-Vオプションを追加すると不具合の理由がわかることもある。
"C:\Program Files\PuTTY\plinkw.exe" -V -m C:\home\.ssh\svnplink
- 設定→外部プログラム→差分ビューアーに次のようにRekisaを登録。
"C:\Program Files\rekisa\Rekisa.exe" -Title=%yname "%mine" -Title=%bname "%base"
トンネルの設定
- サーバ上に~/.ssh/svnserveファイルを作成し、次の行を記述。
#!/bin/tcsh svnserve -t -r /usr/local/repositories
ファイルに実行権を与えておく。
chmod 755 ~/.ssh/svnserve
~/.ssh/authorized_keys2ファイルの先頭に次の行を追加する方法もあるらしいけど、試してうまく行かなかったので別ファイル方式にした。
svnserve -t -r /var/subversion/repositories
リポジトリの移動
- 移転先のサーバにリポジトリ管理用のアカウントでログインし、リポジトリをリモートコピー。(こんな乱暴なやり方でいいのか…。)
cd /var/subversion/repositories scp -r svnadmin@oldserver.paix.jp/var/subversion/repositories/* .
- クライアント側で、作業用コピーを置いたディレクトリを選択し、TortoiseSVNから「再配置」を実行。
cf. 「参照先リポジトリの変更」(profaim)
cf. 「Subversion でリポジトリの場所が変わったら」(WebOS Goodies)
作業コピーのアップグレード
Subversion 1.6→1.7で作業コピーの形式が変更になっているため、変換する。TortoiseSVNのメニューから「作業コピーをアップグレード」でもできるけど、ネットワークファイルだからかおそろしく時間がかかる。1時間ほどかかっても終わる気配がないので、諦めてサーバ上でコマンドラインからアップグレード。
export LANG=ja_JP.UTF-8 cvs upgrade
LANGを設定するのは、日本語のファイル名を扱うときにエラーにならないようにするため。
cf. 「ネイティブのエンコーディングから ‘UTF-8’ に文字列を変換できません (Can’t convert string from native encoding to ‘UTF-8’) の対処法」 (cl.pocari.org)
Subversion 1.6からアップグレードした理由
何 も考えずにTortoiseSVNを1.7.6に上げてしまったら、TortoisePlinkがPageantの記憶したパスワードを使わず、何度も何 度もパスワード入力を要求してくるようになった。TortoiseSVN 1.7の不具合らしい。MLの記事を読む限り、そのときの最新版であった1.7.6では直っていなかった。
cf. Re: TortoisePlink not working with latest Pageant (TortoiseSVN MLより)
が、ためしにTortoiseSVN 1.7.7を入れてみたら、問題なく動作する。ChangeLogにはそれらしい不具合修正が見当たらないけれども、実際動いているので、直接関係ないように見えるどれかのバグ修正のおかげで直ったのかもしれない。