一、下载
(1)LXR
现在LXR已经成为sourceforge的一个project,所以可以到lxr.sourceforge.net上找到最新的lxr代码(当然也就是源代码了)。
(2)perl的DBI
http://search.cpan.org/~timb/DBI/
(3)glimpse
http://webglimpse.net/download.php
http://webglimpse.net/trial/glimpse-4.17.2-linux-i386.tar.gz
(4)Apache2.0.53
http://httpd.apache.org/download.cgi
Apache的mod_perl插件,以支持perl脚本的cgi解释
http://perl.apache.org/download/index.html
Apache的mod_auth_mysql插件:
http://sourceforge.net/projects/modauthmysql/
http://voxel.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql-2.8.1.tar.gz
注意:我们用的是Apache2,并且必须是2.0.47以上版本。mod_perl2.0对应Apache2,mod_perl1.0对应Apache1.3,不要下载错误的版本
(5)MySQL4.1.10
http://www.mysql.com
http://dev.mysql.com/get/Downloads/MySQL-4.1/MySQL-server-4.1.10-0.i386.rpm/from/http://mirror.services.wisc.edu/mysql/
http://dev.mysql.com/get/Downloads/MySQL-4.1/MySQL-client-4.1.10-0.i386.rpm/from/http://mysql.ihostunit.com/
http://dev.mysql.com/get/Downloads/MySQL-4.1/MySQL-devel-4.1.10-0.i386.rpm/from/http://mysql.ihostunit.com/
http://dev.mysql.com/get/Downloads/MySQL-4.1/MySQL-Max-4.1.10-0.i386.rpm/from/http://mirror.services.wisc.edu/mysql/
http://dev.mysql.com/get/Downloads/MySQL-4.1/MySQL-bench-4.1.10-0.i386.rpm/from/http://mysql.ihostunit.com/
http://dev.mysql.com/get/Downloads/MySQL-4.1/MySQL-embedded-4.1.10-0.i386.rpm/from/http://mysql.ihostunit.com/
http://dev.mysql.com/get/Downloads/MySQL-4.1/MySQL-shared-4.1.10-0.i386.rpm/from/http://mysql.ihostunit.com/
如果是从3.x升级还需要下载这个(上面的shared就不要了):
http://dev.mysql.com/get/Downloads/MySQL-4.1/MySQL-shared-compat-4.1.10-0.i386.rpm/from/http://mysql.ihostunit.com/
(6)ctags包,一般都有。
二、安装前的准备
(1)DBI
解压后:
perl Makefile.PL
make
make test
make install
(2)glimpse
./configuration
make
将文件glimpse和glimpseindex拷贝到/bin或/usr/bin下
(3)Apache2.0.53:
./configuration
make
make install
这样Apache2就装至/usr/local/apache2下了。
这个版本新特点:
1.与旧版的Apache的Modules有些不兼容,所以像perl、php、auth_mysql要重新编译过,或都把相应的LoadModule注释掉。
2.整合了大部分Modules,所以以前在httpd.conf中要写的LoadModule都不用了。
(4)Apache的mod_perl插件:
perl Makefile.PL
make
make test
make install
(5)mod_auth_mysql插件:
/usr/local/apache2/bin/apxs -c -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
/usr/local/apache2/bin/apxs -i mod_auth_mysql.la
一般来说,这样就可以了。更详细的安装请参考解压后的BUILD
(5)MySql的安装:
由于是RPM,所以安装还是方便的:
rpm -Uvh *.rpm
参考文章:http://www.cnblogs.com/huqingyu/archive/2004/12/08/74331.html
这里还有数据库的备份等,虽然是windows下的,但命令差不多,有参考价值。
三、安装
1. 本例中使用的是/usr/local/lxr目录作为LXR的根目录。
#tar zxvf lxr-0.9.3.tar.gz -C /usr/local ;将lxr解压到/usr/local/lxr下
#cd /usr/local/lxr
#mv Local.pm diff fixhashbang ident find search source templates ;将web相关部分移到templates下
#mv templates http ;http目录,用于存放WEB部分
#ln http/Local.pm /usr/lib/perl5/site_perl -s
#ln http/lxr.conf . -s ;为web部分和工具部分都需要用的文件建符号连接
#mv lib/LXR /usr/lib/perl5/site_perl/LXR ;将自定义的perl库文件拷贝到perl/mod_perl使用的缺省库文件目录中
#mkdir src
#cd src
#mkdir glimpse
#vi versions ;编辑/usr/local/lxr/src/versions文件,添加一行:2.4.20
#ln /usr/local/src/linux-2.4.20 2.4.20 -s
#vi versions ;编辑/usr/local/lxr/src/versions文件,添加一行:0.11
#ln /usr/local/src/linux-0.11 0.11 -s
2. 修改lxr.conf
缺省的lxr.conf已经在/usr/local/lxr/http/下了,并在/usr/local/lxr/下有个连接。
'glimpsebin'变量,改为glimpse命令的位置,用which glimpse可以找到(如果装了的话),我这里为/usr/bin/glimpse;
注释掉所有与swish-e相关的变量定义
'genericonf' => '/usr/lib/perl5/site_perl/LXR/Lang/generic.conf'
'ectagsconf' => '/usr/lib/perl5/site_perl/LXR/Lang/ectags.conf' (这行INSTALL中少了LXR)
'baseurl' => 'http://192.168.0.1/lxr',这个IP当然不是通用的(举个例子而已,实际装时根据本机情况适当修改)
'range' => [ readfile('/usr/local/lxr/src/versions') ],用绝对路径,主要是为了方便;
'default' => '0.11',我自己定义的缺省的代码树名;
#template used for headers and footers下的所有路径都弄成绝对路径,如:
'htmlhead' =>'/usr/local/lxr/http/html-head.html'(紧接着的几个也要改掉)
'sourceroot' => '/usr/local/lxr/src' (注意,最后无/)
'sourcerootname' => 'Linux-$v' ;它将显示在缺省的最高级源码目录上
'glimpsedir' => '/usr/local/lxr/src/glimpse' (注意,最后无/)
其余你看有需要再改。
3.修改apache的httpd.conf
保证装了mod_perl的时候,在httpd.conf中添加以下几行:
Alias /lxr/ /usr/local/lxr/http/
<LOCATION /lxr/>
AllowOverride None
SetHandler perl-script
PerlHandler ModPerl::Registry
Options +ExecCGI
</LOCATION>
目的:能使Perl文件可以在网页中显示其执行结果。
测试:写一个很小的perl文件,比如1.pl,内容为:
#!/usr/bin/perl
print "Content-type:text/plain";
print "\n\nTest";
并给它所有人的执行权限:chmod guo+x 1.pl
在网页中看1.pl,如果显示Test则说明mod_perl装好了。如果显示整个文件内容,则说明mod_perl没装好。
如果没有mod_perl,可以用SetHandler cgi-script代替perl-script,一样可以用,PerlHandler就不用了。 (没试过)
如果只让source等文件用perl执行,其它文件不允许用perl执行,可以配成如下形式:
Alias /lxr/ /usr/local/lxr/http/
<Directory /usr/local/lxr/http/>
AllowOverride None
Options FollowSymLinks
<Files ~ "(search|source|ident|diff|find)$">
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
PerlOptions +ParseHeaders
</Files>
</Directory>
4. 初始化MySQL数据库
运行mysql,在提示符下运行"\. initdb-mysql"。这样就建好了lxr用户,建好了lxr数据库可其中一系列表格,并让lxr能全权访问lxr数据库,但没有访问其他库的权限,而且,也不用密码。
5. 建索引:
#cd /usr/local/lxr/
#./genxref --version=2.4.20 --url=http://192.168.0.1/lxr
#./genxref --version=0.11 --url=http://192.168.0.1/lxr
这期间,会在/usr/local/lxr/src/glimpse下建两个目录,为0.11和2.4.10,分别放glimpseIndex自动创建的文件(以.glimpse开头),这个过程在我的机器上用了3个小时,其目的就是在MySQL中添东西。如果已经做过索引了,它就只关心那些修改过的或新的文件,速度就快多了。这个过程如果中断了,最好清空数据库重新来过,否则可能会有错误。
6. 修改权限:
最简单的办法就是把/usr/local/lxr/http下所有的文件都改成apache的属主。
chmod命令使用可以参考:http://www.cnblogs.com/huqingyu/archive/2005/02/20/106392.html
#cd /usr/local/lxr/
#chown apache.apache http -R
7.启动:
重启mysql和httpd,然后访问http://192.168.0.1/lxr/source/就可以了。
#apachetrl restart
比较奇怪的是,因为这个cgi允许用类似目录一样的形式(source/)来访问,所以,如果服务器端有更新,浏览器端仍会使用老的页面,refresh也没用。这时只有清空本地cache了。
8.其它:
1) update
我还没有遇到更新的情况,但估计2.4.18升级到2.4.19时比较麻烦,因为目录名变了,而数据库里存的仍然是老名字,glimpse也用的老名字,所以更新可能需要重建一次数据索引,就是重新来一次3.initialize。
但如果仅仅是添加新的源代码树,则只需要修改src/versions文件,按照kernel/2.4.18的模子再在src下建一个目录树,并一样执行一次3.2、3.3、3.4就可以了。为了方便,我把3.x做成了两个脚本。
2).bugs
应该在源代码树的组织上。如果同时要索引kernel-2.4.18和kernel-2.2.19,逻辑上好像应该在kernel下建另一个连接指向2.2.19的代码,但实际上应该建一个kernel2与kernel并列在src目录下。
更新时看样子也会有问题,因为数据库里记录了2.4.18的目录信息,glimpse里也记录了2.4.18。重建实在耗时。
不知谁有更好的配置方案,尽管这做不了博士课题。
可能哪一步还不对,请再参考别的文章:
http://www.oldlinux.org/cgi-bin/LB5000XP/topic.cgi?forum=1&topic=72&show=0
我的环境:
OS:windows2003,装Vmware虚拟机运行RedHat Linux8.0
CPU:C2.53
内存:512M