태그 보관물: tomcat

OpenGrok 최신버전 설치하기

한 때 갑자기 배포하던 서버가 없어져서 혹시나 하는 걱정에 배포파일을 다운로드 받아 두기까지 했던 OpenGrok project가 다행히 Oracle의 GitHub 내에 자리를 잡고 잘 꾸준히 업데이트 되고 있다.

예전에 작성했던 OpenGrok 설치를 위한 글들은 너무 오래되어서 잘 맞지 않는 것도 있고 해서 최근 버전과 환경을 기준으로 다시 설치 과정을 정리했다. 이 포스팅은 잘 작성된 프로젝트의 문서인 ‘How to setup OpenGrok’을 기준으로 한 나름의 정리이다.

환경과 필요한 것들

– Ubuntu 18.4 LTS
– OpenJDK 11
– Tomcat 9
– Universal-ctags
– 최신 버전의 release file: https://github.com/oracle/opengrok/releases

설치

이 후로는 OpenGrok이 설치 되는 위치를 OPENGROK_DIR로 정의 하고 다음과 같이 환경 변수로 설정 했다고 가정한다.

export OPENGROK_DIR=/var/opt/opengrok

설치할 디렉토리와 하위 디렉토리를 만들어 주고 소유자 권한을 $USER, 그룹 권한을 tomcat으로 설정한 다음, 배포 파일의 압축을 풀어준다. (<version> 부분은 알맞은 값으로 대체)

mkdir -p $OPENGROK_DIR/{src, data, dist, etc, log}
sudo chown $USER:tomcat -R $OPENGROK_DIR
tar -C $OPENGROK_DIR/dist --strip-components=1 -xzf opengrok-<version>.tar.gz

Deployment

Tomcat9을 실행한 상태에서 http://localhost:8080/manager/html로 접근해서 deploy -> WAR file to deploy -> Choose File 버튼을 선택하고 $OPENGROK_DIR/dist/lib/source.war 경로를 찾은 다음 Deploy 버튼을 누른다.

Indexing

분석 할 source code를 $OPENGROK_DIR/src에 받아 둔 후 다음의 커맨드로 indexing을 완료하면 모든 준비가 완료된다.

java \
    -Djava.util.logging.config.file=$OPENGROK_DIR/etc/logging.properties \
    -jar $OPENGROK_DIR/dist/lib/opengrok.jar \
    -c /usr/local/bin/ctags \
    -s $OPENGROK_DIR/src -d $OPENGROK_DIR/data -H -P -S -G \
    -W $OPENGROK_DIR/etc/configuration.xml -U http://localhost:8080/source

Source code가 업데이트 될 때 마다 indexing을 해 주어야 하는데 커맨드가 너무 길어서 복잡하니까 bin directory를 만들고 여기에 index.sh라는 이름으로 shell script를 만들어서 넣어 주었다.

mkdir $OPENGROK_DIR/bin
chmod +x index.sh
$OPENGROK_DIR/bin/index.sh

Access

indexing 까지 다 되었으면 http://localhost:8080/source에 접근하여 source code를 browsing 할 수 있다. Localhost가 아닌 외부에서 접근을 허용 하려면 tomcat의 환경을 변경해 주면 된다. (관련 내용은 인터넷에서 어렵지 않게 찾을 수 있다)

참고: universal-ctags

Ubuntu에서 apt로 설치 할 수 있는 ctags는 Exuberant ctags이지만 OpenGrok은 Universla-ctags를 요구한다. 다음의 방법으로 코드를 컴파일 하고 /usr/local/bin에 설치해서 기존의 /usr/bin/ctags 경로와 충돌하지 않도록 해준다.

git clone git@github.com:universal-ctags/ctags.git
cd ctags
autogen.sh
./configure --prefix=/usr/local
make
sudo make install
/usr/local/bin/ctgas --version

ClearLinux에 Tomcat 설치하기

2019년 3월 현재, Clear Linux에서는 Tomcat이 bundle로 제공되지 않기  때문에 수동으로 설치해야 한다. 이 포스트는 Clear Linux에 수동으로 Tomcat을 설치하기 위한 과정에 관한 것이다.

Java Runtime 설치

Tomcat을 실행하기 위해서는 Java runtime이 시스템에 설치 되어 있어야 한다. 만약 없다면 다음 명령어로 설치해 준다.

$ sudo swupd bundle-add java-runtime

Starting download of remaining update content. 
This may take a while...         ...100% 
Finishing download of update content... 
Installing bundle(s) files...         ...100% 
Calling post-update helper scripts. 
Successfully installed 1 bundle

Java runtime을 설치한 후에는 버전명에 관계없이 접근할 수 있도록 보다 잘 알려진 경로인 /usr/lib/jvm/java로 링크를 생성해 주고 JAVA_HOME 환경 변수를 설정해 준다.

$ sudo ln -s /usr/lib/jvm/java-<VERSION>-openjdk /usr/lib/jvm/java

$ edit /etc/profile # or ~/.bashrc
# JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java

Tomcat 다운로드 및 설치

설치된 Java runtime에 맞게 Tomcat download page에서 적절한 binary distribution을 download받고 설치해준다. Tomcat website에 있는 Which version? 항목을 보면 아래와 같이 표가 나오는데,  “Supported Java Version”을 참고해서 적합한 “Apache Tomcat Version”을 선택하면 된다. 예를 들어, OpenGrok의 경우 Java 1.8이 requirement이므로, Tomcat version 9.0.x이상을 선택하면 된다.

다음과 같이 Tomcat을 download 받고 /opt/tomcat에 풀어 준다.

$ wget https://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.12/bin/apache-tomcat-9.0.12.tar.gz
$ sudo mkdir /opt/tomcat
$ sudo tar xvzf ./apache-tomcat-9.0.12.tar.gz -C /opt/tomcat --strip-components=1 

사용자 설정

/opt/tomcat/conf/tomcat-users.xml 파일을 편집해서 다음과 같이 Tomcat user를 추가해 준다. 아래의 설정은 가장 단순하게 access control하기 위한 설정으로 ‘tomcat’이라는 id를 추가하기 위한 것이다.

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
  version="1.0">
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="비밀번호(password)" roles="manager-gui,admin-gui"/>
</tomcat-users>

결과확인

모든 설정이 끝났다면 Tomcat을 설치한 머신에서  http://localhost:8080/manager/html 주소에 접근해서 Tomcat 서버 설정을 관리 할 수 있다. ID와 password를 묻는 prompt가 뜨면 위의 tomcat-users.xml에서 설정한것 처럼 ID/비밀번호(tomcat/비밀번호(password)를 입력한다.

Remote Access 허가

Tomcat 관리자 page를 접근할 때 localhost가 아닌 remote에서 접속을 시도하면 403 access denied 오류가 뜰 수 있다. Localhost외에서도 tomcat 관리자 page 접근을 허용하려면 아래 경로에 있는 context.xml file의 allow= 부분을 수정해서 모든 IP를 받아들이도록 변경해 주면된다. context.xml은 여러개 있으니 경로에 주의.

/opt/tomcat/webapps/manager/META-INF/context.xml

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
  allow="\d+.\d+.\d+.\d+" />

<Manager
sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filter
s\.CsrfPreventionFilter\$\
LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

PlantUML war file 설치

그동안 UML을 그려야할 필요가 있을때 StarUML을 써왔는데, Windows만 지원하는 software라는 한계도 있고 해서 얼마 전 부터는 우연히 알게된 PlantUML을 사용하고 있다. 이 software는 마치 LaTex 처럼 text로 UML을 그리기 위한 description을 작성하면 이를 기반해서 UML을 그려준다. 문법도 그다지 어렵지 않고 직관적이어서 사용하기도 쉬운 편이다.

작성한 text를 UML로 그리기 위한 client program들은 여러가지 형태가 지원되는데 보다 자세한 목록은 여기에서  확인할 수 있다. 내가 그동안 사용하던 것은 Chrome extension이었는데 class diagram들이 조금씩 복잡해 지면서  여러개의 file로 쪼갤 필요가 있게 되니 ‘!include‘ directive를 사용할 수 없는 문제가 있었다. 아마도 Chrome이 보안 문제로 extension의 local file 간접 access하는 것을 막은게 아닐까 싶다. 그래서 servlet으로 설치하는 방법을 사용하기로 했다. 이전에 Opengrok을 설치한 적이 있으니 설치 환경은 ubuntu 12.04와 tomcat이 이미 설치된 상태 이다.

  • 필요한 package들의 설치
    : PlantUML servlet을 돌리려면 graphviz package가 필요한데 이것이 설치되어 있지 않으면 다음과 같은 오류가 발생한다. 그리고 war file을 쉽게 deploy하기 위해 tomcat-admin package를 설치했다.
    SC_plantuml_dot_file_not_exists_err
sudo apt-get install tomcat6-admin graphviz
  • PlantUML war file을 download 받기
    PlantUML download page에서 war file (Java J2EE WAR File)을 download 받는다.
  • Tomcat admin 설정
    : Tomcat admin으로 접속하려면 amdin 계정이 필요하니 만약 계정이 없다면 tomcat-users.xml file을 편집해서 계정을 추가해 준다. 이 파일에는 비밀번호를 평문으로 함께 기록해야 하기는 하지만, root와 tomcat외에는 read permission이 없으므로 다른 계정에 의해 이 파일이 읽히지는 않는다. 계정을 추가해준 이후에는 tomcat server를 재실행한다.

    sudo vi /var/lib/tomcat6/conf/tomcat-users.xml
 <!--
 NOTE: By default, no user is included in the "manager-gui" role required
 to operate the "/manager/html" web application. If you wish to use this a pp,
 you must define such a user - the username and password are arbitrary.
 -->
 <!--
 NOTE: The sample user and role entries below are wrapped in a comment
 and thus are ignored when reading this file. Do not forget to remove
 <!.. ..> that surrounds them.
 -->
 <role rolename="admin"/>
 <user username="admin" password="ADMIN_PASSWORD" roles="admin,manager,manager-gui"/>
 </tomcat-users>
  • Tomcat admin page로 부터 deploy: 모든 준비가 되었으니 tomcat admin page (http://SERVER:8080/manager/html) 에서 war file을 선택하고 deploy한다.
  • Service page 접속
    : Web browser에서 service page (http://SERVER:8080/plantuml)로 접속한다.

OpenGrok 설치 빨리 하기

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

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

설치환경

Ubuntu 16.04 LTS

필요한 package들

$ sudo apt-get install tomcat8 tomcat8-admin exuberant-ctags
$ sudo service tomcat8 start

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

$ wget http://3.1.85.226/wp-content/uploads/2013/04/opengrok-0.11.1.tar.gz
$ tar xvzf opengrok-0.11.1.tar.gz

 

OpenGrok 실행 환경 만들기

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

$ sudo mv ./opengrok-0.11.1 /var/opengrok

Source file 복사

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

Deploy 및 indexing

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

$ sudo OPENGROK_TOMCAT_BASE=/var/lib/tomcat8 /var/opengrok/bin/OpenGrok deploy
$ /var/opengrok/bin/OpenGrok index