jBoss를 설치하기 위해서 CentOS에 jdk 를 설치하는데, 약간의 문제가 발생했습니다.
문제라기 보단 제대로 설정을 하지 않고 진행했을 경우에 발생하는 현상입니다.
시스템을 자주 다뤄보고 설치해본 분이라면 문제가 될 것도 아니지만 어쩌다 시스템에 접근하는 개발자들에게는 이또한 당황스러운 시츄에이션임에는 분명합니다.
사실 리눅스든, 윈도우든 jdk설치하는것을 일도 아닙니다. 게다가 tomcat, jboss등의 WAS를 띄우기 위한 목적이라면 더더욱 다른 세팅은 건드리지 않아도 잘 돌아가기에 더더욱 문제가 없습니다.
다운받고 ==> 압축풀고 ==> 해당 was 설정에 path 강제 설정해주고 ==> 쪼금 더 나아가면 /etc/profile에 path 등록해 주는 정도...
하지만 리눅스 환경에서 컴파일이라도 할 요량이면 설치한 jdk의 버전이 정확히 java/ javac 명령어를 실행시켰을 때 작동해야 합니다.
평소에는 설치후 java -version 하면 아래와 같은 버전이 정상적으로 표시되었었습니다.
[root@test_centos_tomcat ~]# java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
[root@test_centos_tomcat ~]#
그런데 오늘은 이전에 설치했던 가상서버에(java 를 설치했는지 않했는지 헷갈릴정도 오래된...)서 java를 확인하는데, 아래와 같이 나옵니다.
[root@test_centos_tomcat ~]# java
Usage: gij [OPTION] ... CLASS [ARGS] ...
to invoke CLASS.main, or
gij -jar [OPTION] ... JARFILE [ARGS] ...
to execute a jar file
Try `gij --help' for more information.
[root@test_centos_tomcat ~]# java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-3)
OpenJDK는 들어봤는데, gij .. 어쩌고 하는 것은 처음 봅니다.
기존 jdk를 어디에 설치했는지 찾아봅니다.
...#] which java
path 에 등록된 java만 나오고 그렇지 않는 java는 안나옵니다. 무식한 방법으로 find를 통해서 다 뒤졌습니다.
/usr/java/ 밑에 위치하고 있습니다.
lrwxrwxrwx. 1 root root 16 Sep 24 2012 default -> /usr/java/latest
drwxr-xr-x. 10 root root 4096 Sep 24 2012 jdk1.7.0_07
lrwxrwxrwx. 1 root root 21 Sep 24 2012 latest -> /usr/java/jdk1.7.0_07
분명 설치는 되어 있습니다. 그런데 java -version 을 해보면 이상한 jvm의 version 정보가 나옵니다.
이제 변경해 보도록 하겠습니다. 사용할 명령어는 "alternatives"입니다.
[root@test_centos_tomcat ~]# alternatives --help
alternatives version 1.3.49.3 - Copyright (C) 2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.
usage: alternatives --install <link> <name> <path> <priority>
[--initscript <service>]
[--slave <link> <name> <path>]*
alternatives --remove <name> <path>
alternatives --auto <name>
alternatives --config <name>
alternatives --display <name>
alternatives --set <name> <path>
common options: --verbose --test --help --usage --version
--altdir <directory> --admindir <directory>
[root@test_centos_tomcat ~]# alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
Enter to keep the current selection[+], or type selection number:
[root@test_centos_tomcat bin]# cd /etc/alternatives/
[root@test_centos_tomcat alternatives]# ll
total 0
lrwxrwxrwx. 1 root root 35 Jun 11 18:50 java -> /usr/lib/jvm/jre-1.5.0-gcj/bin/java
lrwxrwxrwx. 1 root root 32 Jun 11 18:50 jaxp_parser_impl -> /usr/share/java/libgcj-4.4.7.jar
lrwxrwxrwx. 1 root root 26 Jun 11 18:50 jre -> /usr/lib/jvm/jre-1.5.0-gcj
lrwxrwxrwx. 1 root root 26 Jun 11 18:50 jre_1.5.0 -> /usr/lib/jvm/jre-1.5.0-gcj
lrwxrwxrwx. 1 root root 34 Jun 11 18:50 jre_1.5.0_exports -> /usr/lib/jvm-exports/jre-1.5.0-gcj
lrwxrwxrwx. 1 root root 34 Jun 11 18:50 jre_exports -> /usr/lib/jvm-exports/jre-1.5.0-gcj
lrwxrwxrwx. 1 root root 26 Jun 11 18:50 jre_gcj -> /usr/lib/jvm/jre-1.5.0-gcj
lrwxrwxrwx. 1 root root 34 Jun 11 18:50 jre_gcj_exports -> /usr/lib/jvm-exports/jre-1.5.0-gcj
lrwxrwxrwx. 1 root root 38 Jun 11 18:50 keytool -> /usr/lib/jvm/jre-1.5.0-gcj/bin/keytool
lrwxrwxrwx. 1 root root 26 Sep 19 2012 mta -> /usr/sbin/sendmail.postfix
lrwxrwxrwx. 1 root root 40 Sep 19 2012 mta-aliasesman -> /usr/share/man/man5/aliases.postfix.5.gz
lrwxrwxrwx. 1 root root 22 Sep 19 2012 mta-mailq -> /usr/bin/mailq.postfix
lrwxrwxrwx. 1 root root 38 Sep 19 2012 mta-mailqman -> /usr/share/man/man1/mailq.postfix.1.gz
lrwxrwxrwx. 1 root root 27 Sep 19 2012 mta-newaliases -> /usr/bin/newaliases.postfix
lrwxrwxrwx. 1 root root 43 Sep 19 2012 mta-newaliasesman -> /usr/share/man/man1/newaliases.postfix.1.gz
lrwxrwxrwx. 1 root root 23 Sep 19 2012 mta-pam -> /etc/pam.d/smtp.postfix
lrwxrwxrwx. 1 root root 22 Sep 19 2012 mta-rmail -> /usr/bin/rmail.postfix
lrwxrwxrwx. 1 root root 25 Sep 19 2012 mta-sendmail -> /usr/lib/sendmail.postfix
lrwxrwxrwx. 1 root root 41 Sep 19 2012 mta-sendmailman -> /usr/share/man/man1/sendmail.postfix.1.gz
lrwxrwxrwx. 1 root root 42 Jun 11 18:50 rmiregistry -> /usr/lib/jvm/jre-1.5.0-gcj/bin/rmiregistry
[root@test_centos_tomcat alternatives]# cd
[root@test_centos_tomcat ~]# getconf LONG_BIT
64
목록에 새로이 설치한 java가 존재하지 않습니다. 추가해 줍니다.
~]# alternatives --install /usr/bin/java java /usr/java/latest/bin/java 2
목록을 확인합니다.
[root@test_centos_tomcat ~]# alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
* + 1 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
2 /usr/java/latest/bin/java
Enter to keep the current selection[+], or type selection number: 2
첫번째가 디폴트로 설정되어 있고 이를 변경합니다.
이제 새로인 설정한 java 가 기본으로 잡힙니다.
~]# /usr/sbin/update-alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
* 1 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
+ 2 /usr/java/latest/bin/java
자바 버전을 다시 확인해 보겠습니다.
[root@test_centos_tomcat ~]# java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
정상적으로 나옵니다.
이런식으로 여러개의 jdk를 설치해 놓고 각각 어떤 것을 사용할 것인가 결정하도록 합니다.
요약해 보면 다음과 같습니다.
1. java 설치
/usr/java/ 이하에 설치되지만 경로를 변경해서 설치 가능
2. export path, classpath 등록 (/etc/profile 에 추가)
export JAVA_OPTS="-Xms256m -Xmx1024m -XX:MaxPermSize=128m"
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH="."
3. alternatives를 이용해서 디폴트 java 설정.
~]# alternatives --config java 확인
없으면 install (기본적으로 없는게 맞을듯.)
~]# alternatives --install /usr/bin/java java /usr/java/latest/bin/java 2 <--숫자는 몇번째 위치시킬꺼냐의 의미. 크게 중요치 않음. 큰숫자를 넣어도 됨.
~]# /usr/sbin/update-alternatives --config java 로 설치된 java 설정.
IBM AIX 에 설치되는 IBM jdk도 linux 에 설치해보고 해당 JVM에서의 프로그램 동작여부를 확인할때 설정 변경해서 사용하면 될것 같습니다.