質問: サーバーをメンテし再起動等やっていたら同サーバーに乗っているSVNにエラーが発生。 このサーバーで管理していたSVNが全滅しました。 コミット、アップデートができません。 また、svn://~にもアクセスできない状態です。 ### SVNエラーメッセージ ``` # svn list svn://xxx svn: E210005: Unable to connect to a repository at URL 'svn://xxx' svn: E210005: No repository found in 'svn://xxx' ``` ### 試したこと svnserveは起動しています。 Windowsファイアウォールを無効にしましたが変化はありませんでした。 SVNで管理しているファイルは問題なく表示できているため、リポジトリのアクセスだけができない状態です。 SSH接続等はできますので、コマンド等確認方法を教えていただけますと幸いです。 よろしくお願いします。 また、エラー内容は異なりますが以下のURLを参考に、 http://kazumeat.hatenablog.com/entry/20120130/1327887955 ``` svnadmin recover /var/svn/repos/xxx chown -R apache:apache /var/svn/repos/xxx ``` としましたが改善しませんでした。 ### 追記1 ``` # svn list file:///var/svn/repos/xxx ``` で直下のファイルを確認することはできました。 ### 追記2 ``` # svn list svn://xxx/var/svn/repos ``` 1.127.0.0.1 (=localhost)の場合 ``` svn: E210005: Unable to connect to a repository at URL 'svn://127.0.0.1/var/svn/repos/xxx' svn: E210005: No repository found in 'svn://127.0.0.1/var/svn/repos/xxx' ``` 2.サーバーの実IPアドレスの場合 ``` # svn list svn://IPアドレス/var/svn/repos/xxx svn: E210005: Unable to connect to a repository at URL 'svn://IPアドレス/var/svn/repos/xxx' svn: E210005: No repository found in 'svn://IPアドレス/var/svn/repos/xxx' ``` 3.サーバーのノード名の場合 ``` # svn list svn://サーバ名/var/svn/repos/xxx svn: E210005: Unable to connect to a repository at URL 'svn://サーバ名/var/svn/repos/xxx' svn: E210005: No repository found in 'svn://サーバ名/var/svn/repos/xxx' ``` ### 追記3 svn+ssh://で接続してみましたが以下の様になりました。 yesで進んだところ、毎回パスワードが求められた後に内容が確認できるようになりました。 ``` # svn list svn+ssh://IPアドレス/var/svn/repos/xxx The authenticity of host 'IPアドレス' can't be established. ECDSA key fingerprint is 03:2b:2d:b5:ac:d9:71:64:f8:9b:4c:c0:1e:0f:f5:71. Are you sure you want to continue connecting (yes/no)? ``` しかし実際使用していたURL(svn://IPアドレス/xxx)では追記2と同様のエラーでした。 ### 追記4 svn+ssh://IPアドレス/xxxをブラウザからアクセスした結果、複数回ログインを求められた後以下のエラーが表示されました。 Unable to connect to a repository at URL 'svn+ssh://IPアドレス/xxx' No repository found in 'svn+ssh://IPアドレス/xxx' svn+ssh://IPアドレス/var/svn/repos/xxxでアクセスした結果、3回ログインを求められた後リポジトリブラウザのURL欄にURLが挿入され、その後3回?程度ログインを求められた後ファイルが表示されましたため、アクセスが可能のようです。 しかし階層を移動するとまた複数回ログインを求められ、拒否したら以下のエラーが表示されました。 Unable to connect to a repository at URL 'svn+ssh://~' To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnnels]section of your Subversion configration file.
回答: リポジトリにアクセスできないのであれば、焦ってしまうのも無理からぬ事ですが、問題をきちんと切り分けないうちにいろいろと変更を加えてしまうと取り返しが付かなくなってしまうので、まずは落ち着いてください! SSH接続可能なのであれば、まずはサーバーへSSHでログインして頂いて、下記コマンドを実行してみてください。 ``` svn list file:///var/svn/repos ``` これでリポジトリルート直下の資産一覧が取得できれば、少なくともSubversionのリポジトリ自体は生きています。 結果によって対応法方が違ってきますので、まずはご確認ください。 《追記1》 svnserve自体は起動しているとの事でしたが、SSHでサーバーへログインした状態で下記コマンドを実行するとどうですか? ``` svn list svn://xxx/var/svn/repos ``` ただしxxxはサーバーのノード名もしくはIPアドレスを意味しています。 1. 127.0.0.1 (=localhost)の場合 2. サーバーの実IPアドレスの場合 3. サーバーのノード名の場合 で違いがありますか? 《追記2》 サーバーにSSHがインストールされているところをみると、元々「SSH経由」でアクセスされていたのではありませんか?? つまり `svn://~` ではなくて `svn+ssh://~` だとつながりませんか? 《追記3》 追記3の内容からするとSubversionには問題ないようですね。 毎回パスワードを聞かれるのはSSHエージェントを起動していないからであって正常な結果です。 ところで、実際に使用していたURL(svn://~)ではつながらないというのは、(以前はどうだったか分かりませんが)現在はSSH経由でないとつながらないからです。 `svn+ssh://IPアドレス/~` ではつながるのですよね? サーバー外、例えばPCからもつながりますか? 《結論》 これまでのやりとりから(一部推測も混ざりますが)、おそらくこういうことだと思います。 従来はSSH接続によらず `svn://〜` でアクセスしていたが、サーバーのメンテナンス/再起動によってSSH接続する設定になってしまったために、従来のURLではアクセスできなくなってしまった。 しかし、今時、暗号化セずにサーバーへアクセスするのはよろしくないので、SSH接続方式(svn+ssh://〜)でアクセスするのが良いです。 階層を移動する度にパスワード入力を求められるのは、パスワード認証方式になっているからです。 「SSH鍵認証」方式に変更し、SSHエージェントを常駐させてパスフレーズの入力を毎回求められないようにすることを強くおすすめいたします。 ちなみに、ご使用のPCのOSはWindowsでしょうか? そうであれば、`Putty` というSSHクライアントソフトをインストールし、`Pageant` というエージェントソフトを利用されると良いと思います。 この場で詳細をすべてご説明するのは困難なので、参考情報をご連携して終わります。 公開鍵認証によるSSH接続 - PuTTYの使い方 以上、ご参考になれば幸いです。