Unix/Ubuntu

Ubuntu에서 OpenGrok 쓰기

ForceCore 2009. 6. 4. 19:04
OpenGrok은 자바라서 따로 컴파일하거나, 패키지 설치할 필요 없이, 이미 컴파일 된 바이너리 파일을 돌리면 된다. 이 부분은 전혀 문제될 것이 없는데, 가장 큰 문제는 Web브라우저로 보이는 부분을 어떻게 처리해야 하느냐는 것이다.

Tomcat가지고 좀 삽질 하다가 잘 안 되어서 필자는 GlassFish조합을 가기로 했다. 이유는 잘 모르겠고, 설정 건들고, 디렉토리 권한을 바꾸고 삽질해도 그냥... 권한 에러가 자꾸 나서 때려쳤음.
http://jars.de/english/how-to-set-up-glassfish-2-on-debian-or-ubuntu

OpenGrok 설치

http://opensolaris.org/os/project/opengrok/manual/installdescription/;jsessionid=0A800F3FBE2AE5FCFEE16CC2063D95C0
아직 우분투 패키지는 존재하지 않는다. OpenGrok 시스템 만큼은 손으로 설치해야 한다. 그런데 어렵진 않다. 컴파일 할 일도 없기 때문. 우선은 OpenGrok을 받고, 압축을 해제한다. 그 안에 run.sh가 있는데...
SRC_ROOT=
DATA_ROOT=
EXUB_CTAGS=/usr/bin/ctags

이 세가지 항목은 제대로 지정해야 한다. Ubuntu에 설치되는 ctags는 exub-ctags이니 걱정하지 않아도 된다. src_root는 여러분의 소스코드가 있는 디렉토리이다. data_root은 OpenGrok이 소스코드를 스캔해서, 검색하기 좋게 소화해놓은 데이터가 저장될 곳이므로, 빈 디렉토리를 새로 생성해 놓으면 된다.
필자는
SRC_ROOT=/export/opengrok/src
DATA_ROOT=/export/opengrok/data
이렇게 해 두었다.

run.sh의 좀 더 아래 부분을 읽어보면
java ${JAVA_OPTS} ${PROPERTIES} ${LOGGER} -jar ${PROGDIR}/opengrok.jar ${SCAN_FOR_REPOS} -c ${EXUB_CTAGS} -s "${SRC_ROOT}" -d ${DATA_ROOT}

이런 코드가 있을텐데

java ${JAVA_OPTS} ${PROPERTIES} ${LOGGER} -jar ${PROGDIR}/opengrok.jar ${SCAN_FOR_REPOS} -c ${EXUB_CTAGS} -s "${SRC_ROOT}" -d ${DATA_ROOT} -W ${DATA_ROOT}/configuration.xml

뒤에 configuration.xml을 만들라는 말도 추가해주자.
그리고 run.sh를 실행시키면...
$ ./run.sh
소스코드가 실행되면서 DATA_ROOT안에 여러가지 파일이 생기고 configuration.xml이 생긴다.
이 파일은
/etc/opengrok/configuration.xml 으로 저장한다. /etc에 설정파일이 있는게 구리면, 압축파일에 주어진 source.war 파일을 수정해야만 한다. 다행히 우분투에선,
$ vi source.war

vi가 zip파일을 열어서 실시간으로 수정할 수 있다 -_-ㅋ
web.xml 이라는 파일인데 (정확히는 WEB-INF/web.xml)

  <context-param>
    <param-name>CONFIGURATION</param-name>
    <param-value>/etc/opengrok/configuration.xml</param-value>
    <description>Full path to the configuration file where OpenGrok can read it's configuration</description>
  </context-param>
이렇게 된 부분이 있을 것이다. 저 /etc/opengrok/configuration.xml 부분을, 실제로 설정파일이 있는 곳으로 유도하면 된다.

source.war를 구동하기

이제 열심히 소스코드를 스캔해 놓은 것을 실제로 써먹어야 하는데... 그러기 위해서는 저 source.war 파일을 tomcat같은 것으로 구동해야지 된다. 물론 필자는 tomcat으로 하다가 해결이 도저히 안 되는 에러에 막혀서 다른 glassfishv2를 선택했다.

# apt-get install glassfishv2

설치하면 끝날 쯤에 이런 정보가 나온다. 잘 저장해두자.
__________________________________________________________
Start processing at    Thu Jun  4 18:41:24 2009

/bin/sh /usr/share/glassfishv2/config/install/appservenv /usr/share/glassfishv2/config /usr/share/glassfishv2
Starting appservenv
/bin/sh /usr/share/glassfishv2/config/install/asenv /usr/share/glassfishv2/config /usr/share/glassfishv2 /usr/share/glassfishv2 /usr/lib/jvm/java-6-openjdk
ASCONFIG_HOME = /usr/share/glassfishv2/config
CLIENT_BASEDIR = /usr/share/glassfishv2
Using port 4848 for Admin.
Using port 8080 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Domain being created with profile:cluster, as specified by variable AS_ADMIN_PROFILE in configuration file.
The file in given locale [ko_KR] at: [/usr/share/glassfishv2/lib/install/templates/locales/ko_KR/index.html] could not be found. Using default (en_US) index.html instead.
Security Store uses: JKS
Domain domain1 created.
Starting Domain domain1, please wait.
Log redirected to /var/lib/glassfishv2/domains/domain1/logs/server.log.
Redirecting output to /var/lib/glassfishv2/domains/domain1/logs/server.log
Domain domain1 started.
Domain [domain1] is running [Sun Java System Application Server 9.1_01 (build local)] with its configuration and logs at: [/var/lib/glassfishv2/domains].
Admin Console is available at [http://localhost:4848].
Use the same port [4848] for "asadmin" commands.
User web applications are available at these URLs:
[http://localhost:8080 https://localhost:8181 ].
Following web-contexts are available:
[/web1  /__wstx-services ].
Standard JMX Clients (like JConsole) can connect to JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://legion:8686/jmxrmi] for domain management purposes.
Domain listens on at least following ports for connections:
[8080 8181 4848 3700 3820 3920 8686 ].
Domain supports application server clusters and other standalone instances.

__________________________________________________________
Finished processing at Thu Jun  4 18:42:01 2009


http://localhost:4848 로 가면 admin interface가 나온다는 정보도 있군.
id: admin
비번; adminadmin
이 초기 id와 비번이다.
비번을 바꾸려면...

http://localhost:4848 로 접속해서
domain메뉴에서, administrator password 탭에 있다.

이제 source.war 파일을 호스팅하라고 해보자.
Common Tasks / Applications / Web Applications
에서 source.war 파일을 선택하고, deploy버튼을 누르면... 끝(?)
접속은
http://localhost:8080/source
로 하게 된다.

source.war의 web.xml 설정이 잘못된 경우: deploy한 것을 지우고, 다시 새로 deploy하는 것이 편하다 -_-

glassfish의 시스템 서비스화

아직 문제가 있다. 컴퓨터를 재부팅하면 저절로 glassfish가 시작되지 않는다는거. 그리고 start/stop/restart 스크립트도 없다 -_- glassfish가 우분투에 편입된지가 언젠데 (적어도 7부터 있었다) 아직도 이 모양이지? 필자는 우분투9다 -_-;;

이 글에 해결책이 있다. 우분투 버그에 대한 글이군 ㅡ,.ㅡa
https://bugs.launchpad.net/ubuntu/+source/glassfish/+bug/150960
:D ??!!

init.d 스크립트가 밑에 댓글로 있다.
/etc/init.d/glassfish:
#!/bin/bash

GLASSFISHHOME=/usr/share/glassfishv2
GLASSFISHDOMAINHOME=/var/lib/glassfishv2/domains/domain1
case "$1" in
start)
    ${GLASSFISHHOME}/bin/asadmin start-database
    ${GLASSFISHHOME}/bin/asadmin start-domain --user admin --passwordfile ${GLASSFISHDOMAINHOME}/config/passwordfile domain1
    ;;
stop)
    ${GLASSFISHHOME}/bin/asadmin stop-domain domain1
    ${GLASSFISHHOME}/bin/asadmin stop-database
    ;;
restart)
    ${GLASSFISHHOME}/bin/asadmin stop-domain domain1
    ${GLASSFISHHOME}/bin/asadmin stop-database
    ${GLASSFISHHOME}/bin/asadmin start-database
    ${GLASSFISHHOME}/bin/asadmin start-domain --user admin --passwordfile ${GLASSFISHDOMAINHOME}/config/passwordfile domain1
;;
*)
    echo $"usage: $0 {start|stop|restart}"
    exit 1
esac
이렇다. 그리고,

/var/lib/glassfishv2/domains/domain1/config/passwordfile 을 새로 만들어서...
이 한 줄을 넣어주면 된다:
AS_ADMIN_PASSWORD=비번

두둥...