在安装BugZilla perl依赖项后尝试配置giitweb时出现XML解析错误



我在个人服务器上安装并配置了git, gitolite和gitweb,它在开始时工作良好,我在我的存储库上有我的web视图。但是当我试图安装BugZilla(与所有perl依赖关系)时,我在我的giitweb URL的机器上有一个错误消息:

XML Parsing Error: XML or text declaration not at start of entity Location: http://xxx.xxx.xx.xx/gitweb/ Line Number 22, Column 1:

生成的网页(firebug):

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<!-- git web interface version 1.7.10.4, (C) 2005-2006, Kay Sievers <kay.sievers@vrfy.org>, Christian Gierke -->
<!-- git core binaries version 1.7.10.4 -->
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>
<meta name="generator" content="gitweb/1.7.10.4 git/1.7.10.4"/>
<meta name="robots" content="index, nofollow"/>
<title>xxx.xxx.xx.xx Git</title>
<link rel="stylesheet" type="text/css" href="static/gitweb.css"/>
<link rel="alternate" title="xxx.xxx.xx.xx Git projects list" href="/gitweb/?a=project_index" type="text/plain; charset=utf-8" />
<link rel="alternate" title="xxx.xxx.xx.xx Git projects feeds" href="/gitweb/?a=opml" type="text/x-opml" />
<link rel="shortcut icon" href="static/git-favicon.png" type="image/png" />
</head>
<body>
<div class="page_header">
<a href="http://git-scm.com/" title="git homepage"><img alt="git" class="logo" height="27" src="static/git-logo.png" width="72" /></a><a href="/gitweb/">projects</a> / </div>
<div class="projsearch">
Content-type: text/html
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<!-- git web interface version 1.7.10.4, (C) 2005-2006, Kay Sievers <kay.sievers@vrfy.org>, Christian Gierke -->
<!-- git core binaries version 1.7.10.4 -->
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>
<meta name="generator" content="gitweb/1.7.10.4 git/1.7.10.4"/>
<meta name="robots" content="index, nofollow"/>
<title>xxx.xxx.xx.xx Git</title>
<link rel="stylesheet" type="text/css" href="static/gitweb.css"/>
<link rel="shortcut icon" href="static/git-favicon.png" type="image/png" />
</head>
<body>
<div class="page_header">
<a href="http://git-scm.com/" title="git homepage"><img alt="git" class="logo" height="27" src="static/git-logo.png" width="72" /></a><a href="/gitweb/">projects</a> / </div>
<div class="page_body">
<br /><br />
500 - Internal Server Error
<br />
<hr />
Can't locate object method &quot;startform&quot; via package &quot;CGI&quot; at /usr/share/gitweb/index.cgi line 5267.
</div>
<div class="page_footer">
<a class="rss_logo" href="/gitweb/?a=opml">OPML</a> <a class="rss_logo" href="/gitweb/?a=project_index">TXT</a>
</div>
<script type="text/javascript" src="static/gitweb.js"></script>
<script type="text/javascript">
window.onload = function () {
    var tz_cookie = { name: 'gitweb_tz', expires: 14, path: '/' };
    onloadTZSetup('local', tz_cookie, 'datetime');
};
</script>
</body>
</html>

我认为这个错误是由于我试图安装BugZilla时安装的perl模块。

如何卸载所有perl模块并重新安装默认模块?

我使用Apache作为web服务器。

有人知道如何解决这个问题吗?

UPDATE1:

我的perl版本是v5.14.2

CGI版本:4.21

升级到16.04后,在Ubuntu上使用apache的giitweb出现相同的错误信息。正如Slion所说,将gitweb.cgi中的两个"startform"实例更改为"start_form"有效,我可以像以前一样使用gitweb。

在我的例子中,下面的命令在Arch Linux上非常有效。

$ sudo pacman -Rs perl-cgi #uninstalls
$ sudo pacman -S perl #updates to the latest version
$ sudo pacman -S perl-cgi #installs

(您可能认为这与sudo pacman -S perl-cgi相同,但在我的情况下,perl-cgi已经是最新的。)虽然可能只是升级perl就可以了,但上面的命令是我所做的。

我找到了这个解决方案,因为我在我的主桌面计算机(perl 5.30.3)上进行了简单的测试后,在我的服务器(perl 5.30.2)上遇到了错误。

在Windows上使用ActivePerl或Strawberry 5.22,我得到了同样的错误。安装CGI模块并将gitweb.cgi中的"startform"实例替换为"start_form"解决了这个问题。

然而,由于某种原因,我仍然无法让giitweb列出我的项目。Git版本为1.9.5

此错误()可能不会出现在Git 2.36 (Q2 2022,七年后)中,其中gitweb输出中删除了不需要的<meta http-equiv=content-type...>

参见commit a262585, commit 943fd02 (08 Mar 2022) by Jason Yundt (Jayman2000)。
(由juno C Hamano—gitster—在commit bc3838b中合并,2022年3月21日)

gitweb:删除无效的http-equiv="content-type"

署名:Jason Yundt

在此更改之前,gitweb将生成以下页面:

<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>

当meta的http-equiv = "content-type ", http-equiv被认为处于编码声明状态"
根据HTML标准:

Encoding声明状态可以在HTML文档中使用,但是具有http-equiv属性的元素必须而不是在XML文档中使用

(源)

这个更改删除了元元素,因为gitweb总是生成XML文档。

最新更新