카테고리 보관물: Linux

OpenGrok 설치

OpenGrok을 설치하는 가장 간단한 방법은 tomcat5~6 사이의 버전을 사용하고, 설치하는 위치를 /var/opengrok 으로 정하는 것이다. 이렇게 하면 별도의 수정없이 거의 그대로 OpenGrok을 사용할 수 있다. (OpenGrok 설치 빨리 하기 참조)

이 posting에서는 Source를 <YOUR_SOURCE_REPOSITORY_TOP> 경로 아래에 각 project별로 따로 보관하고, <YOUR_HOME_DIRECTORY>/opengrok 경로 아래에 OpenGrok과 관련된 file들을 보관하는 상황을 가정하고 설명한다.

설치 환경

Ubuntu 12.04에 tomcat7을 설치하고, OpenGrok에 관련된 file들은 <YOUR_HOME_DIRECTORY>/opengrok 아래에 보관하고, source code들은 별도로<YOUR_SOURCE_REPOSITORY_TOP> 아래에 project별로 구성되어 있는 상황을 가정한다.

필요한 package들

$ sudo apt-get install tomcat7 tomcat7-admin exuberant-ctags

설치가 완료된 후에 http://localhost:8080으로 접근하면 tomcat이 제대로 동작하는지 확인해 볼 수 있다. Tomcat이 동작하는 것을 확인한 후에는 OpenGrok을 download 받아 압축을 해제한다.

$ wget http://hub.opensolaris.org/bin/download/Project+opengrok/files/opengrok-0.11.1.tar.gz
$ tar xvzf opengrok-0.11.1.tar.gz

OpenGrok 실행 환경 만들기

OpenGrok이 동작할 환경을 만든다. bin, data, etc, src가 필요한데 bin은 OpenGrok script를 비롯한 실행 file들이 들어갈 곳이고, data는 indexing된 결과물이 저장된다. etc에는 configuration에 관련된 data가 포함되고 src에는 OpenGrok이 분석할 source code가 저장되는 곳이다. 하지만 앞서 말한것 처럼 source는 이미 다른 위치에 있는 것을 가정하고 환경을 설정할 것이다.

$ mkdir -p opengrok/bin
$ mkdir -p opengrok/data
$ mkdir -p opengrok/etc

압축을 해제한 곳으로 부터 bin directory로 실행에 필요한 파일들을 복사한다.

$ cp bin/OpenGrok opengrok/bin
$ cp -r lib opengrok/

Tomcat7 경로 추가

FATAL ERROR: Unable to determine Deployment Directory for Tomcat - Aborting

OpenGrok을 deploy하기 위해 명령을 치면 tomcat directory를 찾지 못했다는 오류와 함께 실행이 중단된다. 이것은 OpenGrok 0.11.1 version에서 tomcat7에 대한 고려가 되어있지 않기 때문인데 bin directory로 복사한 OpenGrok script를 편집기로 열어서 아래와 같이 2곳에 tomcat7이 포함되도록 추가해 준다.

1. FindApplicationServerType()에 tomcat7 추가 (Line 489)

    # This implementation favours Tomcat, but needs a lot of work,
    # especially if Glassfish is perferrerd or it is under the control
    # of SMF (Service Management Facility)

    # Maybe a better implementation would be to call Application
    # Server specific WAR Directory and see if they exist.

    if [    -d "/var/tomcat6/webapps"        \   
         -o -d "/var/lib/tomcat6/webapps"    \   
         -o -d "/var/lib/tomcat5/webapps"    \   
         -o -d "/var/lib/tomcat5.5/webapps"  \
         -o -d "/var/lib/tomcat7/webapps"    \   
       ]   
    then
        echo "Tomcat"
        return
    fi

2. DetermineWarDirectoryTomcat()에 tomcat7 추가 (Line 524)

    for prefix in               \   
        ${OPENGROK_TOMCAT_BASE} \
        /var/tomcat6            \   
        /var/lib/tomcat6        \   
        /var/lib/tomcat5        \   
        /var/lib/tomcat5.5      \   
        /var/lib/tomcat7
    do

OpenGrok script의 실행경로 변경하기

OpenGrok script는 /var/opengrok directory아래에 bin, data, ext, src가 있는 것을 가정하고 작성되어 있다. Source 경로는 별도의 directory에 보관하고 있는 것을 그대로 사용하고, bin, data, ext는 home directory에 opengrok directory 아래에 있는 것을 사용하므로, OpenGrok script를 열어서 관련 부분을 수정해 준다.

1. OPENGROK_INSTANCE_BASE

: 이 값을 기준으로 bin, data, ext, src의 경로가 기본값으로 설정되어 있으므로, 원하는 경로로 이 값을 바꾼다.

    #OPENGROK_INSTANCE_BASE="${OPENGROK_INSTANCE_BASE:-/var/opengrok}"
    OPENGROK_INSTANCE_BASE="${OPENGROK_INSTANCE_BASE:-/<YOUR_HOME_DIRECTORY>/opengrok}"

2. SRC_ROOT

: Source code는 다른경로에 있는 것을 사용하므로, SRC_ROOT를 변경한다.

    # REQUIRED: Source Code/Repository Root
    #           (your source code or the root of all repositories)
    #SRC_ROOT="${OPENGROK_INSTANCE_BASE}/src"
    SRC_ROOT="<YOUR_SOURCE_REPOSITORY_TOP>"

configuration.xml 위치 변경

web.xml에서 configuration.xml 생성위치를 변경해준다. 이 파일은 source.war안에 들어 있으므로 압축을 해제한 후 수정하고 재 압축하는 다소 번거로운 절차를 따라야 한다.

1. 먼저 source.war file의 압축을 푼다.

$ unzip opengrok/lib/source.war -d opengrok/lib/source

2. web.xml을 수정한다.

: opengrok/lib/source/WEB-INF/web.xml file을 열어서 CONFIGURATION 부분의 <param-value> 값을 우리가 사용할 etc 위치로 변경해 준다. (Line 9)

$ vi opengrok/lib/source/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>OpenGrok</display-name>
  <description>A wicked fast source browser</description>
  <context-param>
    <param-name>CONFIGURATION</param-name>
    <!-- <param-value>/var/opengrok/etc/configuration.xml</param-value> -->
    <param-value><YOUR_HOME_DIRECTORY>/opengrok/etc/configuration.xml</param-value>
    <description>Full path to the configuration file where OpenGrok can read it's configuration</description>
  </context-param>

3. 다시 zip으로 압축한다.

$ zip -u opengrok/lib/source.war opengrok/lib/source/WEB-INF/web.xml 
  adding: opengrok/lib/source/WEB-INF/web.xml (deflated 80%)

Deploy with the script

이제 모든 준비가 되었으니 super user로 deploy를 실행한다.

$ sudo ./OpenGrok deploy
[sudo] password for <YOUR_ACCOUT>: 
Loading the default instance configuration ...
Installing /usr/opengrok/bin/../lib/source.war to /var/lib/tomcat/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.

Indexing

OpenGrok을 사용하려면 source code들에 대해서 indexing하는 과정을 거쳐야 하는데, source code의 크기와 PC성능에 따라 다르지만, source code가 크면 꽤 오랜 시간이 소요될 수도 있다.

$ opengrok/OpenGrok index
Loading the default instance configuration ...
  Creating default <YOUR_HOME_DIRECTORY>/opengrok/logging.properties ... 
WARNING: Can't find distribution logging configuration (<YOUR_HOME_DIRECTORY>/opengrok/bin/../lib/../doc/logging.properties) to install as default logging configuration (<YOUR_HOME_DIRECTORY>/opengrok/logging.properties)

사용

Indexing 작업이 완료된 후에는 http://localhost:8080/source 경로로 접근하면 OpenGrok을 사용할 수 있다.

OpenGrok ScreenShot