我在使用 gitolite 设置 gitweb 时遇到了麻烦。Gitolite 工作正常,但 gitweb 一直报错 404 - 未找到项目。
奇怪的是,当我以以下方式以 apache 用户身份运行 cgi 脚本时,它似乎正常工作。
# su apache /var/www/git/gitweb.cgi --shell=/bin/sh
....
<tr class="dark">
<td><a class="list" href="?p=testing.git;a=summary">testing.git</a></td>
<td><a class="list" title="Test repo 3" href="?p=testing.git;a=summary">Test repo 3</a></td>
...
Gitweb 应该有读权限,我已经$REPO_UMASK = 0022;
在 gitweb.conf 中设置,并将 apache 添加到 gitolite 组# usermod -a -G gitolite apache
# ls -l gitolite/
total 8
-rw-r--r--. 1 gitolite gitolite 12 Sep 28 08:47 projects.list
drwxr-x---. 4 gitolite gitolite 4096 Sep 28 04:52 repositories
我的 apache git 配置:
Alias /git /var/www/git
<Directory /var/www/git>
Options +ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
</Directory>
有人能帮我实现这个功能吗?我试了一整天,阅读了不同的博客和帖子,但就是不行
答案1
修复了!我在 RHEL 上运行,结果发现这是 SELinux 的问题。当我禁用它时,一切都正常工作。由于我不想永久禁用它,我找到了博客上的解决方案用于编写一个模块来设置正确的策略并安装它。
我所做的是:
# mkdir gitolite-selinux; cd gitolite-selinux
# touch local.te local.if local.fc
# vim local.te
module gitolite 1.0;
require {
type git_system_t;
type httpd_t;
type var_t;
type gitosis_var_lib_t;
type httpd_git_script_t;
class dir { search read getattr open };
class file { getattr read open ioctl };
}
#============= git_system_t ==============
allow git_system_t gitosis_var_lib_t:dir { read search open getattr };
allow git_system_t gitosis_var_lib_t:file { read getattr open };
#============= httpd_git_script_t ==============
allow httpd_git_script_t gitosis_var_lib_t:dir { read search open getattr };
allow httpd_git_script_t gitosis_var_lib_t:file { read getattr open ioctl };
#============= httpd_t ==============
allow httpd_t var_t:file getattr;
# make -f /usr/share/selinux/devel/Makefile
# semodule -i gitolite.pp