Ubuntu 上的 Apache 和 SVN - 提交后挂钩默默失败,提交前挂钩“权限被拒绝”

Ubuntu 上的 Apache 和 SVN - 提交后挂钩默默失败,提交前挂钩“权限被拒绝”

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

以下是配置设置: - 用户使用 apache dav_svn 模块通过 HTTP 访问 repo(我通过 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>
  • 我创建了一个提交后挂钩文件,它将一条简单消息写入存储库根目录中的文件:

/home/svn/repos/hooks/后提交:

#!/bin/sh

REPOS="$1"
REV="$2"

/bin/echo 'worked' > ${REPOS}/postcommit.log

我将整个存储库设置为 www-data(apache 用户)所有,并为提交后脚本分配 755 权限

当我在空环境中使用 www-data 用户测试提交后脚本时,它有效:

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

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

我还尝试运行预提交钩子的简单脚本,但即使使用空的预提交脚本也会出现错误:

“提交失败(详细信息如下):无法为钩子‘/home/svn/repos/hooks/pre-commit’创建空标准输出:权限被拒绝”

我在 Google 上搜索了几次此错误,并推测这是由于 apache 用户 (www-data) 没有足够的权限(特别是执行 /dev/null)造成的。我还了解到,post-commit 默默失败的原因是它没有通过 stdout 报告。

无论如何,我也尝试让 apache 用户 (www-data) 拥有整个存储库的所有权,并编辑 apache 虚拟主机以允许在服务器根目录上进行操作,但我仍然收到权限被拒绝的提示

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

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

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

答案1

因此,在与有史以来最好的托管服务提供商 RailsPlayground 的一位非常乐于助人的系统管理员讨论了这个问题之后,他们能够通过将 /dev/null 上的权限设置为

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

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

相关内容