OpenGrok
是一個快速, 便於使用的源碼搜索引擎與對照引擎, 它能夠幫助我們快速的搜索、定位、對照代碼樹. 接下來就具體講解一下 OpenGrok
的安裝及使用.
OpenGrok
是基於 JAVA
的, 因此我們首先需要 JDK
和 JRE
來支持其運行
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詳解
首先大家應該明白 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服務
安裝好 Tomcat
後, 接下來就是配置 OpenGrok
了.
OpenGrok
下載地址 :
http://opengrok.github.io/OpenGrok
在該網址中可以下載 OpenGrok
的編譯文件, 也可以下載源文件. 在此我們直接下載編譯文件(對OpenGrok感興趣的同學可以下載源碼查看究竟), 下載後通過以下命令進行解壓:
tar xvzf opengrok-0.11.1.tar.gz -C /opt
如果希望 OpenGrok
能夠正常運行, 則需要很多環境變量, 如果我們按照 OpenGrok
的要求安裝 jdk
, Tomcat
和 OpenGrok
, 並建立好目錄結構的話, 這些環境變量在運行 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不配置也是可以正常使用的
下面我們就需要為我們的源碼配置索引了, OpenGrok
生成源代碼的索引信息
設置的話需要如下環境變量
那麼我們直接在 opengrok
的安裝目錄 /opt/opengrok
下創建 src
和 data
目錄即可
但是我為了方便管理, 建立了一個 database
二級目錄, 將 src
和 data
放在這個二級目錄裡面.
為了使得環境變量能夠正確識別, 我們可以修改 OpenGrok
腳本的源代碼, 重置 SRC_ROOT
和 DATA_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_ROOT
和 DATA_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
生成索引
#./OpenGrok index
指定SRC_ROOT
./OpenGrok index <absolute_path_to_your_SRC_ROOT>
接著我們打開
http://localhost:8080/source
就可以看到我們的源代碼了