我在 OpenSUSE Tumbleweed 上设置 git instaweb 时遇到问题。
我确实安装了
git-web
和lighttpd
。
当我在 git 项目的根目录中执行
git instaweb
时,浏览器会在显示 No such projects found
的页面中打开。
我尝试将项目根目录放入
/srv/git
,但也没有成功。
这应该像在项目根目录中执行这些命令一样简单:
git instaweb
和
git instaweb --stop
为了解决这个问题,我注意到命令
git instaweb
在.git
下创建了一个名为gitweb
的文件夹。在此文件夹中,我们可以找到 lighttpd
的配置文件,称为 lighttpd.conf
,以及 gitweb.cgi
的另一个配置文件,称为 gitweb_config.perl
。
假设您位于项目的根目录中,可以像这样“手动”运行
lighttpd
:
lighttpd -D -f .git/gitweb/lighttpd.conf
-f
指定 lighttpd
配置文件。-D
告诉 lighttpd
不要守护进程。当我访问浏览器页面时,我进入控制台:
[Fri Jan 5 17:51:35 2024] gitweb.cgi: Can't exec "/usr/bin/git": Permission denied at /usr/share/gitweb/gitweb.cgi line 3335.
好像是
/usr/bin/git
的问题。我尝试将以下行添加到 /etc/apparmor.d/usr.share.git-web.gitweb.cgi
:
/usr/bin/git rix,
但是还是不行。经过一番搜索,我找到了一种调试方法
AppArmor
:
grep -i apparmor\=\"DENIED\" /var/log/audit/audit.log | less
...
type=AVC msg=audit(1704485570.756:138288): apparmor="DENIED" operation="exec" class="file" profile="gitweb.cgi" name="/usr/libexec/git/git" pid=31445 comm="gitweb.cgi" requested_mask="x" denied_mask="x" fsuid=1000 ouid=0
所以我删除了之前添加到
/etc/apparmor.d/usr.share.git-web.gitweb.cgi
的行并添加了以下行:
/usr/libexec/git/git rix,
现在可以正常使用了。