OpenGrok是一个快速,便于使用的源码搜索引擎与对照引擎,它能够帮助我们快速的搜索、定位、对照代码树。接下来就具体讲解Ubuntu 12.04 LTS
环境下OpenGrok
的安装及使用。
1.参照 UBUNTU 13.10 APACHE 2.2 通过 AJP 整合 TOMCAT 7 中讲述的方法,进行Tomcat,Apache2的配置安装。
2.安装ctags
用于对C\C++
代码的支持
1 |
$ sudo apt-get install exuberant-ctags |
3.下载并安装OpenGrok
可以到"http://opengrok.github.io/OpenGrok/"手工下载文件,然后上传到服务器,也可以直接用wget
命令来下载,一般选择安装在"/opt
"目录下面。
1 2 3 |
$ cd /opt $ wget http://java.net/projects/opengrok/downloads/download/opengrok-0.12.1.5.tar.gz |
解压缩文件到当前目录"/opt
"
1 |
$ tar -zxvf opengrok-0.12.1.5.tar.gz |
创建一个软链接,方便后续的修改
1 |
$ ln -s opengrok-0.12.1.5 opengrok |
拷贝"/opt/opengrok/lib/source.war
"到Tomcat7的工程目录"/var/lib/tomcat7/webapps/
"
1 |
$ sudo cp /opt/opengrok/lib/source.war /var/lib/tomcat7/webapps/ |
访问"http://localhost:8080/source/"确认OpenGrok是否已经安装成功,如果安装成功,出现下面的界面:
4.出于安全原因,禁止外网访问Tomcat的8080端口
只允许Tomcat在本地的8080端口监听即可,修改
1 |
$ sudo vim /var/lib/tomcat7/conf/server.xml |
添加 address="127.0.0.1"
1 2 3 |
<Connector port="8080" address="127.0.0.1" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> |
重启Tomcat7
1 |
$ sudo service tomcat7 restart |
5.配置Apache2对Tomcat通过AJP进行反向代理
Apache2的配置文件“ /etc/apache2/sites-available/default
”中,增加如下配置:
1 2 3 4 |
#for Tomcat 7 openGrok ProxyPass /AndroidXRef/ ajp://127.0.0.1:8009/AndroidXRef/ ProxyPassReverse /AndroidXRef/ ajp://127.0.0.1:8009/AndroidXRef/ ServerName localhost |
Tomcat7的配置文件/var/lib/tomcat7/conf/server.xml
中增加如下配置<Context path="/AndroidXRef" docBase="source/"/>,解决跳转404问题。ProxyPass
后面必须携带“/”,否则就会出现404问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="/AndroidXRef" docBase="source/"/> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> |
6.配置OpenGrok
对源代码进行解析
设置要建立索引的源代码目录的位置,以存储在"/data/OpenGrok/Android_4.2
"上的Android
代码为例子:
1 2 3 |
$ export OPENGROK_INSTANCE_BASE=/data/OpenGrok/Android_4.2 $ export OPENGROK_WEBAPP_CONTEXT=AndroidXRef |
注意:
由于我们使用了Apache2的反向代理才需要设置 OPENGROK_WEBAPP_CONTEXT
,如果没有设置反向代理,请不要设置OPENGROK_WEBAPP_CONTEXT
。
在使用反向代理的时候如果不设置OPENGROK_WEBAPP_CONTEXT
会导致在点击具体的变量定义的时候,出现404.
不使用反向代理的时候请只设置OPENGROK_INSTANCE_BASE
创建源代码索引
1 2 3 4 5 6 7 8 9 10 11 |
#删除源代码下面可能存在的".git",".svn"隐藏目录 $ cd /data/OpenGrok/Android_4.2 $ find . -name .svn -print0 | xargs -0 rm -r -f $ find . -name .git -print0 | xargs -0 rm -r -f #编译工具是没有必要的目录 $ rm -rf prebuilts $ bash /opt/opengrok/bin/OpenGrok index /data/OpenGrok/Android_4.2 |
执行时间在40分钟左右,执行完成。生成的索引文件在源代码的"data
"目录下面,重建索引的时候需要执行如下操作,才能再次建立索引
1 2 3 4 5 |
$ rm -rf data $ rm -rf log $ rm -rf logging.properties |
注意,请务必删除源代码中的"prebuilts"目录,这个目录下面存储的是一系列的编译工具,在浏览代码的时候,完全用不上,但是占据的磁盘空间确是巨大的。
注意,如果服务器上面的内存比较有限,请使用如下命令进行内存限制,否则建立索引的时候,会触发内存不足的情况:
1 |
$ export JAVA_OPTS="-Xmx1024m" |
修改OpenGrok
配置文件
1 2 3 |
$ cd /var/lib/tomcat7/webapps/source/WEB-INF $ sudo vim web.xml |
修改其中的
1 2 3 4 5 |
<context-param> <param-name>CONFIGURATION</param-name> <param-value>/var/opengrok/etc/configuration.xml</param-value> <description>Full path to the configuration file where OpenGrok can read it's configuration</description> </context-param> |
为具体的工程目录"/data/OpenGrok/Android_4.2
",修改后的配置如下:
1 2 3 4 5 |
<context-param> <param-name>CONFIGURATION</param-name> <param-value>/data/OpenGrok/Android_4.2/etc/configuration.xml</param-value> <description>Full path to the configuration file where OpenGrok can read it's configuration</description> </context-param> |
刷新浏览器,可以看到Android_4.2
的源码可以搜索出来了。