在Linux下安装、汉化Bugzilla

今天浏览以前论坛中的文章,顺摘录一些。此文虽老,但仍有参考价值。此文原为RD室已毕业学生hatasun撰写。我们现在使用的bugzilla也是他先安装部署的,感谢hatasun。

——————————————–

Bubzilla的自带文档提供了详细的安装指南,但在实际安装过程中还是会遇到各种各样的问题。本文主要介绍了在RH8.0的Linux环境下安装Bugzilla的步骤和汉化方法。前提是已经安装rpm的perl、mysql、apache和sendmail,且服务器有可用的完整域名。
1、解压
将下载的bugzilla-2.16.2.tar.gz包放到一个可写的目录下,解压:
$tar xfz bugzilla-2.16.2.tar.gz
得到一个bugzilla-2.16.2目录,改名为bugzilla.
2、配置perl
由于默认的perl安装包缺少一些bugzilla需要的模块,所以需要补充一些模块,最好是在线进行,不要一个一个的自己安装。以root身份运行在联网情况下用以下命令安装所需的最少perl模块:
perl -MCPAN -e ‘install “Bundle::Bugzilla”‘
另外还有有些可选的模块
perl -MCPAN -e ‘install “Template”‘ (安装时它会提示一堆问题,推荐安装)
perl -MCPAN -e’install “LDS/GD-1.19.tar.gz”‘ (make test时候没有成功返回,所以自动不安装)
perl -MCPAN -e’install “N/NI/NINJAZ/Chart-0.99b.tar.gz”‘ (make test时候没有成功返回,所以自动不安装)
3、配置apache(版本2.0.40)
rpm包安装的apache和手动安装的tar.gz包有些路径上的差异,自己按照情况修改。
在apache的配置文件/etc/httpd/conf/httpd.conf中检查一句话,以执行cgi和perl程序:
AddHandler cgi-script .cgi .pl
然后建立虚拟路径,使得在浏览器上用http://servername/bugzilla/路径来访问你的bugzilla
Alias /bugzilla/ “/var/www/bugzilla/” #/var/www是apache的存放网上数据文件的目录
在文件末尾加上存放bugzilla文件(.html .cgi)的目录配置语句:
<Directory “/var/www/bugzilla”>
Options +ExecCGI
AllowOverride Limit
Allow from from all
</Directory>
4、配置mysql数据库(版本3.23.52)
准备用bugs用户来管理bugzilla在mysql中创建的bugs数据库,这个bugs用户和unix系统用户没关系。默认情况下,第一次启动mysql数据库后(怎样启动请参考mysql文档)以root用户名进入(这个root和unix环境系统用户root没关系,这个root是mysql的管理员帐户)。
bash$ mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD(‘<new_password’>) WHERE user=’root’;
mysql> FLUSH PRIVILEGES;
这样,为root用户设定了<new_password>管理员密码。然后,以这个管理员身份为mysql创建bugs用户,并为它建立对bugs数据库(目前还没建立)的权限:
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,INDEX, ALTER,CREATE,DROP,REFERENCES ON bugs.* TO bugs@localhost IDENTIFIED BY ‘<bugs_password>’;
mysql> FLUSH PRIVILEGES;
这样,bugs用户下次就可以以<bugs_password>密码登陆mysql数据库(本地登陆),对bugs数据库进行管理了。但目前mysql中还没有bugs数据库,这个数据库由后面的执行程序自动创建。
5、配置bugzilla,以root身份
(1)把整个解压bugzilla的目录下的文件移动到/var/www/bugzilla目录下
$cp -R * /var/www/bugzilla/
$cd /var/www
$chown -R nobody.nobody ./bugzilla
最后一句是修改了bugzilla目录的访问权限为nobody.nobody,这是apache的网上用户访问的权限,可以按照自己系统的设置作相应改变。
(2)在/var/www/bugzilla目录下运行:
$perl -pi -e ‘s@#!/usr/bonsaitools/bin/perl@#!/usr/bin/perl@’ *cgi *pl Bug.pm processmail syncshadowdb
它修改了所有文件中应用perl运行程序的路径为/usr/bin/perl,而默认的不是这样。
(3)启动mysql数据库(第一次的时候运行:/etc/rc.d/init.d/mysqld restart 会初始化数据库)
以后启动可以用 /etc/rc.d/init.d/mysqld start -O max_allowed_packet=1M
选项表示可以保存小于1M的附件,而默认的是64k,有时候太小。
(4)运行bugzilla解压后的目录下的check.pl程序,执行程序进行初始化工作,它确定mysql数据库和其他选项与bugzilla的CGI程序相一致,并且建立数据目录,创建bugs数据库:
$ ./checksetup.pl
第一次运行时有时候会提示缺少某些optional的模块,如果不需要这些可选的功能,可跳过。
然后会提示bugs@localhost用户没有权限连接mysql数据库,并停止。
这时,编辑当前目录下生成的一个新文件,叫“localconfig”文件,是一些配置信息,需要自己进一步修改,按照自己的系统来修改一些参数,如webservergroup,它是apache访问用户的默认组名称,我的为nobody。其他主要的需要修改的是:
$db_host = “localhost”; # 数据库是本地还是其他服务器上,默认是本地,即和bugzilla是同一台服务器上
$db_name = “bugs”; # 保存bugzilla数据的数据库名称,默认是bugs
$db_user = “bugs”; # 管理这个数据库的mysql用户名称,可以自己选,现在为bugs
$db_pass = “****”; # bugs数据库的访问密码,即创建bugs用户时输入的密码,默认为空,填入即可。
其他的一般没什么改变,默认的就行。
再次运行check.pl程序,应该正常运行,连接mysql,创建bugs数据库和相关表。
这时会提示说第一次运行bugzilla,输入管理员的email地址,姓名,并创建一个密码,即bugzilla的管理员密码。
(5)安装好后要进行配置,开启apache和mysql,进入http://server_name/bugzilla/editparams.cgi,(需要bugzilla管理员身份)
修改urlbase为http://159.226.2.132/bugzilla/
其他选项可以按照说明做相应修改,默认的一般可以了。
6、关于访问权限:
有时候如果按照上述方法安装后,访问http://159.226.2.132/bugzilla/index.cgi会出现无权访问页面的问题。
解决:把httpd.conf 中的
User ××××
Group ××××
改为
User nobody
User nobody
这样把apache的访问用户都设为了nobody。(这可能会影响其他的apache下的程序,修改前可以询问apache的管理员。反正就是要让/var/www/bugzilla的访问用户权限和apache的访问用户权限一样。
然后执行
$cd /var/www
$chown -R nobody.nobody ./bugzilla
把/var/www/bugzilla目录及其下文件权限全改为nobody.nobody方能解决访问权限问题。
7、启动sendmail服务。如果默认安装的sendmail服务器,就启动sendmail服务,这样bugzilla就可以利用mail服务来进行一些登记注册、发消息等服务了。前提是此服务器有完整的域名。
8、汉化
现在,bugzilla应该就可以用了,用http://server_name/bugzilla/index.cgi 看到bugzilla的界面,但是现在只能是英文环境,不能提交/查看中文的bug帖子,看到的是乱码,界面也是全英文的,比较别扭。下面,我们来进行一些汉化工作,除非你决定就用英文的了。
(1)网上能找到的最新汉化包是在sourcforge上,由侯光敏制作的汉化模板(bugzilla提供界面模板的工具,估计这个汉化模板就是利用这个模板工具制作的),地址是http://sourceforge.net/projects/bugzilla-cn/ 那里可以下载最新的bugzilla-2.16-cn-1.0.tar.gz包,它对bugzilla界面做了几乎完全的汉化(自称90%)。
(2)解压包生成一个template目录,进去后有一个cn目录
$tar xfz bugzilla-2.16-cn-1.0.tar.gz
$cd template
现在,可以把这个cn目录移到/var/www/bugzilla/template/目录下,和默认得en目录并列,也可以在/var/www/bugzilla/template/en/目录下自己创建一个custom目录,然后把cn目录下的所有文件和目录移到custom目录下,这样,启动bugzilla后,这个目录下的内容会覆盖和custom目录并列的默认default目录下的文件内容(第二种方式是按照bugzilla的说明文档进行的,是添加一种模板的方法,替换系统默认的英文模板,但又不破坏原有的文件)。记得和以前一样,修改新加入的文件的访问权限为nobody.nobody。
(3)现在你可以用浏览器访问bugzilla了,但是默认情况下,浏览器会自动使用ISO-8859字符集,而不是gb2312,虽然汉化模板中对每个生成的页面都在源码的meta字段中指定了charset=gb2312,但似乎不能被浏览器识别使用,非得手动修改每个页面的字符集为gb2312后才能看到漂亮的简体中文。这是因为汉化模板只是更改了文字的内容,但没有让浏览器识别成中文字符,而默认的bugzilla生成的都是ISO-8859-1西欧字符集,所以浏览器把中文内容当成西欧字符进行显示,所以呈现乱码。现在要做的是强制生成带“指定中文字符集”的页面。
(4)参阅bugzilla自带的文档说明后发现,可以用一个命令:
$perl -pi -e “s/Content-Type: text/html/Content-Type: text/html; charset=gb2312/i” *.cgi *.pl
在/var/www/bugzilla目录下执行,它的作用是对当前目录下的所有cgi,perl程序中的
Content-Type: text/html
都替换为:
Content-Type: text/html; charset=gb2312
这样就强制cgi和perl程序动态生成页面的时候加上指定字符集gb2312的tag,用户的浏览器就能识别出中文了,否则,汉化模板生成的中文被浏览器识别为ISO-8859的西欧文字出现乱码现象。
但有些动态页面生成的时候,cgi代码中不是”Content-Type: text/html”,故上述命令不能对这些cgi程序奏效,所以要手动修改,目前发现的是enter_bug.cgi程序,把倒数第三行改为
print “Content-type: $format->{‘contenttype’}; charset=gb2312nn”;
即加上了charset=2312的标签,生成的页面就会被浏览器识别为中文字符集。
9、最后
bugzilla允许对界面进行一些用户自己的定制,比如修改页面底部的说明文字等等,在template中修改就可以了(2.16版本以后的新特性),详细内容可参考bugzilla的主页http://bugziila.mozilla.org。
现在看看页面,是不是都变成漂亮的中文了?

[转自]在Linux下安装、汉化Bugzilla–白日梦

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据