搭建Ubuntu平台上的代码搜索引擎
2015-10-06 21:56
483 查看
由于平时需要阅读Android code, 我发现像androidxref.com这样的网站提供了非常方便的代码搜索功能,在源代码文件之间提供了高效的相互索引。
利用空余时间,我研究了一下如何搭建这样的系统,以便将来自己可以搭建其他代码的搜索引擎。根据网上找到的资料,基本上是有LXR和OpenGrok两种引擎。我按照找到的资料自己动手搭建了一下,遇到了一些问题并逐一解决,在此和大家分享一下,大部分的内容也是借鉴了其他博客的经验。
一. LXR
LXR是"the Linux Cross Reference"的缩写。LXR的opensource project 的位置在 http://sourceforge.net/projects/lxr/
LXR是用perl编写的,提供了以下功能,
1. 支持多种语言,包括 C, C++, Java, Python, Ruby, Perl, COBOL。
2. 迅速查找标识符的定义和使用位置。
3. 快速查找代码。
4. 支持大量代码
5. 支持多版本,并在多个版本之间进行比较。
LXR在Ubuntu环境下,是通过Apache服务器来访问的,其基本步骤是,
1. 通过LXR的配置步骤产生Apache服务器配置文件apache-lxrserver.conf,这个文件指向了LXR工作目录。
2. 通过genxref在LXR工作目录下建立索引数据库,基于mysql。
3. 当使用http://<IP>/source访问时,source是一个perl文件,它会访问索引数据库来建立代码访问页面。(这里我还没有仔细研究source这个perl文件)
安装步骤:
1. 安装apache
sudo apt-get install apache2
sudo apt-get install libapache2-mod-perl2 libapache2-mod-apreq2
如果没有执行第二个安装命令,后面启动Apache是会出现错误,Invalid command 'PerlTaintCheck'
2. 安装perl
sudo apt-get install perl
我的perl版本是v5.18.2
3. 安装mysql
我的系统里面已经安装好mysql,版本是5.5.42-standard
4. 安装ctags
sudo apt-get install ctags
5. 安装File::MMagic
sudo cpan
cpan[1]>install File::MMagic
这是在genxref中要用到的。
6. 安装glimpse
sudo apt-get install flex
wget http://webglimpse.net/trial/glimpse-latest.tar.gz
tar xzf glimpse-latest.tar.gz
cd glimpse-4.18.6/
./configure
make
sudo make install
7. 安装LXR
wget http://skylineservers.dl.sourceforge.net/project/lxr/stable/lxr-2.0.3.tgz
tar xzf lxr-2.0.3.tgz
cd lxr-2.0.3
./genxref –checkonly (检查工具是否安装好)
./scripts/configure-lxr.pl -vv (配置lxr)
重要的配置项:(其他回车即可)
--- Host name or IP? [//localhost] > //<IP address> (如果要通过IP地址而不是localhost来访问的话,在这里填入IP地址)
- Directory for glimpse databases? > /home/<user name>/lxr-2.0.3/glimpse-DB (user name填你的用户名)
- Caption in page header? (e.g. Project XYZZY displayed by LXR) > lxr
- Source directory? (e.g. /home/myself/project-tree) > /home/<user name>/Android
- Version name? > 5.1.1_r1
- Database name? > lxr
- DB user name? [lxr] > root
- DB password? [lxrpw] > 123456
8. 初始化数据库
./custom.d/initdb.sh
输入mysql的root密码123456
9. 修补LXR的一个bug,不然后面genxref会报错。源文件少了一个右括号。
--- lxr/lib/LXR/Lang/Cobol.pm 2013-11-08 17:04:27.000000000 +0800
+++ lxr/lib/LXR/Lang/Cobol.pm 2015-10-06 09:24:02.027642181 +0800
@@ -49,7 +49,7 @@
? join($2, @{$$self{'itag'}})
: $2
- )
+ ))
);
}ge;
10. 配置Apache服务器
cd lxr-2.0.3
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
sudo apachectl restart
12. 把Android代码放在/home/<user name>/Android/5.1.1_r1目录下
(这和上面的版本配置要一致)
13. 生成代码索引,需要较长时间
cd lxr-2.0.3
./genxref –url=http://<IP address>/lxr –version=5.1.1_r1 (这和上面的版本配置要一致)
14. 我们可以通过http://localhost/lxr/source来访问代码索引。如果代码索引没有完成,我们仍然可以看到代码,但无法索引。
如果要重新生成代码索引,我们可以删除数据库,然后重复上面的第13步。
删除数据库:rm -rf lxr-2.0.3/glimpse-DB/*
最后我们看到的界面是这样的,
生成索引的情形
参考网站: http://x-slam.com/kernel_source_code_view_server_bylxr
二. OpenGrok
OpenGrok是用Java编写的另一个代码搜索引擎,Opensource的网站在http://opengrok.github.io/OpenGrok/
Grok在英文里的意思是:心领神会,神交。这代表着OpenGrok能够深入理解各种代码的含义。androidxref.com用的就是OpenGrok引擎。
与LXR不同的是,OpenGrok需要使用Tomcat,作为一个Tomcat的web应用而部署的。OpenGrok需要Java 1.7
OpenGrok将代码索引生成在/var/opengrok/data目录下。OpenGrok作为Tomcat的web应用被启动,然后读取代码索引文件。
安装步骤:
1. 安装Java 1.7
sudo apt-get install oracle-java7-installer
(如果不能安装换成 sudo apt-get install openjdk-7-jdk ant)
2. 安装Tomcat
sudo apt-get install tomcat7
3. 获取OpenGrok包
https://codeload.github.com/OpenGrok/OpenGrok/tar.gz/0.12.1
tar xzf opengrok-0.12.1.tar.gz
4. 编译OpenGrok
cd opengrok-0.12.1
ant
ant package
sudo cp dist/source.war /var/lib/tomcat7/webapps/
5. 建立OpenGrok目录
$sudo mkdir -p /var/opengrok/etc
$sudo mkdir -p /var/opengrok/data
6. 建立索引
sudo ./OpenGrok index <SRC_ROOT> (SRC_ROOT就是代码目录,此目录下的每一个子目录都会成为OpenGrok里面的一个project,在右边的选项里面出现。)
如果遇到这样的问题,是因为没有安装ctags。
Loading the default instance configuration ...
ERROR: Unable to determine Exuberant CTags command name for Linux 3.16.0-53-generic
FATAL ERROR: Missing Dependent Application - Exuberant CTags - Aborting!
运行 sudo apt-get install ctags 安装ctags
最后我们访问http://<IP address>:8080/source会看到这样的界面,
如果要重新生成代码索引,比如增加或者删除项目,需要把数据库删除然后重新生成。(目前我还没有找到更有效的方法)
$sudo rm -rf /var/opengrok
$sudo mkdir /var/opengrok/etc
$sudo mkdir /var/opengrok/data
$cdOpenGrok-0.12.1
$sudo ./OpenGrok index <SRC_ROOT>
$ant
$ant package
$sudo cp dist/source.war /var/lib/tomcat7/webapps/
OpenGrok代码目录下的README.txt里有更多的参考内容,比如如何定制化网站的内容。
参考文档: http://blog.csdn.net/michaelpp/article/details/9258563
三. LXR和OpenGrok的简要对比
在同样的Ubuntu服务器上,OpenGrok的效率比LXR要高很多。扫描整个Android AOSP代码,LXR需要18个小时以上,而OpenGrok只需要4个小时。
利用空余时间,我研究了一下如何搭建这样的系统,以便将来自己可以搭建其他代码的搜索引擎。根据网上找到的资料,基本上是有LXR和OpenGrok两种引擎。我按照找到的资料自己动手搭建了一下,遇到了一些问题并逐一解决,在此和大家分享一下,大部分的内容也是借鉴了其他博客的经验。
一. LXR
LXR是"the Linux Cross Reference"的缩写。LXR的opensource project 的位置在 http://sourceforge.net/projects/lxr/
LXR是用perl编写的,提供了以下功能,
1. 支持多种语言,包括 C, C++, Java, Python, Ruby, Perl, COBOL。
2. 迅速查找标识符的定义和使用位置。
3. 快速查找代码。
4. 支持大量代码
5. 支持多版本,并在多个版本之间进行比较。
LXR在Ubuntu环境下,是通过Apache服务器来访问的,其基本步骤是,
1. 通过LXR的配置步骤产生Apache服务器配置文件apache-lxrserver.conf,这个文件指向了LXR工作目录。
2. 通过genxref在LXR工作目录下建立索引数据库,基于mysql。
3. 当使用http://<IP>/source访问时,source是一个perl文件,它会访问索引数据库来建立代码访问页面。(这里我还没有仔细研究source这个perl文件)
安装步骤:
1. 安装apache
sudo apt-get install apache2
sudo apt-get install libapache2-mod-perl2 libapache2-mod-apreq2
如果没有执行第二个安装命令,后面启动Apache是会出现错误,Invalid command 'PerlTaintCheck'
2. 安装perl
sudo apt-get install perl
我的perl版本是v5.18.2
3. 安装mysql
我的系统里面已经安装好mysql,版本是5.5.42-standard
4. 安装ctags
sudo apt-get install ctags
5. 安装File::MMagic
sudo cpan
cpan[1]>install File::MMagic
这是在genxref中要用到的。
6. 安装glimpse
sudo apt-get install flex
wget http://webglimpse.net/trial/glimpse-latest.tar.gz
tar xzf glimpse-latest.tar.gz
cd glimpse-4.18.6/
./configure
make
sudo make install
7. 安装LXR
wget http://skylineservers.dl.sourceforge.net/project/lxr/stable/lxr-2.0.3.tgz
tar xzf lxr-2.0.3.tgz
cd lxr-2.0.3
./genxref –checkonly (检查工具是否安装好)
./scripts/configure-lxr.pl -vv (配置lxr)
重要的配置项:(其他回车即可)
--- Host name or IP? [//localhost] > //<IP address> (如果要通过IP地址而不是localhost来访问的话,在这里填入IP地址)
- Directory for glimpse databases? > /home/<user name>/lxr-2.0.3/glimpse-DB (user name填你的用户名)
- Caption in page header? (e.g. Project XYZZY displayed by LXR) > lxr
- Source directory? (e.g. /home/myself/project-tree) > /home/<user name>/Android
- Version name? > 5.1.1_r1
- Database name? > lxr
- DB user name? [lxr] > root
- DB password? [lxrpw] > 123456
8. 初始化数据库
./custom.d/initdb.sh
输入mysql的root密码123456
9. 修补LXR的一个bug,不然后面genxref会报错。源文件少了一个右括号。
--- lxr/lib/LXR/Lang/Cobol.pm 2013-11-08 17:04:27.000000000 +0800
+++ lxr/lib/LXR/Lang/Cobol.pm 2015-10-06 09:24:02.027642181 +0800
@@ -49,7 +49,7 @@
? join($2, @{$$self{'itag'}})
: $2
- )
+ ))
);
}ge;
10. 配置Apache服务器
cd lxr-2.0.3
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
sudo apachectl restart
12. 把Android代码放在/home/<user name>/Android/5.1.1_r1目录下
(这和上面的版本配置要一致)
13. 生成代码索引,需要较长时间
cd lxr-2.0.3
./genxref –url=http://<IP address>/lxr –version=5.1.1_r1 (这和上面的版本配置要一致)
14. 我们可以通过http://localhost/lxr/source来访问代码索引。如果代码索引没有完成,我们仍然可以看到代码,但无法索引。
如果要重新生成代码索引,我们可以删除数据库,然后重复上面的第13步。
删除数据库:rm -rf lxr-2.0.3/glimpse-DB/*
最后我们看到的界面是这样的,
生成索引的情形
参考网站: http://x-slam.com/kernel_source_code_view_server_bylxr
二. OpenGrok
OpenGrok是用Java编写的另一个代码搜索引擎,Opensource的网站在http://opengrok.github.io/OpenGrok/
Grok在英文里的意思是:心领神会,神交。这代表着OpenGrok能够深入理解各种代码的含义。androidxref.com用的就是OpenGrok引擎。
与LXR不同的是,OpenGrok需要使用Tomcat,作为一个Tomcat的web应用而部署的。OpenGrok需要Java 1.7
OpenGrok将代码索引生成在/var/opengrok/data目录下。OpenGrok作为Tomcat的web应用被启动,然后读取代码索引文件。
安装步骤:
1. 安装Java 1.7
sudo apt-get install oracle-java7-installer
(如果不能安装换成 sudo apt-get install openjdk-7-jdk ant)
2. 安装Tomcat
sudo apt-get install tomcat7
3. 获取OpenGrok包
https://codeload.github.com/OpenGrok/OpenGrok/tar.gz/0.12.1
tar xzf opengrok-0.12.1.tar.gz
4. 编译OpenGrok
cd opengrok-0.12.1
ant
ant package
sudo cp dist/source.war /var/lib/tomcat7/webapps/
5. 建立OpenGrok目录
$sudo mkdir -p /var/opengrok/etc
$sudo mkdir -p /var/opengrok/data
6. 建立索引
sudo ./OpenGrok index <SRC_ROOT> (SRC_ROOT就是代码目录,此目录下的每一个子目录都会成为OpenGrok里面的一个project,在右边的选项里面出现。)
如果遇到这样的问题,是因为没有安装ctags。
Loading the default instance configuration ...
ERROR: Unable to determine Exuberant CTags command name for Linux 3.16.0-53-generic
FATAL ERROR: Missing Dependent Application - Exuberant CTags - Aborting!
运行 sudo apt-get install ctags 安装ctags
最后我们访问http://<IP address>:8080/source会看到这样的界面,
如果要重新生成代码索引,比如增加或者删除项目,需要把数据库删除然后重新生成。(目前我还没有找到更有效的方法)
$sudo rm -rf /var/opengrok
$sudo mkdir /var/opengrok/etc
$sudo mkdir /var/opengrok/data
$cdOpenGrok-0.12.1
$sudo ./OpenGrok index <SRC_ROOT>
$ant
$ant package
$sudo cp dist/source.war /var/lib/tomcat7/webapps/
OpenGrok代码目录下的README.txt里有更多的参考内容,比如如何定制化网站的内容。
参考文档: http://blog.csdn.net/michaelpp/article/details/9258563
三. LXR和OpenGrok的简要对比
LXR | OpenGrok | |
编程语言 | Perl | Java |
Web服务器 | Apache | Tomcat |
分级管理 | 多个版本 | 多个项目(project) |
相关文章推荐
- [C++] c pointer
- java的JDK环境配置详细说明
- c语言-2048
- Struts2中参数传递与OGNL
- CXF框架集成到Spring
- javaWEB项目心得之模块开发步骤
- PHP_EOL
- 结对项目文档及结对编程感悟
- Struts2 MySQL数据库访问
- 《C++primer(第五版)》学习之路-第十九章:特殊工具与技术
- PHP学习笔记(04)——函数
- spring整合struts2、mybatis的配置
- 【Python】Learn Python the hard way, ex4 使用变量
- Unix编程学习笔记---文件系统与 i节点
- Matlab-GUI 这个例子包含了几乎所有的matlab按钮
- spring 作用域之单例模式/原型模型
- Java EE (8) -- Java EE Patterns
- Matlab GUI设计——文件读取和保存uigetfile,uiputfile
- Java反射实践
- [深入理解Java虚拟机]第四章 虚拟机性能监控与故障处理工具