태그 보관물: opengrok

Repo와 OpenGrok update를 위한 cron용 script

OpenGrok은 여러면에서 좋은 점이 많은 도구이지만 source code가 변경될 때마다 오랜시간이 걸리는 indexing을 해야 한다는 점은 불편 한 점 중 하나이다. 여기서는 cron으로 돌릴 수 있는 간단한 shell script를 사용해서 한가한 시간에 source가 최신으로 유지될 수 있도록 하는 방법을 설명한다.

Cron runnable update script

Cron으로 동작시키는 script를 작성할 때 가장 많이 실수하는 것은 환경변수들을 사용할 수 없다는 것을 종종 잊는다는 점이다. 이 script 역시 cron에서 동작시킬 것을 감안해서 절대 경로를 사용하도록 작성되어야 한다.

이 script는 REPO_DIR_ROOT로 선언한 directory에 있는 directory들을 돌아다니면서 repo sync를 수행한 다음 OpenGrok index를 돌리는 일을 한다. 다음 세개의 변수를 자신에 맞게 변경해 주자.

  • REPO_DIR_ROOT: Source repository들의 최상위 directory
  • OPENGROK_DIR: OpenGrok binary의 위치
  • REPO: Repo script의 위치

Cron Job 등록

Cron을 설정하는 방법에 대해 잘 설명된 문서들이 많으니 이것을 참고해서 crontab을 실행하고 시간을 설정한다.

다음은 금요일 오후 7시 부터 script를 실행하고 home directory에 ‘opengrok_sync_log.txt’  file에 수행 log를 남기도록 설정하는 예이다. /home/<your_home_dir>/bin 아래에 update_opengrok.sh라는 이름으로 script를 저장한다고 가정했다.

주의할 점

Crontab 실행주기를 결정할 때 script의 수행에 소요되는 시간을 고려해야 한다. 너무 잦은 주기로 설정해 놓으면 이전의 job들이 끝나지 않은 상태에서 다음 job이 실행되는 경우가 생기게 되고 이것들이 쌓여서 system 자원을 잡아먹고 느려지다가 결국은 system 관리자의 전화를 받게 될 수도 있다. 😉

 

 

OpenGrok 0.11.1

언제 부턴가 Oracle에서 OpenGrok page가 없어졌다.
GitHub에 source로 배포하는 곳은 있는데 빌드된 버전에 대한 링크를 찾기 힘들어서 예전에 받아 두었던 0.11.1 version의 source와 binary를 올려 둔다.

* 8월 2일 추가)
OpenGrok의 build된 binary가 배포되는 web site를 우연히 발견했다. OpenGrok의 최신 버전은 이곳에서 받으면 된다.

OpenGrok 설치 빨리 하기

지난번 OpenGrok 설치 관련 포스팅 이후 OpenGrok을 설치할 기회가 몇 번 더 있었는데, Source 경로를 제외한 나머지 설정들을 기본값으로 사용하니 훨씬 설치 하기가 간편했다. 여기에는 source를 제외한 나머지 설정을 기본으로 사용해서 약간의 수정으로 설치 하는 방법을 설명한다.

2017년 12월 13일 : Ubuntu16.04 LTS를 기준으로 수정함.

설치환경

Ubuntu 16.04 LTS

필요한 package들

Tomcat등의 필요한 package들을 설치하고 OpenGrok을 download 받아서 압축을 푼다.

 

OpenGrok 실행 환경 만들기

OpenGrok은 설치 환경이 /var/opengrok directory 아래에 구성되어 있다고 가정한다. 이를 위해 압축을 해제한 OpenGrok file들을 /var/opengrok 으로 옮긴다.

Source file 복사

분석하고자 하는 소스 파일을 /var/opengrok/src 아래로 복사한다.

Deploy 및 indexing

모든 설정이 끝났으니 deploy하고 indexing을 시작한다. Oepngrok-0.11.1은 tomcat6를 가정하므로 tomcat8의 위치를 가리키도록 OPENGROK_TOMCAT_BASE를 지정한다.

 

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들

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

OpenGrok 실행 환경 만들기

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

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

Tomcat7 경로 추가

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

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

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

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의 경로가 기본값으로 설정되어 있으므로, 원하는 경로로 이 값을 바꾼다.

2. SRC_ROOT

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

configuration.xml 위치 변경

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

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

2. web.xml을 수정한다.

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

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

Deploy with the script

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

Indexing

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

사용

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

OpenGrok ScreenShot