使用LXR搭建Linux Kernel源码索引服务器

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

你可能感兴趣的:(使用LXR搭建Linux Kernel源码索引服务器)