우분투에 Open Java를 설치하여 사용하다가,
최근에 Oracle Java로 변경하였습니다.
Oracle Java를 요구하는 프로그램 때문에 강제이전을 실시하였는데요,
그에 대한 사이드 이펙트로-
그간 사용했던 온갖 프로그램이 제대로 동작하지 않게 되었습니다.
웹 앱 서버로 사용하던 tomcat도 동작을 안하더군요 :)
이번 포스팅은 Java 변경으로 인한 tomcat 살리기에 초점을 맞췄습니다.
개인적인 용도로 Web Application Server를 구동하고 있습니다.
정적인 파일교환은 Web Server이고,
동적인 데이터교환은 Web Application Server로 고착화되어 있는데요,
Tomcat은 Web Server + Web Application Server의 기능을 하기 때문에 애용하고 있습니다.
물론 대규모 서버에서는 Web Server와 Web Application Server를 분리하는게 일반적이겠지만요.
톰캣을 Web Server로 사용할 수 있느냐 없느냐에 대한 이야기는,
꽤나 흥미롭고도 재미있는 주제이지만 본 포스팅과 무관하므로 생략하겠습니다.
어쨌든 최근에 Oracle Java를 설치하였습니다.
(Oracle Java 설치는 이 포스팅을 참고하세요)
기존에는 Open Java를 설치하여 톰캣이 Open Java를 사용하도록 했었는데요,
Oracle Java로 완전히 돌아서기 위해 '별 생각없이' Open Java를 지워버렸습니다. :)
그리고 톰캣은 바로 운명하셨지요.
이 기회에 톰캣을 7에서 8로 업그레이드하기로 합니다.
최신 버전은 언제나 재미난 기능이 포함하지만, 그 이상으로 귀찮은 호환성 문제를 야기합니다.
톰캣8도 예외는 아닐테지만, 이번 만큼은 귀차니즘을 잠시 접어두죠.
$ sudo apt-get install tomcat8
[sudo] password for storycompiler:
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
libatk-wrapper-java libatk-wrapper-java-jni libgconf2-4 libgif4 libice-dev libpthread-stubs0-dev
libsm-dev libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev libxt-dev python-dateutil
python-deltarpm python-keyring python-secretstorage x11proto-core-dev x11proto-input-dev
x11proto-kb-dev xorg-sgml-doctools xtrans-dev
Use 'apt-get autoremove' to remove them.
다음 패키지를 더 설치할 것입니다:
libtomcat8-java tomcat8-common
제안하는 패키지:
libtcnative-1 tomcat8-admin tomcat8-docs tomcat8-examples tomcat8-user
다음 새 패키지를 설치할 것입니다:
libtomcat8-java tomcat8 tomcat8-common
0개 업그레이드, 3개 새로 설치, 0개 제거 및 1개 업그레이드 안 함.
4,680 k바이트 아카이브를 받아야 합니다.
이 작업 후 6,097 k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] Y
받기:1 http://kr.archive.ubuntu.com/ubuntu/ vivid/universe libtomcat8-java all 8.0.14-1 [4,585 kB]
받기:2 http://kr.archive.ubuntu.com/ubuntu/ vivid/universe tomcat8-common all 8.0.14-1 [52.9 kB]
받기:3 http://kr.archive.ubuntu.com/ubuntu/ vivid/universe tomcat8 all 8.0.14-1 [42.0 kB]
내려받기 4,680 k바이트, 소요시간 0초 (4,945 k바이트/초)
패키지를 미리 설정하는 중입니다...
Selecting previously unselected package libtomcat8-java.
(데이터베이스 읽는중 ...현재 216547개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../libtomcat8-java_8.0.14-1_all.deb ...
Unpacking libtomcat8-java (8.0.14-1) ...
Selecting previously unselected package tomcat8-common.
Preparing to unpack .../tomcat8-common_8.0.14-1_all.deb ...
Unpacking tomcat8-common (8.0.14-1) ...
Selecting previously unselected package tomcat8.
Preparing to unpack .../tomcat8_8.0.14-1_all.deb ...
Unpacking tomcat8 (8.0.14-1) ...
Processing triggers for systemd (219-7ubuntu6) ...
Processing triggers for ureadahead (0.100.0-19) ...
ureadahead will be reprofiled on next reboot
libtomcat8-java (8.0.14-1) 설정하는 중입니다 ...
tomcat8-common (8.0.14-1) 설정하는 중입니다 ...
tomcat8 (8.0.14-1) 설정하는 중입니다 ...
Creating config file /etc/default/tomcat8 with new version
시스템 사용자 `tomcat8' (121) 추가 ...
새로운 사용자 `tomcat8' (121) 을(를) 그룹 `tomcat8'(으)로 추가 ...
홈 디렉토리 '/usr/share/tomcat8' 을(를) 만들지 않습니다.
톰캣8 설치를 완료하였습니다.
톰캣8를 바로 실행해보겠습니다.
$ sudo /etc/init.d/tomcat8 restart
[....] Restarting tomcat8 (via systemctl): tomcat8.serviceJob for tomcat8.service failed. See "systemctl status tomcat8.service" and "journalctl -xe" for details.
failed!
실패하였습니다.
다행스럽게 systemctl이나 journalctl로 로그를 확인할 수 있습니다.
$ systemctl status tomcat8.service
tomcat8.service - LSB: Start Tomcat.
Loaded: loaded (/etc/init.d/tomcat8)
Active: failed (Result: exit-code) since 토 2015-07-18 17:14:48 KST; 11s ago
Docs: man:systemd-sysv-generator(8)
Process: 31290 ExecStart=/etc/init.d/tomcat8 start (code=exited, status=1/FAILURE)
7월 18 17:14:48 storycompiler systemd[1]: Starting LSB: Start Tomcat....
7월 18 17:14:48 storycompiler tomcat8[31290]: * no JDK or JRE found - please set JAVA_HOME
7월 18 17:14:48 storycompiler systemd[1]: tomcat8.service: control process exited, code=exited status=1
7월 18 17:14:48 storycompiler systemd[1]: Failed to start LSB: Start Tomcat..
7월 18 17:14:48 storycompiler systemd[1]: Unit tomcat8.service entered failed state.
7월 18 17:14:48 storycompiler systemd[1]: tomcat8.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
원인이 바로 나오네요.
JAVA_HOME을 설정해놓으라고 합니다.
톰캣8의 JAVA_HOME은 톰캣8용 설정파일에 설정해둬야 합니다.
아래 파일(/etc/default/tomcat8)에서 굵은 글씨부분을 자신의 자바가 설치된 홈디렉토리로 설정해주세요.
$ cat /etc/default/tomcat8
# Run Tomcat as this user ID. Not setting this or leaving it blank will use the
# default of tomcat8.
TOMCAT8_USER=tomcat8
# Run Tomcat as this group ID. Not setting this or leaving it blank will use
# the default of tomcat8.
TOMCAT8_GROUP=tomcat8
# The home directory of the Java development kit (JDK). You need at least
# JDK version 7. If JAVA_HOME is not set, some common directories for
# OpenJDK and the Oracle JDK are tried.
#JAVA_HOME=/usr/lib/jvm/java-7-openjdk
JAVA_HOME=/usr/lib/jvm/jre1.8.0
# You may pass JVM startup parameters to Java here. If unset, the default
# options will be: -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC
#
# Use "-XX:+UseConcMarkSweepGC" to enable the CMS garbage collector (improved
# response time). If you use that option and you run Tomcat on a machine with
# exactly one CPU chip that contains one or two cores, you should also add
# the "-XX:+CMSIncrementalMode" option.
JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC"
# To enable remote debugging uncomment the following line.
# You will then be able to use a java debugger on port 8000.
#JAVA_OPTS="${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
# Java compiler to use for translating JavaServer Pages (JSPs). You can use all
# compilers that are accepted by Ant's build.compiler property.
#JSP_COMPILER=javac
# Use the Java security manager? (yes/no, default: no)
#TOMCAT8_SECURITY=no
# Number of days to keep logfiles in /var/log/tomcat8. Default is 14 days.
#LOGFILE_DAYS=14
# Whether to compress logfiles older than today's
#LOGFILE_COMPRESS=1
# Location of the JVM temporary directory
# WARNING: This directory will be destroyed and recreated at every startup !
#JVM_TMP=/tmp/tomcat8-temp
# If you run Tomcat on port numbers that are all higher than 1023, then you
# do not need authbind. It is used for binding Tomcat to lower port numbers.
# (yes/no, default: no)
#AUTHBIND=no
그리고 톰캣8을 재시작합니다.
$ sudo /etc/init.d/tomcat8 restart
[ ok ] Restarting tomcat8 (via systemctl): tomcat8.service.
그러면 웹페이지가 제대로 나오게 됩니다.
tomcat 버전이 올라가면,
이전 tomcat 버전에 deploy 했던 프로그램을 이전해야 합니다.
여기서는 OpenGrok을 다시 deploy 해보겠습니다.
$ /var/opengrok/bin/OpenGrok deploy
Loading the default instance configuration ...
FATAL ERROR: Unable to determine Deployment Directory for Tomcat - Aborting!
OpenGrok이 tomcat8을 못 찾네요.
/var/opengrok/bin/OpenGrok 스크립트를 열어서 tomcat8을 찾을 수 있게 수정합니다.
파일이 너무 길어서 수정한 파일은 아래 붙여놓았습니다(0.12.1 버전).
/var/opengrok/bin에 갖다가 붙이시면 됩니다.
그리고 브라우저를 통해 OpenGrok에 접근해봅니다.
정상적으로 제대로 실행되는 것을 확인할 수 있습니다.
그럼 좋은 하루 보내세요~
끝_
* References
https://en.wikipedia.org/wiki/Application_server
http://www.resultantsys.com/index.php/general/what-is-a-web-application-server/
'IT' 카테고리의 다른 글
[Ubuntu/Linux] xz 압축파일의 모든 것 (1) | 2015.08.01 |
---|---|
[Digital Fashion] 2015년 7월, 스마트 제품을 훑다 - LikeAGlove, Jawbone UP3, InBody Band, Beam, Yi Camera, NFC Ring (0) | 2015.07.27 |
[Ubuntu/Linux] /etc/hosts의 모든 것 (1) | 2015.07.24 |
[GCC/Linux] warning: suggest parentheses around assignment used as truth value [-Wparentheses]는 무엇? (0) | 2015.07.22 |
[Ubuntu/Linux] ssh 공개키의 모든 것 (96) | 2015.07.19 |
[Ubuntu/Linux] 쉘스크립트 expr의 모든 것 (4) | 2015.07.15 |
[Ubuntu/Linux] 쉘스크립트 변수의 모든 것 (0) | 2015.07.14 |
[Ubuntu/Linux] 쉘스크립트 인용부호의 모든 것 (30) | 2015.07.13 |
[Ubuntu/Linux] 쉘스크립트 패턴의 모든 것 (0) | 2015.07.12 |
[Ubuntu/Linux] 쉘스크립트 test 명령문의 모든 것 (0) | 2015.07.11 |