首頁 > 軟體

Ubuntu搭建OpenGrok環境閱讀Linux核心原始碼

2020-06-16 17:29:06

1 OpenGrok介紹


OpenGrok 是一個快速, 便於使用的原始碼搜尋引擎與對照引擎, 它能夠幫助我們快速的搜尋、定位、對照程式碼樹. 接下來就具體講解一下 OpenGrok 的安裝及使用.

2 安裝OpenGrok


2.1 安裝JAVA執行環境


OpenGrok 是基於 JAVA 的, 因此我們首先需要 JDKJRE 來支援其執行

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install Oracle-java8-installer
sudo apt-get install oracle-java8-set-default

具體安裝請參照 Ubuntu安裝JDK詳解

2.2 安裝Web伺服器-Tomcat


首先大家應該明白 OpenGrok 是一個 Web 系統, 因此要共用 OpenGrok 搜尋引擎, 需要安裝 Web 伺服器.

Ubuntu 環境下, 推薦使用 Tomcat.

Ubuntu14.04 的源中已經提供了Tomcat 7 的包, 參見

http://packages.ubuntu.com/trusty/tomcat7

  • 安裝 Tomcat7, 直接從源中安裝 Tomcat7.
sudo apt-get install tomcat7
  • 啟動 Tomcat7
sudo service tomcat7 start

或者

sudo /etc/init.d/tomcat7 start

啟動 Tomcat 服務後, 在瀏覽器中輸入網址

http://localhost:8080

能夠進入以下頁面證明Tomcat執行成功.

更加詳細的安裝, 請參照Ubunt安裝和設定Tomcat8服務

2.3 安裝OopenGrok


安裝好 Tomcat 後, 接下來就是設定 OpenGrok 了.

OpenGrok 下載地址 :

http://opengrok.github.io/OpenGrok

在該網址中可以下載 OpenGrok 的編譯檔案, 也可以下載原始檔. 在此我們直接下載編譯檔案(對OpenGrok感興趣的同學可以下載原始碼檢視究竟), 下載後通過以下命令進行解壓:

tar xvzf opengrok-0.11.1.tar.gz -C /opt

2.4 設定OpenGrok


如果希望 OpenGrok 能夠正常執行, 則需要很多環境變數, 如果我們按照 OpenGrok的要求安裝 jdk , TomcatOpenGrok , 並建立好目錄結構的話, 這些環境變數在執行 OpenGrok 指令碼的時候會被正確設定, 但是如果我們希望設定更加靈活的話, 還是自定義目錄結構, 然後手動的設定這些環境變數吧,

環境變數的設定如下

#cat mysetenv.sh

#-------------------------------------------------------------------------------
#   - JAVA_HOME                   Full Path to Java Installation Root
#   - JAVA                        Full Path to java binary (to enable 64bit JDK)
#   - JAVA_OPTS                   Java options (e.g. for JVM memory increase
#-------------------------------------------------------------------------------
JAVA_HOME=/usr/lib/jvm/java-8-oracle
JRE_HOME=$JAVA_HOME/jre
JAVA_BIN=$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME PATH CLASSPATH



#-------------------------------------------------------------------------------
#   - OPENGROK_DISTRIBUTION_BASE  Base Directory of the OpenGrok Distribution
#   - OPENGROK_INSTANCE_BASE      Base Directory of the OpenGrok User Data Area
#   - EXUBERANT_CTAGS             Full Path to Exuberant CTags
#   - OPENGROK_CTAGS_OPTIONS_FILE Full path to file with extra command line
#                                 options for CTags program (for its --options
#-------------------------------------------------------------------------------
#  opengrok home directory
export OPENGROK_INSTANCE_BASE=/opt/opengrok
export SCRIPT_DIRECTORY=$OPENGROK_INSTANCE_BASE/bin
export OPENGROK_DISTRIBUTION_BASE=$OPENGROK_INSTANCE_BASE/lib


#  source code root
export SRC_ROOT=$OPENGROK_INSTANCE_BASE/database/src
#  generated data root
export DATA_ROOT=$OPENGROK_INSTANCE_BASE/database/data
#
EXUB_CTAGS=/usr/bin/ctags


#-------------------------------------------------------------------------------
#   - OPENGROK_APP_SERVER         Application Server ("Tomcat" or "Glassfish")
#   - OPENGROK_WAR_TARGET_TOMCAT  Tomcat Specific WAR Target Directory
#   - OPENGROK_WAR_TARGET_GLASSFISH Glassfish Specific WAR Target Directory
#   - OPENGROK_WAR_TARGET         Fallback WAR Target Directory
#   - OPENGROK_TOMCAT_BASE        Base Directory for Tomcat (contains webapps)
#   - OPENGROK_GLASSFISH_BASE     Base Directory for Glassfish
#                                 (contains domains)
#-------------------------------------------------------------------------------
export OPENGROK_APP_SERVER=Tomcat
export OPENGROK_TOMCAT_BASE=/opt/apache-tomcat
export OPENGROK_WAR_TARGET_TOMCAT=$OPENGROK_TOMCAT_BASE/webapps
export OPENGROK_WAR_TARGET=$OPENGROK_TOMCAT_BASE/webapps
export CATALINA_HOME=$OPENGROK_TOMCAT_BASE

完成後, 每次在執行 OpenGrok 之前就可以使用mysetenv.sh 指令碼來設定環境變數了

source mysetenv.sh

我們可以直接將這條命令載入 OpenGrok 指令碼的開頭

OpenGrok指令碼的資訊請參見https://github.com/OpenGrok/OpenGrok/blob/master/OpenGrok

如果執行出錯請檢視原始碼自行設定環境變數的資訊

解壓完成後進入到解壓目錄, 將 /opt/opengrok/lib 目錄下的 source.war 包拷貝到apache-tomcat/webapps 目錄下

或者執行

sudo ./OpenGrok deplay

系統會自動將 $OPENGROK_DISTRIBUTION_BASE/source.war 拷貝到 OPENGROK_WAR_TARGET_TOMCAT

在瀏覽器中輸入

http://localhost:8080/source/

看到以下介面證明OpenGrok執行成功.

接下需要更改 apache-tomcat/webapps/source/WEB-INF 目錄下的web.xml組態檔

<context-param>
   <param-name>CONFIGURATION</param-name>
   <param-value>/opt/opengrok/etc/configuration.xml</param-value>
   <description>Full path to the configuration file where OpenGrok can read it's configuration</description>  
 </context-param>

設定 configuration.xml 的路徑為 opengrok/etc 設定目錄

提示

實驗發現這個xml不設定也是可以正常使用的

2.5 建立原始碼索引


下面我們就需要為我們的原始碼設定索引了, OpenGrok 生成原始碼的索引資訊

設定的話需要如下環境變數

環境變數描述預設值
SRC_ROOT 待生成索引的原始碼路徑 ${OPENGROK_INSTANCE_BASE}/src
DATA_ROOT 存放生成的索引的路徑 ${OPENGROK_INSTANCE_BASE}/data

那麼我們直接在 opengrok 的安裝目錄 /opt/opengrok 下建立 srcdata目錄即可

但是我為了方便管理, 建立了一個 database 二級目錄, 將 srcdata 放在這個二級目錄裡面.

為了使得環境變數能夠正確識別, 我們可以修改 OpenGrok 指令碼的原始碼, 重置 SRC_ROOTDATA_ROOT 的值.

# 修改/opt/opengrok/bin/OpenGrok

SRC_ROOT="${OPENGROK_INSTANCE_BASE}/src"
改為
SRC_ROOT="${OPENGROK_INSTANCE_BASE}/database/src"

DATA_ROOT="${OPENGROK_INSTANCE_BASE}/data"
改為
DATA_ROOT="${OPENGROK_INSTANCE_BASE}/database/data"

但是由於我已經在 mysetenv.sh 中設定了 SRC_ROOTDATA_ROOT 的值, 因此我是這麼修改的

if [ ! -n "${SRC_ROOT}" ]; then
    # REQUIRED: Source Code/Repository Root
    #           (your source code or the root of all repositories)
    SRC_ROOT="${OPENGROK_INSTANCE_BASE}/src"
fi

if [ ! -n "${DATA_ROOT}" ]; then
    # REQUIRED: OpenGrok Generate Data Root
    #           (for Lucene index and hypertext cross-references)
    #           This area is rebuilt by "update" / "updateQuietly"
    DATA_ROOT="${OPENGROK_INSTANCE_BASE}/data"
fi

接著我們將需要索引的原始碼放在 src 目錄下即可, 當然我們其實沒必要把原始碼真的放到這裡, 只需要為其建立一個連結即可

cd /opt/opengrok/database/src
ln -s /usr/src/linux-4.4.6  4.4.6

將需要索引的源碼放在 <code>src</code> 目錄下

生成索引

#./OpenGrok index

指定SRC_ROOT

./OpenGrok index <absolute_path_to_your_SRC_ROOT>

接著我們開啟

http://localhost:8080/source

就可以看到我們的原始碼了

 

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-11/136960.htm


IT145.com E-mail:sddin#qq.com