...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

subversionを導入する(2)

Subversionsvn+ssh で接続できた.


まず,エラーの特定のために,SSHトンネルの標準出力を画面に表示してくれる plinkw.exe を持ってきて,TortoiseSVNSSHクライアントとして設定.

そうすると, bash: svnserve: command not found というメッセージが表示された.

この例では、Subversionクライアントはローカルなssh プロセスを起動し host.example.comに接続し、ユーザ harryとして認証し、そのあとプライベートな svnserveプロセスをリモートマシン上で、ユーザ harryとして実行する、というものです。

ということは ssh 経由で接続したときに,起動した sshd に /usr/local/bin/svnserve へのパスが通っていないということか.
次の記述を見ると確かにそういうことのようだ.

$ svn ls svn+ssh://teppei@remotehost/home/teppei/SVN_DB
teppei@remotehost's password:
bash: svnserve: command not found
svn: Connection closed unexpectedly

って感じで subversion が動かないとき,ssh がよろしくない.
ssh で,リモートホストのコマンドを実行するときのパス設定は,
ログイン後のパスではなく,sshコンパイルするときに指定したパスを使う.
その証拠に,

$ ssh remotohost 'echo $PATH'
teppei@remotehost's password:
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin

となる.これが原因.新たにパスを追加するには,$HOME/.ssh/enviroment というファイルに,たとえば,

PATH=/home/teppei/linux/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin

っていう風に書いてパスを追加すればよい.
ただし,sshd の設定で environment を使えるように設定しておかないといけない.
これは,セキュリティの問題らしい.

$ svn ls svn+ssh://teppei@remotehost/home/teppei/SVN_DB/
teppei@remotehost's password:
teppei/

で,成功.これでうまくいかないときは,subversion

$ ssh remotohost 'echo $PATH'

で出てくるディレクトリにインストールすればいい.
最近の Linux では,パッケージ(RPM とかDEB)が用意されているので,それを使えばよい.

Vine の場合は, environment の設定は no になっているので,/etc/sshd/sshd_config を

#PermitUserEnvironment no
PermitUserEnvironment yes

と変更すればよい.しかし,これはセキュリティに問題があるようだ.
そこで,後者の方法を採る.うちの環境では,

ssh localhost 'echo $PATH'
/bin:/usr/bin

となったので, Subversion のインストール先 /usr/local/bin の中の関係あるものすべてにシンボリックリンクを張ってパスを通す.
一応 root になってみた.

su -
ln -s /usr/local/bin/svn* /bin

これで,TortoiseSVNsvn+ssh://user_name@host_name/usr/local/svn/repo_name/trunk からチェックアウトできた.
注意しなければならないのは, ssh 経由で接続する場合はフルパス指定でなければならないことだ.
ここでは /usr/local/svn/repo_name/trunk がそれに相当する.
svnserve を -r 付きで実行すると Subversion のルートディレクトリを設定できるのだが,ssh で接続する場合は

svnserve -d -r /usr/local/svn

としてデーモンを起動していても関係ないので,注意が必要.
パスが気に入らないなら, Subversion 用のディレクトリを /svn にでも作ればいいだろう.


また, リポジトリごとの conf/ の中にある認証設定は使われない.
その代わりに,ssh の認証に通ればよいわけである.


svn+ssh の場合, ssh が何度も何度もパスフレーズを要求してくる.
それを解決するのが Unix 系の ssh-agent だったり Windows の pagent だったりするのだった.


以上! 詰まったら参考にしてください.