过去几天,我一直在努力让提交后的电子邮件通知在我的 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 钩子均按预期工作。