在Linux上安装Bugzilla v4

首先去官网http://www.bugzilla.org/下载Stable Release (4.0)
然后可以浏览下手册http://www.bugzilla.org/docs/4.0/en/html/

现在重点关注http://www.bugzilla.org/docs/4.0/en/html/installation.html
发现依赖于Perl,Database Engine,Web Server,mod_perl,Perl Modules,Mail Transfer Agent (MTA)

1、Perl在一般的Linux发行版上都有,只需要按照安装手册检测下版本是不是支持Bugzilla

2、数据库比较独立,Bugzilla支持的任意一种数据库都可以正常工作,这里我采用的是MySQL v5.5,以前有安装过。安装方法可以参考下http://lucane.iteye.com/blog/866355
安装好之后能正常登录就可以,等会来创建数据库实例和用户,因为bugzilla需要

3、Web Server目前只有Apache是官网推荐的,但你可以用其他的Server,如果用其他的Server安装Bugzilla成功,请别忘了写封邮件告诉Bugzilla团队和我。
这里我用的Apache 2.2.17源码编译安装,还算顺利,就是启动的时候遇到点问题,后来解决了
安装成功并启动成功的情况下,在浏览器下输入http://localhost/,会出现It works!的提示,说明Apache安装完成

4、mod_perl是Apache处理Perl的模块,我这里是采用动态插件的方式集成到Apache的,即Dynamic Shared Object方式,有人推荐静态编译的方式编译到Apache源码中,那样效率高。我这里就不需要了,如果要采取静态编译方式请参考官方文档,总之我们的目的是要使我们的Web Server具有处理Perl的能力。
去http://perl.apache.org/download/index.html下载mod_perl-2.0.5,然后编译安装
sudo perl Makefile.PL MP_APXS=$APACHE_HOME/bin/apxs
MP_APXS后面的这些参数会把已经安装好的Apache信息传递给编译程序,这样它就知道Apache在哪,
编译出来的mod_perl.so它就会默认放到$APACHE_HOME/modules文件夹下,不会随意给你放个地方

我在编译的时候出现了一个错误,就是提示系统缺少libperl.so文件
我到/usr/lib下查看,发现真没有这个文件,但是有个libperl.so.5.10.1文件,
于是我做了个软链接,如下
/usr/lib$ sudo ln -sv libperl.so.5.10.1 libperl.so
再次编译,成功

编译好之后就是配置Apache了,需要把mod_perl集成到Apache当中,在$APACHE_HOME/conf/httpd.conf
搜索Dynamic Shared Object (DSO) Support,会看到下方不远处有个例子
(在httpd.conf这个配置文件中#符号表示注释掉的内容,这里是给我们参考的)
# Example:
# LoadModule foo_module modules/mod_foo.so

我们只需要增加一行就行,
LoadModule perl_module modules/mod_perl.so
这样就把perl_module集成进来了,后面modules/mod_perl.so是物理位置,
也就是你应该在$APACHE_HOME/modules下看到有个mod_perl.so文件

保存修改好的配置文件,重启Apache(./apachectl -k stop,sudo ./apachectl -k start),
如果Apache还能正常启动就说明刚刚修改的配置文件的语法是正确的,我们就可以进行下一步的工作了

————————-
另外插个小问题,我在用./apachectl -k stop关闭Apache的时候,Apache并没有真正关闭,后来我直接kill进程了
貌似网络上也有人遇到我这个问题,谁知道原因烦请告知我一声
————————-

5、开始安装Bugzilla,Bugzilla是用Perl写的,我们机器上的Perl可能不是最完整的,我们安装时缺少什么模块都可以现装上去
把下载的bugzilla解压到硬盘某处,比如/var/www/或者/home/下的文件夹,不要放到系统或者临时文件夹下,这样都不好
为了安全考虑的话一般部署都会给Web Server单独的用户,单独的权限,单独存储空间

我这里是把bugzilla放在我用户下的一个文件夹下的(~/dev/a/bugzilla-4.0),然后做了个软链接到Apache的内容文件夹($APACHE_HOME/htdocs)下
$ ls -lh
总计 8.0K
lrwxrwxrwx 1 guohai guohai 31 2011-03-31 21:58 bugzilla -> ~/dev/a/bugzilla-4.0

我给~/dev/a/bugzilla-4.0文件夹的权限是我当前用户的权限,这个实际上很重要,后面遇到问题就跟权限有关

还要在Apache httpd.conf中发布bugzilla,增加段配置,看看已有的配置文件就知道该加哪了,$APACHE_HOME这个请替换成自己相应的路径


Options ExecCGI FollowSymLinks
AllowOverride Limit
DirectoryIndex index.cgi
Order allow,deny
Allow from all

懂的人就知道这段配置的意思,不懂的人就先这样加在里面,只要是相同版本的Apache应该是不会出错的

还要增加AddHandler cgi-script .cgi这个,一般默认都是开启了的,在httpd.conf下搜索下,如果没有开启就把前面的#符号去掉开启该功能就行

这样的话,我们期望访问bugzilla的地址就变成了http://localhost/bugzilla/

现在来正式开始安装Bugzilla程序
先运行~/dev/a/bugzilla-4.0$ ./checksetup.pl –check-modules
它会提示缺少哪些模块,比如Checking for DBD-Pg (v1.45) not found
凡是not found都是目前系统上不具有的模块,但是我们只需要先安装必须的模块,缺少的模块和安装方式上面都有写出来
一般我们只需要执行类似的命令sudo perl install-module.pl TheSchwartz就可以安装完成,很好理解
我在安装的时候最开始安装MySQL数据的模块,结果提示错误,可能是依赖于其他的模块,所以我先把其他模块安装完了再去安装MySQL的就可以了
如果出现安装错误之类的问题,只需要认真看看提示,一般都可以解决

必须的模块都安装完成之后就可以配置了,简单的来说就是些数据库链接的配置
参考http://www.bugzilla.org/docs/4.0/en/html/configuration.html
执行下./checksetup.pl,现在不带后面的check-modules参数
它会帮我们生成$BUGZILLA_HOME/localconfig这个文件,打开看看就知道是些比如数据库机器地址,数据库名字,密码等等

重点有两个参数需要注意
$webservergroup = ‘yourgroupname’;
$db_sock = ‘/etc/mysql/mysql.sock’;
上面一个就是说Web Server是以什么组的权限运行的,你这里就以这个组,尽量不要留空,留空很危险
下面的一个就是Mysql数据库本地连接相关的,可以加速本地连接性能,可以参考MySQL的安装,如果留空的话,Bugzilla就以默认的路径去查找,
如果找不到就可能会报数据库连接错误,所以查查MySQL的安装配置就明白了

这些都配置好了我们是不是可以重启Apache开始使用Bugzilla了,还不可以,因为刚刚只说了下数据库的连接,我们还并没有实际的创建数据库。
很简单,创建个用户(bugzilla),当然还有密码,创建个数据库(bugbase),然后把相应的权限授予创建的这个用户

这些都有了之后我们才能填写localconfig文件相应的内容,重启Apache,再执行遍~/dev/a/bugzilla-4.0$ ./checksetup.pl
这才是真正的安装,它会连接数据库创建表等等操作,如果没有错误的话会提示你创建管理员账户,一般输入电子邮件,名字,密码之类的就可以

然后我们高高兴兴的去打开浏览器去看看Bugzilla

这个时候运气好的人可能会发现真能够访问了,但是运气不好的人一般都会给出403错误,木有权限,Forbidden几个大字搞的你没有脾气
我是参考了下面的才解决的
http://support.modwest.com/content/2/181/en/after-i-install-bugzilla-i-get-error-403-forbidden.html

去Bugzilla目录下执行
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
find . -name \*.cgi -exec chmod 755 {} \;
find . -name \*.pl -exec chmod 755 {} \;
find . -name \*.sh -exec chmod 755 {} \;

但是在这之前需要说明点东西,可能会对理解这个权限有点帮助

首先,Apache本身是有运行权限的,搜索下httpd.conf,你会找到如下这段
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User guohai
Group guohai

它建议你单独创建用户和组,并在这里指定,然后以root权限运行Apache,它会自动帮助你切换过来

也就是我这里运行Apache的用户和组都是guohai,并且Bugzilla的localconfig中的$webservergroup也是guohai
并且Bugzilla目录下文件的用户和组都是guohai

这些都正确了之后现在应该是可以访问的了,能看到Bugzilla的页面就算告一段落了,但是还没有完。

因为Bugzilla当中有很多邮件通知,所以还需要配置MTA之类的东西,
最简单的方法检测目前操作系统环境是否已经满足该条件的就是在Bugzilla上注册一个新用户,
如果不出现错误就表示目前满足条件

我的机器上面出现错误,是因为没有装MTA的原因,我就装了个SendMail,大家可以参考其他相关文档。
官方有个简短有效的说法,就说你如果能用mail命令成功发邮件的话,那么Bugzilla也就是可以用的
错误如下:
There was an error sending mail from ‘bugzilla-daemon’ to ‘guohai@mailwalk.com’:error when closing pipe to /usr/sbin/sendmail: Broken pipe
Traceback:
at Bugzilla/Mailer.pm line 186
Bugzilla::Mailer::MessageToMTA(…) called at Bugzilla/Token.pm line 90
Bugzilla::Token::issue_new_user_account_token(…) called at /home/guohai/apps/volcano/apache/htdocs/bugzilla/createaccount.cgi line 73

单独运行下/usr/sbin/sendmail,提示:
Please install an MTA on this system if you want to use sendmail!

在修改配置的时候也出现了错误,因为修改配置信息,要往一个文件($BUGZILLA_HOME/data/params)里面写东西,文件需要有可写权限
~/dev/a/bugzilla-4.0/data$
-rw-rw-r– 1 guohai guohai 4.0K 2011-04-01 00:36 params
类似这些错误只需要根据错误提示给权限就可以了

还有个功能如果需要开启的话就还要改配置,那就是use_mailer_queue,也就是让通知邮件在后台以异步方式发送,一般用户多的系统都要开启该功能
但是该功能依赖于一个模块,否则就会如下出错
The new value for use_mailer_queue is invalid: Using the job queue requires that you have certain Perl modules installed. See the output of checksetup.pl for more information.

详情也可一参考http://www.bugzilla.org/docs/tip/en/html/api/jobqueue.html

编译jobqueue.pl
~/dev/a/bugzilla-4.0$ ./jobqueue.pl
Base class package “TheSchwartz” is empty.
(Perhaps you need to ‘use’ the module which defines that package first,
or make that module available in @INC (@INC contains: . lib/i686-linux-gnu-thread-multi lib /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl).
at Bugzilla/JobQueue.pm line 30
BEGIN failed–compilation aborted at Bugzilla/JobQueue.pm line 30.
Compilation failed in require at Bugzilla/JobQueue/Runner.pm line 36.
BEGIN failed–compilation aborted at Bugzilla/JobQueue/Runner.pm line 36.
Compilation failed in require at ./jobqueue.pl line 30.
BEGIN failed–compilation aborted at ./jobqueue.pl line 30.

发现缺少TheSchwartz模块
这个时候最简单的就是检测下哪些模块没有,之前我们已经执行过这个操作./checksetup.pl –check-modules

那就按照提示安装TheSchwartz模块
sudo perl install-module.pl TheSchwartz
发现还是报错,因为它还依赖于另一个模块
Can’t locate object method “new” via package “Bugzilla::JobQueue::Runner” at ./jobqueue.pl line 32.
果断看出是Bugzilla::JobQueue::Runner这个类不正确,或没有,犯下API发现
Bugzilla::JobQueue::Runner – A class representing the daemon that runs the job queue.
就说明还依赖另外一个模块,定位到Daemon::Generic
那就再安装Daemon模块sudo perl install-module.pl Daemon::Generic

编译 ./jobqueue.pl通过
启动 ./jobqueue.pl start
当然你也可以让jobqueue随操作系统开机启动,可以参照文档做些设置

这样就可以开启Bugzilla的use_mailer_queue功能了

这样才算基本完成了
不过还有一些功能需要,比如设置通知邮件的地址,就是说这些通知邮件是由哪个邮箱发出的,
有人可以把他定位到Gmail等第三方邮箱上,我目前还是个无效的邮件地址发出去的邮件,bugzilla-daemon@localhost6.localdomain6
这种邮件可能会被些其它邮箱拒绝

建议大家安装的时候还是先读读官方指南,我这里只是把出现的问题及解决办法记录下了,看起来不是那么顺畅。

Leave a Reply

Your email address will not be published. Required fields are marked *