今天装LXR无果(转)
内容导读:
最近打算逐步开始看Linux的内核源码,查了一下,Linux下的源码查看工具为LXR,但LXR的安装实在麻烦,装了一上午,没有装成,心中郁闷……
下面转贴一下Lxr的安装过程(转自linuxforum),bless以后有机会能顺利装上
************************************
一、下载
(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 kernel ;内核代码目录
#vi versions ;编辑/usr/local/LXR/src/versions文件,内容为kernel,表示让LXR索引kernel
#cd kernel
#ln ../../../../src/linux-2.4.18 2.4.18 -s ;2.4.18才是真正的kernel源码根,之所以这么安排,主要是为了避免glimpse建索引时弄脏了/usr/src/linux-2.4.18/
#cd ../../ ;回到/usr/local/LXR
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://10.129.6.244/LXR'',这个IP当然不是通用的(举个例子而已,实际装时根据本机情况适当修改)
''range''改为[ readfile(''/usr/local/LXR/src/versions'') ],用绝对路径,主要是为了方便;
''default''改为''kernel'',我自己定义的缺省的代码树名;
''sourceroot''设为''/usr/local/LXR/src'',也用绝对路径;
''sourcerootname''设为''Linux'',自定义的,它将显示在缺省的最高级源码目录上;
''glimpsedir'' => ''/usr/local/LXR/src/$v/'',$v表示使用version变量的值,也就要求把glimpse的索引结果文件保存在/usr/local/LXR/src/kernel上,与2.4.18并列;
其余都不用改。
3)apache的httpd.conf
保证装了mod_perl的时候,在httpd.conf中添加以下几行:
Alias /LXR/ /usr/local/LXR/http/
<Directory /LXR/> (这行上一版本0.9.1写错了)
AllowOverride None
Options FollowSymLinks
<Files ~ (search source ident diff find)$>
SetHandler perl-script
PerlHandler ModPerl::Registry
Options +ExecCGI
</Files>
</Directory>
表示访问/LXR就相当于访问/usr/local/LXR/http,且用perl解释search、source、ident、diff和find几个脚本,而其他的仍然当成html来使用。
如果没有mod_perl,可以用SetHandler cgi-script代替perl-script,一样可以用,PerlHandler就不用了。 (没试过)
(3).初始化
1)初始化MySQL数据库
运行mysql,在提示符下运行"\. initdb-mysql"。这样就建好了LXR用户,建好了LXR数据库可其中一系列表格,并让LXR能全权访问LXR数据库,但没有访问其他库的权限,而且,也不用密码。
2)建glimpse索引
在/usr/local/LXR/src/kernel/下运行''find . -name "*.[chS]" -follow glimpseindex -H . -o -F'',索引所有.c、.h、.S(汇编)文件。这个过程比较耗时,但比起下一个过程来,就小巫见大巫了。
3)建identity索引
这是LXR精髓所在,在/usr/local/LXR/下运行''./genxref --version=kernel --url=http://10.129.6.244/LXR'',这个过程在我的机器上用了5个小时,其结果就是在MySQL中添东西。如果已经做过索引了,它就只关心那些修改过的或新的文件,速度就快多了。这个过程如果中断了,最好清空数据库重新来过,否则可能会有错误。
4)修改权限
最简单的办法就是把/usr/local/LXR/http下所有的文件都改成apache的属主。在/usr/local/LXR/下运行''chown apache.apache http -R''。
chmod命令使用可以参考:http://www.cnblogs.com/huqingyu/archive/2005/02/20/106392.html
4.startup
重启mysql和httpd,然后访问http://10.129.6.244/LXR/source/就可以了。比较奇怪的是,因为这个cgi允许用类似目录一样的形式(source/)来访问,所以,如果服务器端有更新,浏览器端仍会使用老的页面,refresh也没用。这时只有清空本地cache了。
5.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做成了两个脚本。
6.bugs
应该在源代码树的组织上。如果同时要索引kernel-2.4.18和kernel-2.2.19,逻辑上好像应该在kernel下建另一个连接指向2.2.19的代码,但实际上应该建一个kernel2与kernel并列在src目录下。
更新时看样子也会有问题,因为数据库里记录了2.4.18的目录信息,glimpse里也记录了2.4.18。重建实在耗时。
不知谁有更好的配置方案,尽管这做不了博士课题。
不知道有没有遗漏的地方。还多亏参考了别人已有的配置,尽管版本不同。
由于安装时失败过N次,这篇文章也改了N次,可能哪一步还不对,请再参考别的文章。
今天终于装好了,欣赏一下,呵呵。虽然没有www.oldlinux.org做出来的那种效果,但看看还是可以了的,什么时候再改改Perl脚本,让它看起来像oldlinux那样。
标签:
来源: 作者: 时间:2006/9/25 16:50:53