CentOS 6を実行しているサーバーにSVNリポジトリを設定しました。指示に従いました ここ そして物事はかなりスムーズに進んでいました。
最初のファイル構造をインポートしようとするまで
svn import /path/to/wc http://svn.Host.com/svn/repos -m "Init repo"
私に次を与えたsvn: Can't open file '/home/podsvn/svn/repos/db/txn-current-lock': Permission denied
ただし、svn import /path/to/wc file:///path/to/repository -m "Init Repo"
は素晴らしく機能します。リポジトリをリモートで操作する場合には役立ちません。
少し検索すると、それがアクセス許可の問題であることがわかりましたが、リポジトリのアクセス許可の構成は失敗しました。
これは、上記のチュートリアルに従ったデフォルトのリポジトリ権限ですが、失敗します。
-rw-rw-r-- 1 Apache apache 229 Jul 24 08:58 README.txt
drwxrwxr-x 2 Apache apache 4096 Jul 24 09:17 conf/
drwxrwsr-x 6 Apache apache 4096 Jul 24 08:58 db/
-r--r--r-- 1 Apache apache 2 Jul 24 08:58 format
drwxrwxr-x 2 Apache apache 4096 Jul 24 08:58 hooks/
drwxrwxr-x 2 Apache apache 4096 Jul 24 08:58 locks/
次に、root、Apache、およびメインユーザー(svnadmin create repos
を介してリポジトリを作成したpoduserと呼ばれる)をsvnという新しいグループに追加しましたが、(sshからログインおよびログアウトした後でも)失敗します。
-rw-rw-r-- 1 Apache svn 229 Jul 24 08:58 README.txt
drwxrwxr-x 2 Apache svn 4096 Jul 24 09:17 conf/
drwxrwsr-x 6 Apache svn 4096 Jul 24 08:58 db/
-r--r--r-- 1 Apache svn 2 Jul 24 08:58 format
drwxrwxr-x 2 Apache svn 4096 Jul 24 08:58 hooks/
drwxrwxr-x 2 Apache svn 4096 Jul 24 08:58 locks/
chmod -R g+w ./
を実行しました。 (期待するls -la
の結果があります)それでもPermissionDeniedエラーが発生します。
import
またはcheckout
を実行すると、root、Apache、またはpoduser以外のユーザーとしてリポジトリにアクセスしようとしているようです。
おそらく、リポジトリにログインしたユーザーとして機能しようとしています(チュートリアルを介して/ etc/svn-auth-confで設定します)。ただし、そこで設定したSVNユーザーは、実際のサーバー上のアカウントとは別ですよね? SVNユーザーとサーバーユーザーのマッチングについて心配する必要はありませんか?
ありがとう、
-Esa
私自身の答えを見つけました。 Derp。
そこで、Apache svnサーバーを実行しているので、svnコマンドはhttpdプロセスが実行されているユーザーとして実行されることがわかりました。
そこで、最初にps aux | egrep '(Apache|httpd)'
を実行して、これを思いつきました。
nobody 1488 0.0 0.2 99604 4960 ? S 06:02 0:00 /usr/local/Apache/bin/httpd -k start -DSSL
root 1962 0.0 0.0 4140 668 pts/0 S+ 06:28 0:00 egrep (Apache|httpd)
root 11404 0.0 0.2 99208 5188 ? Ss Jul24 0:00 /usr/local/Apache/bin/httpd -k start -DSSL
root 27766 0.0 0.1 99208 2340 ? S 00:18 0:00 /usr/local/Apache/bin/httpd -k start -DSSL
nobody 27767 0.0 0.2 99604 5184 ? S 00:18 0:00 /usr/local/Apache/bin/httpd -k start -DSSL
nobody 27768 0.0 0.2 99568 5188 ? S 00:18 0:00 /usr/local/Apache/bin/httpd -k start -DSSL
nobody 27769 0.0 0.2 99604 5196 ? S 00:18 0:00 /usr/local/Apache/bin/httpd -k start -DSSL
nobody 27770 0.0 0.2 99568 5168 ? S 00:18 0:00 /usr/local/Apache/bin/httpd -k start -DSSL
nobody 27771 0.0 0.2 99568 5184 ? S 00:18 0:00 /usr/local/Apache/bin/httpd -k start -DSSL
さて、問題があります。 Apacheプロセスは、「Apache」や「svn」などではなく「nobody」として実行されています。
これには2つの可能な解決策があります(私は1つだけ試しました)。
私がした(そしてそれがうまくいった)のは、httpd.confにアクセスして、次の行を変更することでした。
User nobody
Group nobody
に:
User Apache
Group Apache
そして、service httpd restart
そして今ではそれらの「誰もいない」プロセスのすべてがApacheによって実行されており、svn import
が機能します!
おそらく機能する別の解決策ですが、私はそれをテストしませんでした。リポジトリに移動してchgrp -R svn ./*
を実行し、リポジトリ内のすべてのファイルにsvnグループが含まれるようにしてから、ユーザーnobodyをsvnに追加します。グループ(usermod -g svn nobody
)。必要に応じて、他のユーザーをグループに追加することもできます(おそらく、Apacheではなくsvnserve
svnサーバーを実行している方が便利です)。
Apache configがnobodyとして実行されるように設定された理由がわかりません。これは、GoDaddy(実行しているサーバー)のCentOSサーバーのデフォルトのようです。