本文介绍ubuntu2404上的opengrok搭建步骤,opengrok是专用于大型代码查看的工具。通过ctags支持源码搜索。本步骤涉及的安装组件有三个: opengrok,tomcat,ctags
apt install -y tomcat10
如果没有java的话,安装一下java
apt install openjdk-21-jdk
此时重启tomcat10可以看到服务应该正常
systemctl restart tomcat10
网页登录后看到如下画面即可

下载代码和安装
$ git clone https://github.com/universal-ctags/ctags.git $ cd ctags $ ./autogen.sh $ ./configure # use --prefix=/where/you/want to override installation directory, defaults to /usr/local $ make $ make install # may require extra privileges depending on where to install
我们先找到最新的opengrok的release

此时拉取release bin即可
wget https://github.com/oracle/opengrok/releases/download/1.14.11/opengrok-1.14.11.tar.gz
将其解压
tar xvzf opengrok-1.14.11.tar.gz
然后找到安装python管理工具
python3 -m pip install tools/opengrok-tools.tar.gz
创建工作目录
export OPENGROK_HOME=/root/work/opengrok/opengrok-1.14.11 mkdir OPENGROK_HOME/{src,data,dist,etc,log}
复制war包给tomcat
cp $OPENGROK_HOME/lib/source.war /var/lib/tomcat10/webapps/
修改tomcat的端口,这里以22222端口为例
vim /etc/tomcat10/server.xml <Connector port="22222" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" />
再次重启tomcat
systemctl restart tomcat10
我们22222端口能进入即可,此时进入localhost:22222/source可以看到初始化页面如下

注意,此时没有Repository和Project
接下来就是索引代码仓库了,因为我需要反复阅读内核代码,所以索引内核源码,如下
ln -sf path/to/kernel $OPENGROK_HOME/src/kernel
这样我们开始index,index的脚本如下
export OPENGROK_HOME=/root/work/opengrok/opengrok-1.14.11 java -Xmx16g \ -Djava.util.logging.config.file=${OPENGROK_HOME}/doc/logging.properties \ -jar ${OPENGROK_HOME}/lib/opengrok.jar \ -c /usr/local/bin/ctags \ -s ${OPENGROK_HOME}/src/ -d ${OPENGROK_HOME}/data -P -S -G \ -W ${OPENGROK_HOME}/etc/configuration.xml -U http://localhost:22222/source
注意,如果需要索引git commit信息,那么加上-H,不过会浪费内存。
因为我是mainline kernel,commit message实在太多,索引不了,所以没有-H
这里索引会大概1-2小时,等待结束即可
当索引完成之后,我们直接登入localhost:22222/source再看

可以看到有kernel仓库了,我们直接找关键函数,例如scheduler_tick,直接找到信息如下

可以看到,准确找到了sched/core.c的位置
https://github.com/oracle/opengrok/wiki/How-to-setup-OpenGrok