OpenGrok搭建

0x00: 起因

工作环境换到了mac之后很多东西都不一样了。最近在看Linux kernel几个漏洞,需要阅读Linux源码,然而在windows上使用习惯了source insight后,macOS上一脸懵逼,不知道啥工具好使。了解到OpenGrok之后,决定搭建一个,主要是添加源码方便,也方便实用,感觉还不错。

其实vim或者subl这类编辑器看源码也可以,只是我还没习惯。所以就先OpenGrok啦~

0x01: 准备工作

根据github上项目的wiki可知,需要的准备工作如下:

  • JDK 1.8 or higher
  • {OpenGrok binaries from https://github.com/OpenGrok/OpenGrok/releases (either the package for Solaris, or .tar.gz with binaries, NOT the src !)
  • Exuberant Ctags for analysis (https://github.com/universal-ctags is recommended)
  • A servlet container like GlassFish or Tomcat (8.x or later) also running with java at least 1.8
  • If history is needed, appropriate binary (in some cases also cvs/svn repository) must be present on the system (e.g. Subversion or Mercurial or SCCS or … )
  • 2GB of memory for indexing process using OpenGrok script (can use less, this is scaled for bigger deployments)
  • a recent browser for clients - IE, Firefox, recent Chrome or Safari
    sufficient ULIMIT settings (refer to README)

我在自己服务器上搭建的,系统是ubuntu,在安装了jdk8之后,去下载了tomcat和opengrok的包。
这里说个题外话,使用apt-get方式安装的tomcat8很奇怪,服务起来了,但是curl访问本地8080的时候,没回应,所以我最后去官网下载了一个tomcat的包。

0x02:过程

如果是很多人用,推荐专门创建一个用户,做好权限的隔离,个人使用的话无所谓了。
准备工作
  • 找一个目录,把下载来的tomcat和opengrok解压了。
  • 启动tomcat,然后访问http://127.0.0.1:8080,确定tomcat正常工作。
1
ubuntu@VM-64-163-ubuntu:~$ ./apache-tomcat-8.5.16/bin/startup.sh
  • 为项目创建目录,拿我自己的举例子:
1
path/to/your/opengrok_projects/prj1

目录结构如下:

1
2
3
path/to/your/opengrok_projects/prj1
|-----/prj2
|-----/prj3
部署opengrok
  • 部署
1
OPENGROK_TOMCAT_BASE=path/to/apache-tomcat path/to/opengrok/bin/OpenGrok deploy
  • 创建索引
1
OPENGROK_VERBOSE=true OPENGROK_INSTANCE_BASE=./opengrok_data ./opengrok-1.1-rc5/bin/OpenGrok  index ./opengrok_projects

创建索引时,会创建三个目录,一个data目录来存放索引信息,一个etc目录创建配置信息和一个log目录。

  • 修改配置文件

path/to/apache-tomcat/webapps/source/WEB-INF目录下的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>

中的/var/opengrok/etc/configuration.xml
修改成对应的opengrok的path/to/opengrok/data/etc/configuration.xml

1
2
3
4
5
<context-param>
<description>Full path to the configuration file where OpenGrok can read its configuration</description>
<param-name>CONFIGURATION</param-name>
<param-value>/home/ubuntu/opengrok_data/etc/configuration.xml</param-value>
</context-param>

我这里是这个样子的。

  • 把源码放进project目录

我这里放的是linux-3.18.1的源码。以后如果想更新的话,直接放进去,然后重新生成索引就好了。

0x03:效果

0x04:参考

wiki

OpenGrok安装使用指南