ref: http://damocles.blogbus.com/tag/lxr/
Linux Cross Reference工具在很多网站上都有,不过很多都是国外的网站总是上不去,或者没有适合自己的版本。还是自己配置一下的好。而且可以举一反三,配好了LXR,还可以搞个FXR,XEN-XR什么的。很麻烦但是很有用。
我参考了上面的文章,加了一些内容。整理了一下原作者的配置顺序
配置步骤:
(1)安装lxr。我直接用新立得
note:lxr会安装apache2,perl,和PostgreSql。这些都会自动配置好。
不过还得自己下这两个东西:
libapache2-mod-perl2:让apache能运行perl脚本的插件,装好后在/etc/apache2/mods-*目录里
glimpse:需要先装flex。(渣ubuntu连flex都没有)然后在http://webglimpse.net/download.php 下载以后安装。
(2)lxr的安装目录为 /usr/share/lxr/,我们把需要索引的源代码放到(链接到)/usr/share/lxr/source/下,目录名字为版本号,如2.6.35
然后新建文件/usr/share/lxr/source/versions,文件中写入2.6.35。
创建文件/usr/share/lxr/source/defversion,意思为默认版本,我们写入2.6.35
note:目录名字可以任取,然后写入versions 即可。
(3)建立索引目录,新建目录/usr/share/lxr/databases,然后在databases目录下创建目录2.6.35
(4) 生成数据文件xref和glimpse索引文件
cd /usr/share/lxr/source/
sudo genxref 2.6.35/
sudo glimpseindex -H . 2.6.35
note: 长时间等待,因为要扫描文本处理。数据和索引加起来差不多上G 最后还要把生成的所有文件(xref, fileidx, .g**的隐藏文件)挪到database文件夹去,修改权限,让所有用户可读。**
(4.5) 实际使用中 发现lxr在查找源码时使用的相对路径,但是我的glimpseindex 4.1版本 生成的.glimpse-filenames索引是按绝对路径来的。结果就成了这样
. 查询:viktor-Linux/arch/x86/aaaaa.c
.warning: can' t find /usr/share/lxr/source/2.6.35/usr/src/linux-source-2.6.35/arch/x86/aaaaa.c
一大串,而且把代码的真实路径(不是链接的路径)爆出来了
解决:
sudo sed -i 's/\/usr\/src\/linux-source-2.6.35\///' .glimpse_filenames
用sed把.glimpse-filenames这个文件编辑一下,把绝对路径去掉就行了
sed的正则里面一堆转义字符看起来好别扭……虽然一般的shell脚本,用单引号就可以避免转义,但是sed有自己的特殊字符,比如斜杠,所以还得转义一次。调了好半天。
(5)配置LXR,主要修改的文件是/usr/share/lxr/http/lxr.conf
这一步很关键。配不好各种出错 要修改的5处:
# Define the base url for the LXR files.
baseurl: http://localhost/lxr/http/
# The source is here.
sourceroot: /usr/share/lxr/source/$v 一定是源码的根目录。这里如果什么都不填,网站上source页面就会把你的根目录爆出来
srcrootname: viktor-Linux 这个随便填。
# The database files go here.
dbdir: /usr/share/lxr/databases/$v glimpse文件的路径。这里把g文件和xref文件放在一起了
# Glimpse can be found here.
glimpsebin: /usr/share/glimpse/ glimpse程序的路径。自己安装的时候渣技术错放到share目录去了……应该是在/usr/bin的
#glimpsedir: /usr/share/lxr/databases/$v 不是glimpsedir……
后面的正则表达式不用管
(6)配置apache2,新建文件 /etc/apache2/sites-available/lxr,写入以下代码
Alias /lxr /usr/share/lxr
<Directory /usr/share/lxr>
Options All
AllowOverride All
</Directory>
注:这是让client访问apache2下localhost/时直接访问到/usr/share/lxr,以隐藏lxr的真实目录。
然后执行 sudo ln /etc/apache2/sites-available/lxr -s /etc/apache2/sites-enabled/lxr 把它链过去
创建文件/usr/share/lxr/http/.htaccess ,写入以下代码:
<Files ~ (search|source|ident|diff|find){1}gt;
SetHandler cgi-script
</Files>
注:这是为了让perl起作用,让apache2的mod_perl来执行http目录下的perl文件,而不是下载这个文件。
(6.5)修改apache主页。 想让localhost一打开就进入identifier search页面,修改/etc/apache2/sites-enabled/000-default文件。
加入
DocumentRoot "/usr/share/lxr/http/ident"
DirectoryIndex blurb.html
就可以了
(7)重启apache2
/etc/init.d/apache2 restart
打开localhost,大功告成。
note:最常用的identifier search和file search很好用,不过diff markup和freetext search还是有些问题。也许是glimpse的使用不当。