重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

クライアントからコミットした際に、post-commitで、svnでチェックアウトしている/var/www/sampleprojectディレクトリを"svn up"コマンドで更新をしたいと思っております。
しかし、tortoiseSVNからコミットすると、以下のエラーが表示されてしまいます。

<pre>
エラー: post-commitフックが失敗しました (終了コード: 1)。出力:
エラー: svn: ファイル '/var/www/sampleproject/.svn/lock' を開けません: 許可がありません
</pre>

post-commitの内容:
<pre>
#!/bin/bash

REPOS="$1"
REV="$2"LOG=/var/log/svn.log
export LANG=ja_JP.UTF-8

echo $2 > ${LOG}
whoami >> ${LOG}
/usr/bin/svn up /var/www/enjoynight >> ${LOG}
</pre>

post-commitで出力したログを確認してみると、"svn up"を実行しているユーザーは"user1"でした。
/var/www/sampleprojectのオーナーはapacheユーザー(apache.apache)です。
ためしに、"user1"にapacheグループ権限を追加してみましたが、結果は変わりませんでした。

一日中悩んでも解決出来ませんでした。
もしよろしければ、どなたか解決策をご教授頂けないでしょうか。


サーバーOS:CentOS5.3
Subversion:1.6.2
Apache:2.2.3
passenger:2.2.3
Ruby:1.8.7
Rails:2.3.2

クライアントOS:Windows Vista
tortoiseSVN:1.6.5
リポジトリへの接続方法:svn+ssh
コミットユーザー:user1

A 回答 (4件)

>## 公開ディレクトリに.svnも入ってしまうので、svn updateよりは、面倒でもsvn exportにすべき…と思いますが。



とか書いたら…タイムリーにスラッシュドットに…
http://slashdot.jp/security/article.pl?sid=09/09 …

コレだと、cgiもソースファイルとか抜かれるかも知れない…ですな。
    • good
    • 0

>オーナー:apache.apache


>パーミッション:全て755

「グループに対して書き込み禁止」ですよね?
でしたらやはりパーミッションエラーかと。
user1はapacheグループに属していて、しかしグループに対する書き込み権限はありません。
よって、
/var/www/sampleproject/.svn
ディレクトリ内にファイルの作成などはできませんのでlockファイルの作成もできません。

/var/www/sampleproject/.svnディレクトリを775にすると、
lockファイルなどの作成は可能でしょうが、今度は
/var/www/sampleproject
のsvn updateでファイルの書き込みができません。

/var/www/sampleproject以下の既存ファイルと既存ディレクトリにグループの書き込み権限を設定…で対処できるとは思いますが。
# と、No.2の回答で書いたのですが…。


[root@localhost tmp]# ls -al /var/www/enjoynight
合計 32
drwxrwxr-x 3 apache apache 4096 9月 23 23:35 .
drwxr-xr-x 13 root  root  4096 9月 23 23:22 ..
drwxrwxr-x 6 apache apache 4096 9月 23 23:35 .svn
-rw-rw-r-- 1 svn  svn   20 9月 23 23:35 test.html
[root@localhost tmp]#

svn+sshではなかったので…svnserveを動作しているユーザー&グループでファイル作成されていました。
# checkoutした時はファイル無かったもので…。
## 公開ディレクトリに.svnも入ってしまうので、svn updateよりは、面倒でもsvn exportにすべき…と思いますが。
## 削除ファイルを考えると、一度全削除してからexportの方がよいかも。
    • good
    • 0

パーミッションの問題…のようですね。



ls -la /var/www/sampleproject
とした場合、どう表示されるでしょうか?

とりあえず、最初からやり直すとすると……
・apacheグループにuser1を追加する。
・rootユーザでumask 0002を実行してからsvnからチェックアウトを実行する。
 http://www.stackasterisk.jp/tech/engineer/permis …
・チェックアウト後にオーナーを変更する。
 chown -R apache:apache /var/www/sampleproject
で回避できませんかね?

先のlsコマンドでグループに書き込み権限付いていれば、オーナーの変更だけで済むかも知れませんが。
chmodの再帰的変更、ファイルとディレクトリでパーミッションを替えるのは面倒…だったかな。
chmod -R g+w /var/www/sampleproject
でいけるか……

この回答への補足

回答ありがとうございます。

>ls -la /var/​www/sampleproject
試験的にに以下の状態にしていますが、改善されません。
オーナー:apache.apache
パーミッション:全て755

>・apacheグループにuser1を追加する。
apacheグループにuser1を追加してみましたが、同様の結果となりました。

どうも、svn up コマンド時に.svn/lockファイルを生成しているようなのですが、そのファイルに対してアクセス出来ないようです。

パーミッションエラー後に".svn/lock"ファイルを確認しようと試みても、既に削除されてしまっているため、".svn/lock"がどのオーナーで作成されているか不明です。

補足日時:2009/09/22 18:01
    • good
    • 0

sshなどで接続して、ターミナルから


/usr/bin/svn up /var/​www/enjoynight
を実行した場合は成功するのでしょうか?

またターミナルで実行した場合とフックスクリプトで実行した場合の環境変数の違い…とか。

/var/www配下ということなので…SELinuxで制限されていたりしませんか?

この回答への補足

回答ありがとうございます。
# プロジェクト名を置換するのを忘れていました。
# enjoynight → sampleprojectとします。

・ターミナルから/usr/bin/svn up /var/www/sampleprojectを行った場合
⇒ root以外は失敗する。

・ターミナルからpost-commitを直接たたいた場合。
⇒ root以外は失敗する。

SELinuxは無効にしてあります。

パーミッションエラーのようですが、
.svn/lockをどのLinuxユーザーが実行しているのかさえわからずです。

補足日時:2009/09/19 01:22
    • good
    • 0

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