Rocky Linux 8 설치 후 Java 관련 설치 및 환경변수 설정

   Rocky Linux 8을 클린설치 하고 나서 당연하게 설치 되어 있을 것이라고 생각했던 Java 가 java-1.8.0-openjdk 였다.
   'java-1.8.0-openjdk.x86_64' 이 패키지는 Java Runtime Environment(JRE)를 포함한다. 따라서 Java를 Application을 실행하는 데 필요한 최소한의 구성 요소만 포함하고 있다.   그래서 java 는 설치되어도 javac 는 설치되지 않는다.   그래서 'java-1.8.0-openjdk-devel.x86_64'를 설치해줘야 javac 도 사용할 수 있다.   'java-1.8.0-openjdk-devel.x86_64' 패키지는 Java Development Kit(JDK), JRE, Java Applicatino을 개발하기 위한 도구들도 함께 포함되어 있다.   예를 들어,  javac, jar, javadoc 등이 포함되어 있는 것이다.   따라서 Java Application 을 개발하거나 Compile 해야 하는 경우엔 java-1.8.0-openjdk-devel.x86_64 를 설치하는게 바람직하다.

yum search openjdk

[ yum 으로 설치할 수 있는 openjdk 목록 ]

   일반적으로 가장 많이 사용하는 java 1.8 을 설치해보자.   사용자의 필요에 따라 각자 원하는 버전을 설치해도 그 과정은 동일하다.

yum install java-1.8.0-openjdk-devel.x86_64

[ 추가 필요 패키지가 보인다. y 를 눌러 함께 설치 한다. ]
[ 추가 패키지까지 모두 설치 되었다 ]

yum list installed | grep java

[ 추가 패키지까지 정상적으로 등록된 것을 확인 할 수 있다 ]

   yum, dnf 같은 Package Manager를 사용해서 Package를 관리하다보면 가끔 Java가 Update 되는 경우가 있다.   환경설정에서 절대 경로로 환경설정을 해 놓으면 Java가 Update 되면서 Version 값 때문에 경로가 바뀌어 버리면 정상적인 작동을 못하게 된다.   그래서 환경설정 값이 Loading이 될 때 Java의 설치 경로를 읽어서 JAVA_HOME 및 PATH 값을 설정해주는게 좋다.

which java

   일반적으로 Java의 설치 경로를 확인하는 방법으로 'which java' 명령어로 확인 할 수 있다.   하지만 which로 경로를 확인하게 되면 절대 경로가 아닌 Symbolic Link 경로를 보여준다.

[ which java 로 확인한 Java의 설치 경로 ]

   위의 Capture를 보면 최초 java 명령어가 바라보는 곳은 '/etc/alternatives/java' 이다.   그리고 두번째로 Symbloic Link  가 된 곳은 '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64/jre/bin/java' 이다.   만약 지금은 1.8.0.412 버전인데 추후 Update가 되어 1.8.413 으로 변경된다면 저 링크는 정상적으로 작동하지 않게 된다.   다행스럽게도 Package가 설치 되면서 다시금 Symbolic Link를 설정해 준다면 문제가 안되겠지만 그렇지 않은 경우라면 Java 환경설정 값 때문에 다른 Package가 정상적으로 구동되지 않는 상황이 발생할 수 있다.
   Java의 설치 경로 확인 작업에서 Symbolic Link가 아닌 실제 경로를 조회하는 방법으로 readlink 명령어를 사용할 수 있다.

readlink -f $(which java)

[ realink 로 확인한 Java 설치 경로 ]

 

   이제 환경설정에 JAVA_HOME 을 설정해 보자.   Shell에 따라서 ~/.bash_profile 이 될 수 도 있고 ~/.zshrc 가 될 수 도 있고 다른 설정 파일이 될 수 도 있다.   별도의 Shell을 설치 하지 않았다면 ~/.bash_profile 에 환경설정을 추가하면 된다.
   앞서 확인한 대로 java의 설치 절대경로는 readlink를 통해서 확인할 수 있다.   하지만 보통 환경설정을 할 때 사용되는 $JAVA_HOME의 경로는 '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64/jre/bin/java' 가 아니라 '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64' 이 JAVA_HOME 이 된다.
   그러면 realink 로 얻어진 Java의 설치 경로를 그대로 사용할 수 없으므로 그 앞 path 값을 구해서 설정해줘야 하는 것이다.

java_path=$(readlink -f $(which java))
echo $(dirname $(dirname $(dirname $java_path)))

   위의 Script 로 확인해 보면 '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-2.el8.x86_64' 가 출력되는 것을 확인할 수 있다.   그 경로를 JAVA_HOME으로 설정하면 된다.   그 후 PATH에 대한 부분을 추가하면 된다.

cd ~
vi .bash_profile


# Set JAVA_HOME dynamically
if [ -z "$JAVA_HOME" ]; then
   java_path=$(readlink -f $(which java))
   if [ -n "$java_path" ]; then
       export JAVA_HOME=$(dirname $(dirname $(dirname $java_path)))
   fi
fi

# Append JAVA_HOME/bin to PATH if it's not already there
if [[ ":$PATH:" != *":$JAVA_HOME/bin:"* ]]; then
    export PATH="$PATH:$JAVA_HOME/bin"
fi

   위의 Script는 앞서 $JAVA_HOME 의 값이 설정되지 않았다는 전재로 작성된 것이다.   위의 Script 처럼 설정해주소 환경설정을 다시 Loading 해서 $JAVA_HOME 및 $PATH 값을 확인해 보면 정상적으로 Java 경로에 대한 환경설정이 된 것을 확인 할 수 있다.   더불어 앞서 이야기 했듯이 Pack Manager에 의해서Java 가 Update 되어 절대 경로가 변경되는 상황이 발생하더라도 능동적으로 환경설정이 적용되는 효과를 볼 수 있다.