dポイントプレゼントキャンペーン実施中!

Subversionで
「svn: リポジトリは恒久的に 'http://localhost/svn/4514/' へ移動しました。relocate (参照 URL の変更) を実行してください」
というエラーが発生します。

OSはUbuntu 11.10です。LAMPP(XAMPP)を使っています。
Subversion自体は正常にインストールできたようです。
Subversion自体は/home/username/svnの下ではちゃんとaddとcommitが動きました。
設定には↓のサイトを参考にしました。
http://blog.riywo.com/2008/04/01/054421

ただ、それをhttp://localhost/svn/4514/の下でブラウザから動かしたいんです。

/opt/lampp/etc/httpd.confには
DocumentRoot "/opt/lampp/htdocs"
としてあります。ですから、/opt/lampp/htdocsがlocalhostです。

/opt/lampp/htdocs/svn/
というディレクトリを作成し、その下で

sudo svnadmin create 4514
sudo chown -R www-data.www-data 4514/
sudo chmod 777 4514/

を実行しました。
http://localhost/svn/4514/にはブラウザから問題なくアクセスでき、ファイルの内容を見ることができます。

sudo vim /etc/apache2/mods-enabled/dav_svn.conf
で以下のように編集しました:

<location /svn>
DAV svn
# SVNParentPath "/home/username/svn" ←これがadd/commitが動いたディレクトリです
SVNParentPath "/opt/lampp/htdocs/svn"
# SVNParentPath "/opt/lampp/htdocs/svnrepository"
</location>

/home/username/sagyou/source
の下には"Hello World!"と書かれたfirst.txtというファイルが作ってあります。

これで
svn import ~/sagyou/source http://localhost/svn/4514/ -m "first import"
と実行すれば、/4514の下に~/sagyou/source/first.txtがコピーされるはずなんですが、
「svn: リポジトリは恒久的に 'http://localhost/svn/4514/' へ移動しました。relocate (参照 URL の変更) を実行してください」
というエラーが発生します。

このエラーに関するサイトを10個は読んだのですが、まったく意味が分かりません(具体的な例が分かりません)。特に↓ここです:
http://www.hinet.mydns.jp/tdiary/?date=20050317# …

SVNParentPath "/opt/lampp/htdocs/svnrepository"に変えてみても同じです。
ちなみに、DocumentRootは変えたくありません、既にその下にPHPのファイルなどを入れているからです。
もう昨日からずっとやっているのに解決できません。でも、あと一歩のような気がします。必要であれば補足します。試してほしい操作があればやります。どんな小さなヒントでもいいので、どうかお助けください。お願いします。

A 回答 (6件)

>まず、コピーしないといけなかったんですね(参考にしたサイトには書いてありませんでした)。



パッケージでインストールしたものをそのまま使用している場合は…
特に明記はしないでしょうね。
規定された場所にファイルが配置されますから。

>/opt/lampp/logs/error_logには
>[Sun Dec 11 21:57:57 2011] [error] [client 127.0.0.1] File does not exist: /opt/lampp/htdocs/svn
>とだけ書かれ、

mod_dav_svnがアクセスしていなかった為…でしょう。
モジュールはコピーされたようなので、lamppを再起動で動いてくれる…かと思われます。
# apacheのバージョン不整合とかでコピーしたモジュールがコケなければ…ですが。

>sudo apt-get install subversion subversion-tool libapache2-svn
>をそのまま実行しました。何もエラーは出ませんでした。

Ubuntuのパッケージを使用…ということですね。
relocateがコマンドかのように受け取れたので、1.7.xかと勘違いしました。
# 1.6.xだとsvn switch --relocate のようでしたので。

>httpやsvnというのは設定しないといけないんですね。

勿論、設定が必要です。
使用するプロトコルなどで設定方法は異なることになりますが……。

>svnserveが一番簡単で自分のニーズに合っているようなので
>これで設定してみます。

apacheのことを考慮しなくて済むので簡単と言えば簡単です。
# 私自身がSubversionサーバを構築する時もこちらを選択してます。
が…OS起動時に自動起動するように設定するのが、Debian系では少々手間かもしれません。
# Redhat系だと、起動用のスクリプトがパッケージに入っているんですが…
「svnserve Ubuntu 起動スクリプト」辺りで検索すると、公開(?)している人が居るでしょう。
xinetd経由でのアクセスでしたら「svnserve Ubuntu xinetd」辺りで検索を。
# ウチのサーバは前回書いた通りxinetd経由にしています。

http://www.amazon.co.jp/dp/4798013730
http://www.amazon.co.jp/dp/4774142468
http://www.amazon.co.jp/dp/4873114144
等の書籍に、サーバ構築について載っていた…かと。
バージョンなどについて微妙に古かったり…とかあったりしますが……
まぁ、構築関係ではそれほど変わらないので大丈夫でしょう。
    • good
    • 0

>Object not found!


>要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。

mod_dav_svn.soとmod_authz_svn.soは正常に読み込まれていますか?
apacheのログにはなにかエラーとか記録されていませんか?
# ちなみに…私のリポジトリだとapacheからのアクセス権設定していないのでダメだった…かも知れず。
Subversionは独自ビルド(1.7.xをソースからビルド)っぽいですが、必要なモジュールをちゃんとコピーできていますか?
# ディストリビューションのパッケージ使わない場合は、ここらへんは「全て自分で面倒をみる」必要がありますが。

>※他にも
>http://localhost/svn/4514/

URLはこちらになる…ハズです。
ので、こちらでアクセスしたときのapacheのログを確認して下さい。

>svn info svn://localhost/
>svn: ホスト 'localhost' に接続できません: 接続を拒否されました
>svn info svn://localhost/svn/
>svn: ホスト 'localhost' に接続できません: 接続を拒否されました

SVNプロトコルでアクセスできるようにしていなければ反応しないのは当たり前です。
現状では未設定でしょう?
HTTPプロトコルではなく、SVNプロトコルでやっていく…というのであれば、設定することになるかと思われますが。
# なお、外部ネットワークからアクセスするならそれなりの設定が必要になります。
# HTTPでもそれなりの設定は必要でしょうが、検索で簡単に見つかるでしょうしねぇ。
    • good
    • 0
この回答へのお礼

毎度ありがとうございます。

> mod_dav_svn.soとmod_authz_svn.soは正常に読み込まれていますか?

読み込まれていなかったようです。
まず、コピーしないといけなかったんですね(参考にしたサイトには書いてありませんでした)。

cd /usr/lib/apache2/modules
sudo cp -p mod_dav_svn.so /opt/lampp/modules/
sudo cp -p mod_aut /opt/lampp/modules/

/opt/lampp/etc/httpd.conf
--------------------------------------------------
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
--------------------------------------------------
↑こういう行はなかったので、自分で追加書き込みしました。

> apacheのログにはなにかエラーとか記録されていませんか?

ブラウザで
http://localhost/svn/4514/
にアクセスしたとき、/opt/lampp/logs/error_logには
[Sun Dec 11 21:57:57 2011] [error] [client 127.0.0.1] File does not exist: /opt/lampp/htdocs/svn
とだけ書かれ、
/opt/lampp/logs/access_logには
127.0.0.1 - - [11/Dec/2011:21:57:57 +0900] "GET /svn/4514/ HTTP/1.1" 404 1261
とだけ書かれます。

> Subversionは独自ビルド(1.7.xをソースからビルド)っぽいですが、必要なモジュールをちゃんとコピーできていますか?

インストールは
http://blog.riywo.com/2008/04/01/054421に書かれている
sudo apt-get install subversion subversion-tool libapache2-svn
をそのまま実行しました。何もエラーは出ませんでした。
それ以上のことは自分には分かりません。
/home/username/svn/testの直下ではsvnは正常に動きましたので、
その程度までは間違っていないはずです。

ここまでで何か間違いやお気付きの点などはありますか?

今やっと気付いたんですけど、httpやsvnというのは設定しないといけないんですね。
http://blog.riywo.com/2008/04/01/054421
の最後の「インターネット経由でバージョン管理」には
簡単に設定できるように書いていたので信じ込んでいました。
http://svnbook.red-bean.com/nightly/en/svn.serve …
を読むと、svnserveが一番簡単で自分のニーズに合っているようなので
これで設定してみます。ただ、少し時間が掛かります。しばらくお待ちください。m(__)m

お礼日時:2011/12/11 21:58

>残念ながら、そのような「test - Revision 0: -」というのは見えません。

その代わりに(そのconfディレクトリだとかformatファイルとかの)ファイルやディレクトリが見えます:

ソレはSVN使わずにapacheがディレクトリを表示しているだけです。
よって、Subversionでアクセスすることはできません。=Subversionのリポジトリとして使えていません。
# SubversionのHTTPプロトコルで必要とするレスポンスヘッダなどがありません。

>例えば、localhostの直下にindex.htmlを置いておきますと、ブラウザでlocalhostにアクセスしたときに(他にどんなファイルが置いてあろうと)自動的にindex.htmlが実行されますよね?

index.tmlかどうか…はWebサーバの設定によりますが…。
設定によっては、今回のようにファイルやディレクトリが見える。
という状態になります。
# 公開サーバならセキュリティ的にダメダメな設定…ということになりますが。
# パスワードファイルとかアクセスできたら、セキュリティとしてどうか?ということになりますわな。

>では、今回のように/svn/4514/の直下ではどんなファイルが自動的に実行されるのでしょうか?

ファイルやディレクトリが見えます。
が…期待する動作(HTTPプロトコルでのリポジトリアクセス)では、そのようには見えません。
mod_dav_svnがリポジトリにアクセスしてHTTPプロトコルで必要なデータを返します。
それが「Revision 0:」とか「Powered by Subversion」等の表示になります。
今回は設定の問題から「mod_dav_svnがリポジトリにアクセスして『いません』」。
よってディレクトリとか見えています。
# mod_dav_svnが介在していないのですから、apacheが「index.htmlなどの無いディレクトリにアクセスした場合」の動作によりリストが見えています。


対処方法については…回答No.2で掲示したつもりですが…試していないということでしょうか?
「mod_dav_svnがアクセスするから、リポジトリのディレクトリをDocumentRoot配下に置いちゃダメよ。」ってのが回答No.2のリンク先に書かれていること…かと。
# 実際にはちょっと違いますけどね… が、リポジトリのディレクトリをそのように見させる意味がありませんので…。
# 後述の私みたいなディレクトリ構成で…パスワードファイル持って行かれたらリポジトリを勝手にいじり回せますし。
# リポジトリに登録してあるファイルを削除されたり、ソース書き換えてバックドア仕掛けるコードに改変してみたり、システムドライブをフォーマットするコードを追加してみたり…

ウチの自宅サーバのリポジトリは…HTTPプロトコルは使っていないので、apacheには設定していませんが…
設定する場合は下記のようになりますかね。(CentOS5.7+標準パッケージのapache+独自ビルドのSubversion 1.6.17)

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
 DAV svn
 SVNParentPath /var/svn/repo
 AuthType Basic
 AuthUserFile /var/svn/repo/passwd
 Require valid-user
</Location>

記述の通り、リポジトリは/var/svn/reopディレクトリの下にあります。
# DocumentRootは/var/www/html
[root@localhost ~]# ls -lh /var/svn/repo/
合計 112K
drwxr-xr-x 3 svn svn 4.0K 7月 7 2010 Arduino
drwxr-xr-x 6 svn svn 4.0K 12月 5 2008 *******Check
-rw-r--r-- 1 svn svn 229 8月 16 2008 README.txt
drwxr-xr-x 6 svn svn 4.0K 8月 16 2008 *****Plugins
drwxr-xr-x 5 svn svn 4.0K 3月 17 2010 WindowsMobile
drwxr-xr-x 2 svn svn 4.0K 8月 16 2008 conf
drwxrwsr-x 6 svn svn 4.0K 8月 16 2008 db
-r--r--r-- 1 svn svn 2 8月 16 2008 format
drwxr-xr-x 2 svn svn 4.0K 8月 16 2008 hooks
drwxr-xr-x 2 svn svn 4.0K 8月 16 2008 locks
-rw-r--r-- 1 svn svn 331 8月 16 2008 passwd
drwxr-xr-x 6 svn svn 4.0K 8月 17 2008 test
drwxrwxr-x 6 svn svn 4.0K 9月 13 2008 tractest
drwxr-xr-x 6 svn svn 4.0K 8月 16 2008 webpages
[root@localhost ~]#
# 一部ディレクトリはマスクしてみたり。
/var/svn/repoもリポジトリとして初期化(ただし未使用)しているので、README.txtやconf、db、format、hook、lockなどがあったりします。
http://localhost/svn/
でアクセスすると、このリポジトリが見える……かなぁ?
svn://localhost/ した時の対策用でもあります。
# xinetdで、-i -r /var/svn/repoしています。
まぁ、/var/sv/repoをリポジトリとしておく必要は全くありません。(上記のようなアクセスされたところでエラーになるだけ)
ちなみにpasswdはリポジトリにアクセスする際のパスワードファイル。
testリポジトリとtractestリポジトリは…テスト用に作成して放置されてます。
WindowsMobileとか一部のものはさらに下にディレクトリ掘ってリポジトリになっていたりします。

[user@localhost ~]$ svn info svn://localhost/
パス: localhost
URL: svn://localhost
リポジトリのルート: svn://localhost
リポジトリ UUID: 7f484af5-bac0-4fbc-a8fd-05759f217137
リビジョン: 0
ノード種別: ディレクトリ
最終変更リビジョン: 0
最終変更日時: 2008-08-16 08:31:40 +0900 (土, 16 8月 2008)

[user@localhost ~]$ svn info svn://localhost/*****Plugins
パス: *****Plugins
URL: svn://localhost/*****Plugins
リポジトリのルート: svn://localhost/*****Plugins
リポジトリ UUID: 01fa27c9-b72b-0410-9b9b-bdb7994653d0
リビジョン: 84
ノード種別: ディレクトリ
最終変更者: user
最終変更リビジョン: 84
最終変更日時: 2010-12-03 22:49:20 +0900 (金, 03 12月 2010)

[user@localhost ~]$
こんな感じになります。
HTTPプロトコルだと…
svn info http://localhost/svn
svn info http://localhost/svn/*****Plugins
と変わることになりますな。

この回答への補足

コピーし忘れましたが、一番最初に
mv /opt/lampp/htdocs/svn /opt/lampp/
してあります。よって
/opt/lampp/svn
になっています。
svnはもうhtdocsの直下ではありません。

補足日時:2011/12/11 15:35
    • good
    • 0
この回答へのお礼

ありがとうございます!

No.2の回答を試してみました(漏れがあったとのことでしたので試していませんでした、すみません)。

sudo vim /etc/apache2/mods-enabled/dav_svn.conf
--------------------------------------------------
<location /svn>
DAV svn
# SVNParentPath "/home/tommy/svn"
# SVNParentPath "/opt/lampp/htdocs/svn"
SVNParentPath "/opt/lampp/svn"
</location>
--------------------------------------------------

LAMPP再起動
sudo ./lampp restart

ブラウザ
http://localhost/svn/
--------------------------------------------------
Object not found!

要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。

サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。
Error 404
localhost
2011a1´12a??11a?\ 14a??56a?†36c§’
Apache/2.2.17 (Unix) DAV/2 mod_ssl/2.2.17 OpenSSL/1.0.0c PHP/5.3.5 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
--------------------------------------------------
※他にも
http://localhost/svn/4514/
http://localhost/4514/
を試しましたが同じです。


では、このままDocumentRootを"/opt/lampp/svn"にしたらどうなるのか気になり、試してみましたが、
http://localhost/
--------------------------------------------------
Access forbidden!

要求されたディレクトリへのアクセス権限がありません。 インデックスドキュメントが存在しないか、 ディレクトリの読み込みが許可されていません。

サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。
Error 403
localhost
2011a1´12a??11a?\ 15a??04a?†38c§’
Apache/2.2.17 (Unix) DAV/2 mod_ssl/2.2.17 OpenSSL/1.0.0c PHP/5.3.5 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
--------------------------------------------------
・・・もっと悪くなりましたので、これは今、元に戻しました。


これも一応やってみました:
svn info svn://localhost/
svn: ホスト 'localhost' に接続できません: 接続を拒否されました
svn info svn://localhost/svn/
svn: ホスト 'localhost' に接続できません: 接続を拒否されました

・・・取り急ぎ、ここまでを報告しておきます。
引き続き、調べてみます。

お礼日時:2011/12/11 15:20

びみょ~に確認漏れていました…



>http://localhost/svn/4514/にはブラウザから問題なくアクセスでき、ファイルの内容を見ることができます。

ではどんなファイルが見えるんでしょう?

バージョンは違いますがWebブラウザで見ると、
http://www.gside.org/Gentoo/subversion/subversio …
http://yuu.nkjm.info/diary/20111130.html の「ブラウザによるアクセス」
http://system.jobweb.jp/?p=742 での「Subversionにtestプロジェクトを追加」
http://www.adobe.com/jp/devnet/dreamweaver/artic … の図11
みたいな感じで、ファイルやディレクトリが直接みれることはない…ハズです。
# confディレクトリだとかformatファイルとか…そういうのは見えません。
    • good
    • 0
この回答へのお礼

誰もが投げ出すようなこんな質問に答えてくださってありがとうございます。m(__)m

残念ながら、そのような「test - Revision 0: -」というのは見えません。その代わりに(そのconfディレクトリだとかformatファイルとかの)ファイルやディレクトリが見えます:

http://localhost/svn/4514/
--------------------------------------------------
Index of /svn/4514

Icon Name Last modified Size Description[DIR] Parent Directory -
[DIR] conf/ 06-12a??-2011 22:04 -
[DIR] db/ 06-12a??-2011 22:04 -
[ ] format 06-12a??-2011 22:04 2
[DIR] hooks/ 06-12a??-2011 22:04 -
[DIR] locks/ 06-12a??-2011 22:04 -

Apache/2.2.17 (Unix) DAV/2 mod_ssl/2.2.17 OpenSSL/1.0.0c PHP/5.3.5 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 Server at localhost Port 80
--------------------------------------------------

これらが「直接見える」というのはどういう意味でしょう…?例えば、localhostの直下にindex.htmlを置いておきますと、ブラウザでlocalhostにアクセスしたときに(他にどんなファイルが置いてあろうと)自動的にindex.htmlが実行されますよね?では、今回のように/svn/4514/の直下ではどんなファイルが自動的に実行されるのでしょうか?

悪あがきですが、
sudo chmod 777 4514/
だけではなく、その上の
sudo chmod 777 svn/
もやっておきました(それでも、やはり何も変化はありません)。

気になるのが、教えていただいた三番目のサイト
http://system.jobweb.jp/?p=742
です。あたかも、たった五つの操作(!)でブラウザからsvnにアクセスできるようになっているようです。httpd.confや/etc/apache2/mods-enabled/dav_svn.confすらも編集していないようです。しかも/homeの下に/svn/testを作ってアクセスできています…。localhostの設定は一体どうなっているのでしょう…?

ここまでの情報で何かヒントになりそうでしょうか?何か試せそうな操作がありましたらお気軽にお知らせください。それまでにこちらでも自分なりに調べてみます。

お礼日時:2011/12/11 10:19

どういう手順をやったのか…ちょっと不明なんですが……



http://d.hatena.ne.jp/eth0jp/20091120/1258720828
では『言うなれば「Apache経由でアクセスした場合に、SVNの設定をしている場合としていない場合の両パターンで同じディレクトリが見えてちゃだめ」。』という記述が。

>DocumentRoot "/opt/lampp/htdocs"
であれば、
><location /svn>
>SVNParentPath "/opt/lampp/htdocs/svn"
></location>
が『無くても』http://localhost/svn でアクセスされるのは/opt/lampp/htdocs/svnですよね?

mv /opt/lampp/htdocs/svn /opt/lampp/
でhtdocsの下から出して、
SVNParentPath "/opt/lampp/svn"
としたらどうなりますか?

# とか書いている裏で状況確認しようとVMWareでubuntu 11.10 jaインストール中ですが…
# そのあと、どう環境構築したのかよくわからんのですが…。
# 普段はRedhat系列ですしねぇ…。
    • good
    • 0

DocumentRoot /home/svn→DocumentRoot /home/svn_htdocに変更(<DocumentRootは変えたくありません>)



参考URL:http://d.hatena.ne.jp/taka512/20100130/1264845296
    • good
    • 0
この回答へのお礼

ありがとうございます。
しかし、意味が分かりかねます。

そのサイトは既にチェックしてありました。
しかし、質問の中に書いたとおり、DocumentRootは/opt/lampp/htdocsと決めております。
今、仮にDocumentRootを/opt/lampp/svn_htcosにしてみましたが、Syntax Errorでapacheが起動しなくなりました。もちろんです、そんなディレクトリは無いのですから。
次に、/opt/lampp/svnに設定してみました。
Syntax Errorは吐かないものの、やはりapacheが起動しません。

それと、私の場合、元々「DocumentRoot 」と「SVNParentPath」は同じではありません。

"/opt/lampp/htdocs"≠"/opt/lampp/htdocs/svn"

そのサイトは「それらが違っていれば動く」と書いてあるのではないでしょうか?それで動かないのは何故ですか?
本当に困っているんです。もう少し詳細を教えていただけませんか?お願いします。

お礼日時:2011/12/08 18:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!