OpenSUSE Tumbleweed 上的 `git instaweb` 问题:未读取 /etc/gitweb-common.conf

问题描述 投票:0回答:1

git instaweb
是一个非常方便的浏览存储库的命令。但一些有趣的功能默认被禁用。

每次运行

.git/gitweb/gitweb_config.perl
时,主配置文件(
git instaweb
)都会被重写,因此不可能在那里存储配置。

我尝试通过创建全局配置文件来启用一些所需的功能。

最初我尝试创建

/etc/gitweb.conf
,包含以下两行:

$feature{'highlight'}{'default'} = [1];
$feature{'blame'}{'default'} = [1];

但是没有成功。然后我尝试创建文件

/etc/gitweb-common.conf
。也没有成功。

这些行对生成的 Web 界面没有影响,我不断收到

403 - Blame view not allowed

git gitweb apparmor
1个回答
0
投票

检查

/usr/share/gitweb/gitweb.cgi
的源代码,我注意到如果从变量 $GITWEB_CONFIG 中的文件读取全局配置(这是我们特定存储库新生成的配置文件),那么脚本将永远不会尝试读取 $GITWEB_CONFIG 中的文件GITWEB_CONFIG_SYSTEM (
/etc/gitweb.conf
),在此之前返回。因此,在这种情况下,使用此文件不适用。

但是没有解释为什么不读取$GITWEB_CONFIG_COMMON(

/etc/gitweb-common.conf
),它是在$GITWEB_CONFIG之前读取的。

经过一番研究,我尝试使用基本的

/usr/share/gitweb/gitweb.cgi
语句来调试
print
中的 CGI 脚本。最终我收敛到以下子程序:

# read and parse gitweb config file given by its parameter.
# returns true on success, false on recoverable error, allowing
# to chain this subroutine, using first file that exists.
# dies on errors during parsing config file, as it is unrecoverable.
sub read_config_file {
    my $filename = shift;
    return unless defined $filename;
    # die if there are errors parsing config file
    if (-e $filename) {
        do $filename;
        die $@ if $@;
        return 1;
    }
    return;
}

Perl 使用两个不同的变量来管理来自

do
的错误。一种是
$@
,当
do
无法编译文件时设置它。另一个是
$!
,这是为了防止
do
无法读取文件而设置的。通过打印
$!
的值,我发现它被设置为
Permission denied
。由于该脚本当前不测试
$!
,因此该错误不会被注意到。 (Perl 做块文档)

要解决此问题,必须将以下行添加到

/etc/apparmor.d/usr.share.git-web.gitweb.cgi

/usr/libexec/git/git rix,
© www.soinside.com 2019 - 2024. All rights reserved.