0.测试环境
Ubuntu13.10(64位,Kernel为自己编译的3.13.6)
1.工具
a.Perl
在我的Ubuntu里已安装了Perl,版本信息如下:
This is perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux-gnu-thread-multi
b.ctags
使用sudo apt-get install ctags进行安装,我现在安装好后的版本信息如下:
Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert
c.mysql
在此处我们选择mysql关系数据库,当然也可以选择sqlite、postgresql、oracle等。
使用如下命令安装相关工具套件:
sudo apt-get install libmysqlclient-dev mysql-server
安装过程会弹出一个界面要求输入MySQL的root用户密码,我们输入一个slamxinu吧。
d.apache及Perl模块
在此处我们选择apache作为WEB服务器,当然也可使用lighttpd、Nginx等。
使用如下命令安装和开启相关工具套件:
sudo apt-get install apache2
sudo apt-get install libapache2-mod-perl2
sudo a2enmod cgi
e.Glimpse
在此处我们选择Glimpse作为文本搜索索引,当然也可使用Swish-e。
安装该工具需要源码编译安装:
mkdir ~/lxr-related
cd !$
wget http://webglimpse.net/trial/glimpse-latest.tar.gz
tar xvf glimpse-latest.tar.gz
cd glimpse-4.18.6/
./configure
make
sudo make install
f.Perl相关包
sudo cpan
该命令会有相关交互操作,全按Enter键默认确认即可。
当出现cpan[1]>时,我们可以输入如下命令安装相关包:
cpan[1]> install DBI
cpan[2]> install DBD::mysql
(该步有可能执行会失败,我是在配置完LXR后再次执行就可以安装成功。)
cpan[3]> install File::MMagic
安装好后输入如下命令退出cpan:
cpan[4]> quit
g.LXR
安装好相关工具后,接下来是重头戏LXR了:
cd ..
wget http://sourceforge.net/projects/lxr/files/stable/lxr-2.0.1.tgz
tar xvf lxr-2.0.1.tgz
2.配置
a.LXR
上面解压LXR后,我们接着进行配置,首先下载我们的Linux源码,这里还是使用我们一直使用的3.13.6版本:
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.6.tar.xz
tar xvf linux-3.13.6.tar.xz
mkdir lxr-2.0.1/linux-source
mv linux-3.13.6 lxr-2.0.1/linux-source/v3.13.6
cd lxr-2.0.1/
./genxref --checkonly
先检查下工具有没有安装好,我这边提示是lxr.conf文件没找到,接下来的操作里会处理,还有swish-e没找到,因为它与glimpse是两选一的。
./scripts/configure-lxr.pl -vv
此过程是对LXR的配置,有如下配置项需注意(未说明均按Enter键默认配置,本次配置为single tree):
--- Directory for glimpse databases? > /home/xinu/lxr-related/lxr-2.0.1/glimpse-DB
--- Caption in page header? (e.g. Project XYZZY displayed by LXR) > xinu_lxr
--- Source directory? (e.g. /home/myself/project-tree) > /home/xinu/lxr-related/lxr-2.0.1/linux-source
--- Version name? > V3.13.6
--- Database name? > lxr
--- DB user name? [lxr] > root
--- DB password? [lxrpw] > slamxinu
配置完成后再执行如下命令:
./custom.d/initdb.sh
此步骤要求输入连接mysql的root用户密码。
cp custom.d/lxr.conf .
./genxref --url=http://localhost/lxr --version=v3.13.6
此步产生索引,时间约2个小时左右,具体看机器配置。
b.Apache
sudo cp custom.d/apache-lxrserver.conf /etc/apache2/sites-available/
sudo ln -s /etc/apache2/sites-available/apache-lxrserver.conf /etc/apache2/sites-enabled/apache-lxrserver.conf
修改当前目录下的.htaccess文件,在如下语句:
# up to Apache 2.2
# Allow from all
# from Apache 2.4
Require all granted
后面添加如下内容:
setHandler perl-script
PerlHandler ModPerl::PerlRun
Options ExecCGI
PerlSendHeader On
保存后重启Apache:
sudo apachectl restart
c.创建文件索引
LC_ALL="C" glimpseindex -H /home/xinu/lxr-related/lxr-2.0.1/glimpse-DB/lxr/v3.13.6/ /home/xinu/lxr-related/lxr-2.0.1/linux-source/v3.13.6/
chmod 644 glimpse-DB/lxr/v3.13.6/.glimpse_*
3.后记
a.在上面配置完成后,我们在浏览器里输入http://localhost/lxr/source进行访问,此时会有500Internal Server Error错误,此时查看/var/log/apache2/error.log文件,有如下提示:
[Fri Apr 18 17:21:03.197402 2014] [:error] [pid 24473:tid 140635809965824] Can't locate LXR/Common.pm in @INC (@INC contains: /usr/sbin/lib /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . /etc/apache2) at /home/xinu/lxr-related/lxr-2.0.1/source line 41.\nBEGIN failed--compilation aborted at /home/xinu/lxr-related/lxr-2.0.1/source line 41.\n
看到是找不到LXR/Common.pm文件,于是做如下处理:
修改当前目录(/home/xinu/lxr-related/lxr-2.0.1)的source文件,在use strict;后面添加如下内容:
use lib '/home/xinu/lxr-related/lxr-2.0.1/lib';
保存后刷新几次浏览器就可以正常访问了。
当我们访问http://localhost/lxr/ident?和http://localhost/lxr/search?进行搜索时也会有相同错误,我们修改当前目录下的ident和search文件,做与source相同的修改。
b.Apache服务在启动时会有如下提示:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
解决方法:
修改/etc/apache2/apache2.conf文件的# Global configuration后面添加如下内容:
ServerName localhost