우분투(Ubuntu) 홈서버 구축기(2) - OpenJDK 설치

Wondeok Kang (a.k.a. Wade)·2022년 4월 2일
0
post-thumbnail

1. OpenJDK 설치

무엇이든 기본이 가장 어려운 법. 이것저것 하기 전에 가장 기본적인 JDK를 설치하는 것을 까먹었다. apt-get을 이용하여 OpenJDK를 설치한다. 자바 따윈 개나 줘 버린 깨끗하고도 깨끗한 나의 홈서버..

deogicorgi@deogicorgi-server ~ : java -version
zsh: command not found: java

자바로 만들어진 프로그램을 실행하기 위한 JRE 역시 JDK를 설치하면 자동적으로 설치된다. 우선 현재 가장 자주 사용하는 openjdk8을 설치한다.

deogicorgi@deogicorgi-server ~ : sudo apt-get install openjdk-8-jdk

설치가 완료되면 제대로 설치되었는지 버전을 확인해 본다.

deogicorgi@deogicorgi-server ~ : java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0ubuntu2~20.04-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)

8 버전이 제대로 설치가 되었다. 내친김에 두 번째로 자주 사용하는 11 버전도 설치한다.

deogicorgi@deogicorgi-server ~ : sudo apt-get install openjdk-11-jdk

역시 제대로 설치되었는지 확인해보기위해 버전을 체크해본다.

deogicorgi@deogicorgi-server ~ : java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)

11 버전이 제대로 설치되었다는 것을 볼 수 있다. 그런데 11 버전을 사용하다 8 버전을 사용해야 한다면..? 이럴 경우 update-alternatives 를 이용하여 쉽게 변경할 수 있다. 아래와 같이 입력할 경우 설치된 자바버전들과 함께 사용할 버전을 선택할 수 있다.

deogicorgi@deogicorgi-server ~ : sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 

현재 설치된 8, 11버전이 보인다. Selection 항목의 숫자를 입력 후 엔터를 치면 해당되는 버전으로 변경되게 된다. 이렇게 java, javac, jar, javadoc 등의 버전을 같은 방법으로 쉽게 변경할 수 있다.


2. update-alternatives를 이용한 jdk 변경

위의 방법처럼 java, javac 등을 하나하나 찾아서 변환하는 방법이 있지만 좀 더 개발자스럽게.. 좀 더 쉽고 간단하게 변환하는 방법을 세팅해보자. 우선 apt-get 을 이용하여 jdk를 설치할 경우 다음과 같은 경로로 path가 잡힌 것을 볼 수 있다.

deogicorgi@deogicorgi-server ~ : which java
/usr/bin/java

해당 경로로 가서 다시 보면 아래와 같이 심볼릭 링크로 연결되어 있는 것을 확인할 수 있다. 그렇다면 다시한번 연결된 심볼릭 링크를 따라가 보자.

deogicorgi@deogicorgi-server ~/usr/bin : ll | grep java

lrwxrwxrwx  1 root   root           22 Sep 10 11:16 java -> /etc/alternatives/java
lrwxrwxrwx  1 root   root           23 Sep 10 11:16 javac -> /etc/alternatives/javac
lrwxrwxrwx  1 root   root           25 Sep 10 11:16 javadoc -> /etc/alternatives/javadoc
lrwxrwxrwx  1 root   root           23 Sep 10 11:16 javah -> /etc/alternatives/javah
lrwxrwxrwx  1 root   root           23 Sep 10 11:16 javap -> /etc/alternatives/javap

다시 한번 위의 심볼릭 링크를 따라가 보면 아래와 같이 실제 설치된 경로를 확인할 수 있다.

deogicorgi@deogicorgi-server ~ /etc/alternatives : ll | grep java

lrwxrwxrwx   1 root root   50 Sep 10 11:16 appletviewer -> /usr/lib/jvm/java-8-openjdk-amd64/bin/appletviewer
lrwxrwxrwx   1 root root   60 Sep 10 11:16 appletviewer.1.gz -> /usr/lib/jvm/java-8-openjdk-amd64/man/man1/appletviewer.1.gz
lrwxrwxrwx   1 root root   44 Sep 10 11:16 clhsdb -> /usr/lib/jvm/java-8-openjdk-amd64/bin/clhsdb
lrwxrwxrwx   1 root root   46 Sep 10 11:16 extcheck -> /usr/lib/jvm/java-8-openjdk-amd64/bin/extcheck
lrwxrwxrwx   1 root root   56 Sep 10 11:16 extcheck.1.gz -> /usr/lib/jvm/java-8-openjdk-amd64/man/man1/extcheck.1.gz
lrwxrwxrwx   1 root root   42 Sep 10 11:16 hsdb -> /usr/lib/jvm/java-8-openjdk-amd64/bin/hsdb
lrwxrwxrwx   1 root root   42 Sep 10 11:16 idlj -> /usr/lib/jvm/java-8-openjdk-amd64/bin/idlj
lrwxrwxrwx   1 root root   52 Sep 10 11:16 idlj.1.gz -> /usr/lib/jvm/java-8-openjdk-amd64/man/man1/idlj.1.gz
lrwxrwxrwx   1 root root   44 Sep 10 11:18 jaotc -> /usr/lib/jvm/java-11-openjdk-amd64/bin/jaotc
lrwxrwxrwx   1 root root   42 Sep 10 11:18 jar -> /usr/lib/jvm/java-11-openjdk-amd64/bin/jar
lrwxrwxrwx   1 root root   52 Sep 10 11:18 jar.1.gz -> /usr/lib/jvm/java-11-openjdk-amd64/man/man1/jar.1.gz
lrwxrwxrwx   1 root root   48 Sep 10 11:18 jarsigner -> /usr/lib/jvm/java-11-openjdk-amd64/bin/jarsigner
lrwxrwxrwx   1 root root   58 Sep 10 11:18 jarsigner.1.gz -> /usr/lib/jvm/java-11-openjdk-amd64/man/man1/jarsigner.1.gz
lrwxrwxrwx   1 root root   43 Sep 10 11:47 java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java
lrwxrwxrwx   1 root root   53 Sep 10 11:47 java.1.gz -> /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
lrwxrwxrwx   1 root root   44 Sep 10 11:18 javac -> /usr/lib/jvm/java-11-openjdk-amd64/bin/javac
lrwxrwxrwx   1 root root   54 Sep 10 11:18 javac.1.gz -> /usr/lib/jvm/java-11-openjdk-amd64/man/man1/javac.1.gz
lrwxrwxrwx   1 root root   46 Sep 10 11:18 javadoc -> /usr/lib/jvm/java-11-openjdk-amd64/bin/javadoc
lrwxrwxrwx   1 root root   56 Sep 10 11:18 javadoc.1.gz -> /usr/lib/jvm/java-11-openjdk-amd64/man/man1/javadoc.1.gz
lrwxrwxrwx   1 root root   43 Sep 10 11:16 javah -> /usr/lib/jvm/java-8-openjdk-amd64/bin/javah
lrwxrwxrwx   1 root root   53 Sep 10 11:16 javah.1.gz -> /usr/lib/jvm/java-8-openjdk-amd64/man/man1/javah.1.gz
lrwxrwxrwx   1 root root   44 Sep 10 11:18 javap -> /usr/lib/jvm/java-11-openjdk-amd64/bin/javap
lrwxrwxrwx   1 root root   54 Sep 10 11:18 javap.1.gz -> /usr/lib/jvm/java-11-openjdk-amd64/man/man1/javap.1.gz

지금 내 서버에는 jdk 8버전과 11 버전이 설치되어있다. 각 설치된 경로를 alternatives를 통하여 심볼릭 링크만 변경해서 path를 잡아주는 원리이다. 그렇다면 이 원리를 이용해서 JAVA_HOME 등 필요한 설정들을 한 번에 바꿀 수 있는 설정을 해보자.

우선 적용할 jdk를 이어줄 임시 디렉터리를 생성한다. root계정으로 생성하였고 이 디렉터리는 현재 사용할 jdk의 심볼릭 링크가 이어질 디렉터리이다.

root@deogicorgi-server:/# mkdir /opt/jdk

우선 기본적으로 jdk 11 버전을 사용할 것이기에 위 디렉터리에 심볼릭 링크를 생성한다.

root@deogicorgi-server:/# ln -s /usr/lib/jvm/java-11-openjdk-amd64 /opt/jdk/current
root@deogicorgi-server:/# cd /opt/jdk && ll
total 8
drwxr-xr-x 2 root root 4096 Sep 11 13:13 ./
drwxr-xr-x 4 root root 4096 Sep 11 13:06 ../
lrwxrwxrwx 1 root root   34 Sep 11 13:13 current -> /usr/lib/jvm/java-11-openjdk-amd64/

위의 심볼릭 링크로 인하여 /opt/jdk/current 디렉터리는 현재 jdk 11 홈을 가리키게 된다. 그럼 이제 alternatives에 위의 경로를 추가해주자.

root@deogicorgi-server:/# update-alternatives --install /usr/bin/java java /opt/jdk/current/bin/java 1
root@deogicorgi-server:/# update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /opt/jdk/current/bin/java                        1         manual mode
  2            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 1

위와 같은 방법으로 javac, javadoc, jar도 등록해준다

root@deogicorgi-server:/# update-alternatives --install /usr/bin/javac javac /opt/jdk/current/bin/javac 1
root@deogicorgi-server:/# update-alternatives --config javac
There are 3 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                          Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      auto mode
  1            /opt/jdk/current/bin/javac                     1         manual mode
  2            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /opt/jdk/current/bin/javac to provide /usr/bin/javac (javac) in manual mode
root@deogicorgi-server:/# update-alternatives --install /usr/bin/javadoc javadoc /opt/jdk/current/bin/javadoc 1
root@deogicorgi-server:/# update-alternatives --config javadoc
There are 3 choices for the alternative javadoc (providing /usr/bin/javadoc).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javadoc   1111      auto mode
  1            /opt/jdk/current/bin/javadoc                     1         manual mode
  2            /usr/lib/jvm/java-11-openjdk-amd64/bin/javadoc   1111      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/bin/javadoc    1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /opt/jdk/current/bin/javadoc to provide /usr/bin/javadoc (javadoc) in manual mode
root@deogicorgi-server:/# update-alternatives --install /usr/bin/jar jar /opt/jdk/current/bin/jar 1
root@deogicorgi-server:/# update-alternatives --config jar
There are 3 choices for the alternative jar (providing /usr/bin/jar).

  Selection    Path                                        Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/jar   1111      auto mode
  1            /opt/jdk/current/bin/jar                     1         manual mode
  2            /usr/lib/jvm/java-11-openjdk-amd64/bin/jar   1111      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/bin/jar    1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /opt/jdk/current/bin/jar to provide /usr/bin/jar (jar) in manual mode

이렇게 설정을 하게 되면 /opt/jdk/current 경로에 해당되는 jdk를 사용하도록 세팅된다. 현재 /opt/jdk/current 경로는 jdk 11과 링크되어 있으므로 현재 버전을 확인해보면 아래와 같이 출력되는 것을 확인할 수 있다.

root@deogicorgi-server:/# java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)

그럼 이제 /opt/jdk/current 경로를 원할 때 원하는 버전으로 변경만 해주면 쉽게 사용하는 jdk 버전을 바꿔줄 수 있게 된다. 본인은 아래와 같이 alias 설정으로 쉽게 jdk를 변환할 수 있게 설정해 두었다.

export JAVA_HOME="/opt/jdk/current"
export PATH="$PATH:$JAVA_HOME/bin"

alias chjdk8="rm /opt/jdk/current && ln -s /usr/lib/jvm/java-1.8.0-openjdk-amd64 /opt/jdk/current"
alias chjdk11="rm /opt/jdk/current && ln -s /usr/lib/jvm/java-1.11.0-openjdk-amd64 /opt/jdk/current"
deogicorgi@deogicorgi-server  ~ : chjdk8

deogicorgi@deogicorgi-server  ~ : java -version
 openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0ubuntu2~20.04-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)

deogicorgi@deogicorgi-server  ~ : javac -version
javac 1.8.0_265

deogicorgi@deogicorgi-server  ~ : chjdk11

deogicorgi@deogicorgi-server  ~ : java -version
 openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
 
deogicorgi@deogicorgi-server  ~ : javac -version
javac 11.0.8

이어지는 글 : 우분투(Ubuntu) 홈서버 구축기(3) - 외장하드 마운트

profile
최고의 개발도구는 기록과 구글링이다.

0개의 댓글