Ubuntu上的Apache&SVN – Post-commit挂钩失败,预挂钩“Permission Denied”

过去几天我一直在努力争取在我的SVN服务器(在Ubuntu 9.10上通过HTTP与Apache2运行)上工作后提交电子邮件通知。 SVN提交工作正常,但由于某种原因,钩子没有正确执行。

这里是configuration设置: – 用户通过HTTP访问repo与apache dav_svn模块(我创build用户/密码通过dav_svn.passwd文件中的htpasswd)。

dav_svn.conf:

<Location /svn/repos> DAV svn SVNPath /home/svn/repos AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user </Location> 
  • 我创build了一个post-commit钩子文件,它将一个简单的消息写入到存储库根目录中的一个文件中:

/家庭/ SVN /回购/挂钩/后提交:

 #!/bin/sh REPOS="$1" REV="$2" /bin/echo 'worked' > ${REPOS}/postcommit.log 

我将整个资源库设置为由www-data(apache用户)拥有,并为后提交脚本分配了755个权限

当我在空的环境中使用www-data用户testingpost-commit脚本时,它是有效的:

 sudo -u www-data env - /home/svn/repos/hooks/post-commit /home/svn/repos 7 

但是当我在客户端机器上提交时,提交是成功的,但后提交脚本似乎并没有被执行。

我也试着为pre-commit钩子运行一个简单的脚本,即使有一个空的pre-commit脚本,我也会得到一个错误:

“提交失败(详情如下):不能为hook'/ home / svn / repos / hooks / pre-commit'创buildnull stdout:Permission denied”

我在Google上做了一些search,发现这个错误,我认为这是apache用户(www-data)没有足够权限的问题,特别是执行/ dev / null。 我还读了post-commit之所以失败的原因是因为它没有用stdout报告。

无论如何,我也尝试给整个存储库的Apache用户(万维网数据)的所有权,并编辑的Apache虚拟主机,以允许在服务器根操作,我仍然获得权限被拒绝

/etc/apache2/sites-available/primarydomain.conf

 <Directory /> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> 

任何想法/build议将不胜感激! 谢谢

所以,在有史以来最好的主机提供商RailsPlayground的一个非常有用的系统pipe理员讨论这个问题之后,他们能够通过在/ dev / null上设置权限来解决这个问题

 crw-rw-rw- 1 root root 1, 3 

现在,所有SVN挂钩按预期工作。