Linux OpenGrok搭建

林奋斗同学發表於2024-06-26

目錄
  • 一、目的
  • 二、環境
  • 三、相關概念
    • 3.1 OpenGrok
    • 3.2 CTags
    • 3.3 Tomcat
  • 四、OpenGrok搭建
    • 4.1 安裝jdk
    • 4.2 安裝ctags依賴
    • 4.3 安裝universal-ctags
      • 4.3.1 下載universal-ctags
      • 4.3.2 編譯&&安裝universal-ctags
    • 4.4 安裝Tomcat
      • 4.4.1 下載&&解壓Tomcat
      • 4.4.2 啟動Tomcat
      • 4.4.3 驗證Tomcat
    • 4.5 安裝OpenGrok
    • 4.6 基於Tomcat搭建OpnGrok服務
  • 五、相關問題
    • 5.1 TomCat訪問source異常404?
    • 5.2 OpenGrok沒有projects選擇項?
    • 5.3 如何修改Tomcat埠?
  • 六、參考資料

一、目的

Android原始碼太龐大,涉及幾十個G、上千萬個檔案,普通的IDE都無法完全載入全部程式碼,更不用談搜尋、索引,這對於Android原始碼的學習、除錯非常不利。
OpenGrok是一個原始碼搜尋及交叉引用查詢引擎,OpenGrok的引入可以幫助我們更好地在浩如煙海的原始碼裡找到自己需要的那坨程式碼。

二、環境

  1. 系統:Ubuntu 14.04
  2. CPU:13th Gen Intel(R) Core(TM) i5-13500

三、相關概念

3.1 OpenGrok

OpenGrok為一個方便快速的原始碼搜尋及交叉引用查詢引擎。它以Java編寫,可用於原始碼搜尋、交叉引用查詢、以及原始碼樹定位。它支援多種編碼語言和多種程式碼版本控制引擎系統。

3.2 CTags

CTags是一個在Linux系統中廣泛使用的工具,它可以幫助程式設計師更有效地瀏覽和管理大型程式碼庫。CTags能夠建立一個索引檔案,其中包含程式碼庫中的函式、類、結構體等關鍵詞的位置資訊。

3.3 Tomcat

Tomcat是一個免費的開放原始碼的Web應用伺服器,屬於輕量級應用伺服器,由Apache軟體基金會(Apache Software Foundation)的Jakarta專案開發。 它是一個Servlet容器,同時也是JSP(Java Server Pages)的一個容器,支援最新的Servlet和JSP規範。Tomcat的設計目標是提供一個可靠且易於使用的Web應用伺服器,特別適用於中小型系統和併發訪問使用者不是很多的場合。由於其技術先進、效能穩定且免費,Tomcat深受Java愛好者的喜愛,並得到了部分軟體開發商的認可,成為比較流行的Web應用伺服器之一。

四、OpenGrok搭建

4.1 安裝jdk

sudo apt install openjdk-11-jdk

4.2 安裝ctags依賴

sudo apt install autoconf automake

4.3 安裝universal-ctags

4.3.1 下載universal-ctags

git clone https://github.com/universal-ctags/ctags.git

4.3.2 編譯&&安裝universal-ctags

cd ctags
./autogen.sh 
./configure
make
sudo make install

4.4 安裝Tomcat

4.4.1 下載&&解壓Tomcat

# http://tomcat.apache.org/
tar -xvf apache-tomcat-10.1.24.tar.gz 

4.4.2 啟動Tomcat

sh apache-tomcat-10.1.24/bin/startup.sh

4.4.3 驗證Tomcat

訪問:http://127.0.0.1:8080/

Linux OpenGrok搭建

4.5 安裝OpenGrok

# https://github.com/oracle/opengrok
# https://github.com/oracle/opengrok/releases
tar -xvf opengrok-1.13.7.tar.gz 

4.6 基於Tomcat搭建OpnGrok服務

  1. 複製OpenGrok的源專案到Tomcat下。 Tomcat啟動後會自動解壓source.war,可以透過瀏覽器訪問:http://127.0.0.1:8080/source/
cp opengrok-1.13.7/lib/source.war apache-tomcat-10.1.24/webapps/ 
  1. 配置相關環境變數。
sudo vi ~/.bashrc
# opengrok
export JAVA_HOME=/usr
export OPENGROK_TOMCAT_BASE=/media/2TB/lzq/openGrok/apache-tomcat-10.1.24
export CATALINA_HOME=/media/2TB/lzq/openGrok/apache-tomcat-10.1.24
export OPENGROK_APP_SERVER=Tomcat
export OPENGROK_INSTANCE_BASE=/media/2TB/lzq/openGrok/opengrok-1.13.7
export LANG=zh_CN.UTF-8
  1. 使能環境變數
source ~/.bashrc
  1. 建立相關目錄
 mkdir opengrok-1.13.7/etc opengrok-1.13.7/src opengrok-1.13.7/data  opengrok-1.13.7/history
  1. 將待索引程式碼複製到src目錄下。 建議建立一個軟連結,不然多一份程式碼佔用空間。
cp -r xxx opengrok-1.13.7/src/ 
  1. 生成索引 (之後每次在src目錄下有更新需要重新索引)。在opengrok-1.13.7/data/下會有相關索引資訊,也是很佔空間,此過程費時,這臺拖拉機索引一次用了6天(粗略估算了一下,一分鐘僅能掃描100個檔案)。
java -jar opengrok-1.13.7/lib/opengrok.jar -P -S -v -s opengrok-1.13.7/src -d opengrok-1.13.7/data -H --repository  opengrok-1.13.7/history -W opengrok-1.13.7/etc/configuration.xml
  1. 配置configuration.xml路徑。 索引生成後,會生成opengrok-1.13.7/etc/configuration.xml檔案,需要讓tomcat下的專案引用該配置。
# apache-tomcat-10.1.24/webapps/source/WEB-INF/web.xml
<context-param>
    <description>Full path to the configuration file where OpenGrok can read its configuration</description>
    <param-name>CONFIGURATION</param-name>
    <param-value>/media/2TB/lzq/openGrok/opengrok-1.13.7/etc/configuration.xml</param-value>
</context-param>
  1. 驗證功能。 啟動tomcat,同時瀏覽器訪問http://127.0.0.1:8080/source/, 大功告成。
Linux OpenGrok搭建

五、相關問題

5.1 TomCat訪問source異常404?

一開始我下載apache-tomcat-9.0.89,然後http://127.0.0.1:8080/source/, 一直出現404。經歷一系列各種亂七八糟的除錯後,始終起不來。
後面更新apache-tomcat-10.1.24,完美。原因不明。

5.2 OpenGrok沒有projects選擇項?

我最開始在opengrok-1.13.7/src/下建立了UIS7870資料夾,然後生成索引的目標目錄是指向:opengrok-1.13.7/src/,導致projects僅有UIS7870,故不顯示(具體可參考configuration.xml & apache-tomcat-10.1.24/webapps/source/menu.jspf);
後續將目標索引目錄修改成opengrok-1.13.7/src/UI7870/即可。

5.3 如何修改Tomcat埠?

  • 將server埠修改為8006
  • 將HTTP埠修改為8085
  • 將AJP埠修改為8010
# sudo cat apache-tomcat-10.1.24/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">
 
<Connector port="8085" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
 
<Connector protocol="AJP/1.3"
               address="::1"
               port="8010"
               redirectPort="8443" />

六、參考資料

  1. OpenGrok搭建
    https://blog.csdn.net/weixin_39577288/article/details/120565619
  2. OpenGrok介紹
    https://www.jianshu.com/p/3371d3b213d2

相關文章