[Mac] 安裝 OpenGrok server

[Mac] 安裝 OpenGrok server

最近有個任務是要架設一個 OpenGrok server~

OpenGrok 是一個 web server,

架起來之後可以讓你很方便的瀏覽 source code,很方便做 peer review 或是查 code 用~

 

專案的目標是要架在一台 Linux 上面,不過我就先拿自己的 Mac 試一下吧~

先用 brew search grok 看看有沒有別人已經寫好的安裝 script….

有找到 grok 和 ngrok,

但其實這兩個都不是 OpenGrok…

真是殘念 =_= 看來只得自己裝了~

 

1. 下載 OpenGrok binary

我下載的是 Binary distribution opengrok-0.12.1.tar.gz

抓下來之後,決定一下 OpenGrok 要放在哪裡,

在那個目錄把這個套件解開吧:

tar zxvf opengrok-0.12.1.tar.gz

 

解開後的目錄下,有個 bin/OpenGrok 檔案,

有點好奇為什麼 binary distribution 不用分平台,

用 file 查了一下,原來是一個 shell script 檔案,

直接執行 ./OpenGrok 就可以看到一些用法~

試著執行一下 ./OpenGrok deploy 的話,可能會看到下面的錯誤訊息,

因為我們有些東西還沒有裝或設定好:

Loading the default instance configuration ...
ERROR: Unable to determine Exuberant CTags command name for Darwin 13.3.0
FATAL ERROR: Unable to determine Deployment Directory for  Tomcat - Aborting!

 

2. 安裝 Tomcat web server

要有一個 web server 可以跑 OpenGrok,網頁上是說可以用 Tomcat 或 GlassFish…

瞄了一下 OpenGrok 這個 script 裡面寫的,

似乎偏好是 Tomcat,那就不要找自己麻煩,裝 Tomcat 吧~

用 brew 就可以安裝了~

brew install tomcat

 

用 brew 裝的 Tomcat 會裝在比較怪的一個地方,

像我的是裝在 /usr/local/Cellar/tomcat/8.0.9/libexec/ …

要怎麼找到這個路徑呢?

用 brew list tomcat 就可以找到線索,有含 webapps 的那個就是囉:

test@localhost ~/opengrok-0.12.1/bin $ brew list tomcat
/usr/local/Cellar/tomcat/8.0.9/bin/catalina
/usr/local/Cellar/tomcat/8.0.9/libexec/bin/ (15 files)
/usr/local/Cellar/tomcat/8.0.9/libexec/conf/ (7 files)
/usr/local/Cellar/tomcat/8.0.9/libexec/lib/ (25 files)
/usr/local/Cellar/tomcat/8.0.9/libexec/temp/safeToDelete.tmp
/usr/local/Cellar/tomcat/8.0.9/libexec/webapps/ (578 files)
/usr/local/Cellar/tomcat/8.0.9/RELEASE-NOTES
/usr/local/Cellar/tomcat/8.0.9/RUNNING.txt

 

將這個路徑 (不含 webapps) 設定在環境變數 OPENGROK_TOMCAT_BASE 中,

再跑一次 ./OpenGrok deploy 看看:

test@localhost ~/opengrok-0.12.1/bin $ OPENGROK_TOMCAT_BASE=/usr/local/Cellar/tomcat/8.0.9/libexec ./OpenGrok deploy
Loading the default instance configuration ...
ERROR: Unable to determine Exuberant CTags command name for Darwin 13.3.0
Installing /Users/jeff_lai/Software/Engineering/opengrok-0.12.1/bin/../lib/source.war to /usr/local/Cellar/tomcat/8.0.9/libexec/webapps ...
Start your application server (Tomcat),  if it is not already
running, or wait until it loads the just installed web  application.
OpenGrok should be available on <HOST>:<PORT>/source
where HOST and PORT are configured in Tomcat.

 

可以看到它把 source.war 裝到 Tomcat 的 webapps 目錄下去了,

不過還是有 CTags 找不到的訊息,接下來就來裝 CTags~

 

3. 安裝 Exuberant CTags

也是用 brew 就可以裝起來(我真懶 :P)…

brew install ctags

 

再試一次 ./OpenGrok deploy 看看會怎麼樣:

test@localhost ~/opengrok-0.12.1/bin $ OPENGROK_TOMCAT_BASE=/usr/local/Cellar/tomcat/8.0.9/libexec ./OpenGrok deploy
Loading the default instance configuration ...
Installing /Users/jeff_lai/Software/Engineering/opengrok-0.12.1/bin/../lib/source.war to /usr/local/Cellar/tomcat/8.0.9/libexec/webapps ...
Start your application server (Tomcat),  if it is not already
running, or wait until it loads the just installed web  application.
OpenGrok should be available on <HOST>:<PORT>/source
where HOST and PORT are configured in Tomcat.

 

CTags 的錯誤訊息也消失囉~

只差把 Tomcat web server 叫起來了~

 

4. 啟動 Tomcat web server

執行 catalina run 試試把 Tomcat 叫起來~

(我對 Tomcat 不熟,不曉得是不是自己手動裝的也會有個 catalina)

不幸地出現 exception 了…

test@localhost ~/opengrok-0.12.1/bin $ catalina run
Using CATALINA_BASE:   /usr/local/Cellar/tomcat/8.0.9/libexec
Using CATALINA_HOME:   /usr/local/Cellar/tomcat/8.0.9/libexec
Using CATALINA_TMPDIR: /usr/local/Cellar/tomcat/8.0.9/libexec/temp
Using JRE_HOME:        /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Using CLASSPATH:       /usr/local/Cellar/tomcat/8.0.9/libexec/bin/bootstrap.jar:/usr/local/Cellar/tomcat/8.0.9/libexec/bin/tomcat-juli.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

 

嗯… 對 Java 我也不熟…

上網查了一下,似乎是這 Java 程式是用比較新的 JDK 版本編譯,

而現在在比較舊的 JRE 環境中執行…

執行 java -version 可以看到現在的版本是 1.6.0_65…

到 Oracle 的網頁下載最新的 JDK 吧,

我下載的是 JDK 8u20 for Mac: http://download.oracle.com/otn-pub/java/jdk/8u20-b26/jdk-8u20-macosx-x64.dmg

install_jdk    

 

裝好之後再執行 java -version,可以看到版本已經變成 1.8.0_20 了,

執行 java_home -V 還可以秀出更多相關資訊,

例如下面可以看到我新安裝的 JDK 1.8 和系統原有的 JDK 1.6,目前預設使用的是 1.8 的:

test@localhost~ $ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
1.8.0_20, x86_64:	"Java SE 8"	/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:	"Java SE 6"	/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386:	"Java SE 6"	/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

 

既然 Java 已經升級到最新版了,再來啟動一次 Tomcat 試試吧,

這次總算沒有錯誤訊息了 🙂

test@localhost~ $ catalina start
Using CATALINA_BASE:   /usr/local/Cellar/tomcat/8.0.9/libexec
Using CATALINA_HOME:   /usr/local/Cellar/tomcat/8.0.9/libexec
Using CATALINA_TMPDIR: /usr/local/Cellar/tomcat/8.0.9/libexec/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
Using CLASSPATH:       /usr/local/Cellar/tomcat/8.0.9/libexec/bin/bootstrap.jar:/usr/local/Cellar/tomcat/8.0.9/libexec/bin/tomcat-juli.jar
Tomcat started.

 

5. 使用瀏覽器前往剛架設好的 Tomcat web server

因為我是在本機執行 Tomcat 的,因此試著瀏覽 http://localhost:8080/source 吧,

可以看到 OpenGrok 的搜尋畫面了(興奮!!^^),

但是直接按下 Search 鈕時出現了下面的錯誤:

opengrok_config_error  

 

這個錯誤訊息是因為我們還沒有讓 OpenGrok 去收集任何原始碼的資訊…

執行 ./OpenGrok index <src folder> 就可以讓 OpenGrok 建立索引囉,

在下面的例子我讓 OpenGrok 去建立 ~/src 目錄下面的原始碼索引~

因為 OpenGrok 預設會將資料儲存到 /var/opengrok/data,

因此要用 sudo 才有足夠的權限執行::

test@localhost ~/opengrok-0.12.1/bin $ sudo OPENGROK_TOMCAT_BASE=/usr/local/Cellar/tomcat/8.0.9/libexec ./OpenGrok index ~/src/
Loading the default instance configuration ...
01:11:23 WARNING: Non-zero exit status 1 from command [/usr/local/bin/p4, dirs, *] in directory /Users/test/src: Perforce password (P4PASSWD) invalid or unset.
01:11:23 WARNING: Non-zero exit status 1 from command [/usr/local/bin/p4, files, *] in directory /Users/test/src: Perforce password (P4PASSWD) invalid or unset.

 

在上面的訊息中,可以看到有一些 WARNING 警告訊息,

但這好像是因為我們是使用 Perforce (p4),然後 OpenGrok 因為沒辦法執行 p4,

出現了一些錯誤訊息,但這影響的是沒辦法拿到 Perforce 上的 history,

索引還是可以成功的建立…

只是如果目錄檔案很多的話,要建立蠻久的… 耐心等一下吧~

 

等索引建立好之後,回到剛才的網頁畫面,就可以再輸入搜尋字串了~

像下面是搜尋原始碼中有哪些地方用到了 sys.argv 這個字串,

結果很快就出來囉~

opengrok_search  

 

雖然安裝 OpenGrok 一波三折,不過裝好之後真的是蠻方便的,

索引那邊也可以用 cron job 定時重建索引,就可以看到最新的 code 了~^^

 

(本頁面已被瀏覽過 1,110 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料