17

我正在通过 OpenSUSE(非虚拟主机)中的 Apache 在我的系统中配置 gitweb。但是,我收到以下错误:404 - No projects found.

/etc/gitweb.conf

# path to git projects (<project>.git)
$projectroot = "/home/zhijian/gitweb";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link = $my_uri || "/";

# html text to include at home page
$home_text = "/gitweb/static/indextext.html";

# file with project list; by default, simply scan the projectroot dir.
$projects_list = $projectroot;

# stylesheet to use
$stylesheet = "/gitweb/static/gitweb.css";

# logo to use
$logo = "/gitweb/static/git-logo.png";

# the 'favicon'
$favicon = "/gitweb/static/git-favicon.png";

/etc/apache2/conf.d/gitweb.conf

Alias /gitweb "/home/zhijian/gitweb"

<Directory "/home/zhijian/gitweb">
    Options +Indexes +ExecCGI +FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    AddHandler cgi-script .cgi
    DirectoryIndex gitweb.cgi

</Directory>

我在 gitweb 文件夹中添加了一个软链接来链接 gitweb.cgi 和静态文件夹。Apache 错误日志显示gitweb.cgi: Can't opendir(/home/zhijian/gitweb): Permission denied,但 gitweb 文件夹的权限已设置为 755。有人知道可能导致此问题的原因吗?

4

6 回答 6

12

我在 OpenSuse 11.4 中也遇到了同样的问题。在我的情况下(我怀疑最初的发帖人就是这种情况,他也是一名 opensuse 用户),问题出在 AppArmor 上,我对此知之甚少。

以下是我注意到导致最终解决方案的一些要点:

  • 在 OpenSuse 中,安装了 git-web rpm 包,因此$projectroot默认为“ /srv/git ”文件夹
  • 如果你在这个“ /srv/git/... ”子文件夹中添加你的 git 存储库,那么一切正常
  • 如果您决定选择其他位置,例如“ /home/myname/srv/git/ ”,那么尽管按照其他帖子中的建议将所有者设置为wwwrun:www ,但它会失败。
  • 这里的问题是AppArmor,它似乎对允许应用程序执行的操作设置了更严格的政策
  • 执行“ rpm -ql git-web ”将显示一个名为:“ /etc/apparmor.d/usr.share.git-web.gitweb.cgi ”的文件
  • 用 su/sudo 打开这个文件,你可以编辑它
  • 在这里,您将看到以下几行:

...

/srv/git/ r,
/srv/git/** r,

...

  • 将这些更改为包含您的 git 存储库的父文件夹的路径,例如,如果您将它们存放在“ /home/myname/srv/git/ ”中,则使用“” /home/myname/srv/ “父文件夹,例如:

...

/home/myname/srv r,
/home/myname/srv/** r,

...

  • 保存对文件的更改
  • 我认为您还必须将此父文件夹的所有者更改为 wwwrun:www,例如“ sudo chown -R wwwrun:www srv/
  • 使用“ sudo rcapparmor restart ”重新启动 AppArmor

现在一切都应该好了:)

于 2013-08-31T03:35:09.050 回答
8

gitweb cgi 必须与您正在扫描的 repo 拥有相同的所有者。也就是说,如果你的 $projectroot 是 www-data:www-data 那么 gitweb.cgi 也必须是 www-data:www-data 。

此外,$projectroot 下的目录也必须具有相同的权限。你应该能够做一个chown -R www-data:www-data .应该有帮助的事情。您将需要查看权限以及所有权,但这比较棘手,您需要确保自己做对了并且没有打开任何安全漏洞。

于 2013-01-27T13:18:49.430 回答
3

我有同样的问题。“404 未找到项目”,但配置很好。Apache 缓存了 404 响应,并没有再次运行 cgi 脚本:

  1. 未编辑 gitweb.conf 中的配置(默认 ubuntu 安装)
  2. 我使用网络浏览器访问了 URL:得到“未找到项目”
  3. 我更新了配置
  4. 我按 ctrl-r 但又一次:“找不到项目”(尽管现在配置正确)
  5. 我按了shift-ctrl-r (Firefox),得到了正确的结果!
于 2012-05-16T09:31:42.723 回答
3

编辑您在此处找到的 gitweb 配置文件:/etc/gitweb.conf

并将以“我们的 $projectroot”开头的第 10 行更改为:

我们的 $projectroot = "/path/to/your/git/root"

然后重新启动您的网络服务器,这将告诉您您的网络服务器配置设置 GIT_PROJECT_ROOT 是否确实有效。

于 2013-03-05T23:29:18.607 回答
0

SELinux 也使存储库文件对 http 服务器不可用。如果您必须使用 SELinux,您必须更改策略。最简单的方法是禁用 SELinux ;-)

于 2015-05-20T11:23:27.693 回答
-3

将 gitweb 文件夹的权限设置为 777。它可以工作。

于 2017-07-14T06:00:39.760 回答