목차
0. 설치 전 확인
- alternatives의 기본적인 소개와 세팅 진행 전 확인해야 될 부분입니다.
0.1. alternatives 소개
[alternatives]
: 심볼릭 링크 그룹을 생성, 제거, 관리, 조회할 수 있는 기능을 제공하는 툴
: 서버 관리 및 프로젝트 관리를 하다 보면 경우에 따라 여러 가지 버전의 Java(jdk)를 관리해야 할 필요가 있는데 이럴 경우 관리를 하는데 매우 도움이 됩니다.
: alternatives (레드햇), update-alternatives (데비안)으로 OS에 따라 명령어가 다릅니다.
[alternatives 기본 명령어]
1. 전체 링크 그룹에 대한 정보를 표시
# alternatives --list name
2. alternatives에 심볼릭 링크 그룹 등록
# alternatives --install link name path priority [--slave link name path]... [--initscript service] [--family name]
--slave를 이용해 부수적인 명령어도 같이 관리할 때 사용합니다. (--slave 옵션은 여러 번 정의할 수 있습니다.)
EX) java, javac, javadoc 등 한 번에 등록해서 관리가 가능합니다.
3. alternatives에 등록한 심볼릭 링크 그룹 삭제
# alternatives --remove name path
4. 심볼릭 링크 그룹 정보 표시 (
# alternatives --display name
5. 심볼릭 링크 그룹 마스터 선택 (사용할 버전 선택)
# alternatives --config name
link: 심볼릭 링크의 경로, ln -s로 생성한 심볼릭 링크 경로
name: alternatives 에서 관리할 심볼릭 링크 그룹명
path: 패키지의 절대 경로
priority: 링크 그룹 내에서 우선순위, 정수로 입력하고 클수록 우선순위가 높습니다.
[alternatives 관련 디렉터리]
/etc/alternatives/<name>
: 링크 그룹이 생성되는 디렉터리
/var/lib/alternatives/<name>
: 링크 그룹의 메타 데이터(mode, priority, link, path)에 대한 정보를 저장하는 디렉터리
★더 자세한 내용은 man alternatives를 이용해 확인해주세요.
0.2. 여러 버전의 Java(jdk) 설치
- 실습으로 하는 경우 여러 버전의 Java(jdk) 파일을 미리 설치해 둡니다.
(필자는 openjdk 15.0.2, 14.0.2를 /usr/local/lib에 wget으로 설치했습니다.)
0.3. 기존 파일 제거
- CentOS7을 설치한 경우 기본적으로 JDK도 설치되어 있고 alternatives에 기본적으로 심볼릭 링크가 등록이 되어 있습니다. 등록된 심볼릭 링크를 제거 후 세팅 작업을 진행합니다.
- 기존에 등록된 Java 심볼릭 링크 그룹이 있는지 조회해 봅니다.
1. 전체 심볼릭 링크 그룹 확인
alternatives --list
# alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
ld auto /usr/bin/ld.bfd
mkisofs auto /usr/bin/genisoimage
cdrecord auto /usr/bin/wodim
nmap auto /usr/bin/ncat
cdda2wav auto /usr/bin/icedax
xinputrc auto /etc/X11/xinit/xinput.d/ibus.conf
java auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/bin/java
jre_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre
jre_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre
jre_1.8.0_openjdk auto /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
print auto /usr/bin/lpr.cups
libjavaplugin.so.x86_64 auto /usr/lib64/IcedTeaPlugin.so
mta auto /usr/sbin/sendmail.postfix
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
libwbclient.so.0.15-64 auto /usr/lib64/samba/wbclient/libwbclient.so.0.15
- 기존 java가 등록되어 있으면 위에서 조회한 심볼릭 링크 그룹명과 패키지의 절대 경로를 사용해 다음 명령어로 등록된 심볼릭 링크를 제거해 줍니다.
1. 심볼릭 링크 제거
alternatives --remove <name> <path>
name: alternatives 에서 관리하는 심볼릭 링크 그룹명
path: 패키지의 절대 경로
# alternatives --remove java /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/bin/java
- 제거가 잘 되었는지 확인을 위해 한 번 더 조회해 봅니다.
# alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
ld auto /usr/bin/ld.bfd
mkisofs auto /usr/bin/genisoimage
cdrecord auto /usr/bin/wodim
nmap auto /usr/bin/ncat
cdda2wav auto /usr/bin/icedax
xinputrc auto /etc/X11/xinit/xinput.d/ibus.conf
jre_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre
jre_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre
jre_1.8.0_openjdk auto /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
print auto /usr/bin/lpr.cups
libjavaplugin.so.x86_64 auto /usr/lib64/IcedTeaPlugin.so
mta auto /usr/sbin/sendmail.postfix
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
libwbclient.so.0.15-64 auto /usr/lib64/samba/wbclient/libwbclient.so.0.15
1. 설정
- 필자의 Java(Jdk) 설치경로가 다음과 같습니다. (필자는 두 버전을 이용해 세팅합니다.)
/usr/local/lib/jdk-14.0.2, /usr/local/lib/jdk-15.0.2
(관리를 위해 리눅스 디렉터리 용도에 맞게 관리를 위해 java(jdk)를 /usr/local/lib에 설치했습니다.)
# ll
합계 33136
drwxr-xr-x. 8 root root 96 7월 21 12:49 jdk-14.0.2
drwxr-xr-x. 8 root root 96 7월 21 12:49 jdk-15.0.2
-rwxr-xr-x. 1 root root 33917232 7월 12 22:05 libpython3.9.a
drwxr-xr-x. 2 root root 54 7월 12 22:07 pkgconfig
drwxr-xr-x. 36 root root 8192 7월 12 22:07 python3.9
1.1. 심볼릭 링크 생성(ln)
- alternatives 설정을 위해 설정할 여러 버전의 자바 심볼릭 링크를 생성해 줍니다.
(관리를 위해 리눅스 디렉터리 용도에 맞게 관리를 위해 심볼릭 링크를 /usr/local/bin에 생성했습니다.)
★ 하나의 Java(jdk) 대상으로만 심볼릭 링크를 생성하면 됩니다. → openjdk 14.0.2 심볼릭 링크 생성
1. 심볼릭 링크 생성 (ln -s 원본파일 링크파일)
(환경변수를 위한 심볼링 링크, java 실행을 위한 심볼릭 링크, javac 실행을 위한 심볼릭 링크를 생성)
# ln -s /usr/local/lib/jdk-14.0.2 /usr/local/bin/java_home
# ln -s /usr/local/lib/jdk-14.0.2/bin/java /usr/local/bin/java
# ln -s /usr/local/lib/jdk-14.0.2/bin/javac /usr/local/bin/javac
2. ll 명령어를 이용해 해당 경로에 심볼릭 링크가 정확한 경로에 잘 생성되었는지 확인
# ll
합계 17484
-rwxr-xr-x. 1 root root 101 7월 12 22:07 2to3-3.9
-rwxr-xr-x. 1 root root 99 7월 12 22:07 idle3.9
lrwxrwxrwx. 1 root root 34 7월 21 12:58 java -> /usr/local/lib/jdk-14.0.2/bin/java
lrwxrwxrwx. 1 root root 25 7월 21 12:58 java_home -> /usr/local/lib/jdk-14.0.2
lrwxrwxrwx. 1 root root 35 7월 21 12:58 javac -> /usr/local/lib/jdk-14.0.2/bin/javac
-rwxr-xr-x. 1 root root 229 7월 12 22:07 pip3.9
-rwxr-xr-x. 1 root root 84 7월 12 22:07 pydoc3.9
-rwxr-xr-x. 1 root root 17879896 7월 12 22:05 python3.9
-rwxr-xr-x. 1 root root 3087 7월 12 22:07 python3.9-config
1.2. 심볼릭 링크 그룹 생성(alternatives)
- alternatives --install 명령어를 이용해 심볼릭 링크 그룹을 생성 후 명령어 ll과 alternatives --list를 이용해 확인해 줍니다. → openjdk 14.0.2 심볼릭 링크 그룹 생성
1. 환경변수 그리고 --slave를 이용해 java, javac 명령어도 등록해 줍니다.
# alternatives --install /usr/local/bin/java_home java_home /usr/local/lib/jdk-14.0.2 2 --slave /usr/local/bin/java java /usr/local/lib/jdk-14.0.2/bin/java --slave /usr/local/bin/javac javac /usr/local/lib/jdk-14.0.2/bin/javac
2. 해당 심볼릭 링크가 새로 생성된 심볼릭 링크 그룹을 잘 바라보고 있는 지 확인해 줍니다.
# ll
합계 17484
-rwxr-xr-x. 1 root root 101 7월 12 22:07 2to3-3.9
-rwxr-xr-x. 1 root root 99 7월 12 22:07 idle3.9
lrwxrwxrwx. 1 root root 22 7월 21 13:06 java -> /etc/alternatives/java
lrwxrwxrwx. 1 root root 27 7월 21 13:06 java_home -> /etc/alternatives/java_home
lrwxrwxrwx. 1 root root 23 7월 21 13:06 javac -> /etc/alternatives/javac
-rwxr-xr-x. 1 root root 229 7월 12 22:07 pip3.9
-rwxr-xr-x. 1 root root 84 7월 12 22:07 pydoc3.9
-rwxr-xr-x. 1 root root 17879896 7월 12 22:05 python3.9
-rwxr-xr-x. 1 root root 3087 7월 12 22:07 python3.9-config
3. alternatives --list 명령어를 이용해 잘 생성이 되었는지 확인해 줍니다.
# alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
ld auto /usr/bin/ld.bfd
mkisofs auto /usr/bin/genisoimage
cdrecord auto /usr/bin/wodim
nmap auto /usr/bin/ncat
cdda2wav auto /usr/bin/icedax
xinputrc auto /etc/X11/xinit/xinput.d/ibus.conf
jre_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre
jre_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre
jre_1.8.0_openjdk auto /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
print auto /usr/bin/lpr.cups
libjavaplugin.so.x86_64 auto /usr/lib64/IcedTeaPlugin.so
mta auto /usr/sbin/sendmail.postfix
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
libwbclient.so.0.15-64 auto /usr/lib64/samba/wbclient/libwbclient.so.0.15
java_home auto /usr/local/lib/jdk-14.0.2
4. 해당 디렉터리에 잘 생성이 되었는지 확인해 봅니다.
# ll /etc/alternatives/java_home
lrwxrwxrwx. 1 root root 25 7월 21 13:13 /etc/alternatives/java_home -> /usr/local/lib/jdk-14.0.2
# ll /var/lib/alternatives/java_home
-rw-r--r--. 1 root root 281 7월 21 13:13 /var/lib/alternatives/java_home
- 추가적으로 그룹으로 함께 관리할 Java(jdk)도 생성해 줍니다. → openjdk 15.0.2 심볼릭 링크 그룹 생성
# alternatives --install /usr/local/bin/java_home java_home /usr/local/lib/jdk-15.0.2 1 --slave /usr/local/bin/java java /usr/local/lib/jdk-15.0.2/bin/java --slave /usr/local/bin/javac javac /usr/local/lib/jdk-15.0.2/bin/javac
1.3. 심볼릭 링크 그룹 생성 확인(alternatives)
- 위에서 생성한 그룹이 잘 생성되었는지 확인합니다.
1. alternatives --display name
# alternatives --display java_home
java_home - 상태가 자동입니다.
현재 /usr/local/lib/jdk-14.0.2로 링크되어 있습니다
/usr/local/lib/jdk-14.0.2 - priority 2
슬레이브 java: /usr/local/lib/jdk-14.0.2/bin/java
슬레이브 javac: /usr/local/lib/jdk-14.0.2/bin/javac
/usr/local/lib/jdk-15.0.2 - priority 1
슬레이브 java: /usr/local/lib/jdk-15.0.2/bin/java
슬레이브 javac: /usr/local/lib/jdk-15.0.2/bin/javac
현재 '최고' 버전은 /usr/local/lib/jdk-14.0.2입니다.
- cat명령어를 이용해 설정한 메타데이터도 직접 확인해 볼 수 있습니다.
# cat /var/lib/alternatives/java_home
auto
/usr/local/bin/java_home
java
/usr/local/bin/java
javac
/usr/local/bin/javac
/usr/local/lib/jdk-14.0.2
2
/usr/local/lib/jdk-14.0.2/bin/java
/usr/local/lib/jdk-14.0.2/bin/javac
/usr/local/lib/jdk-15.0.2
1
/usr/local/lib/jdk-15.0.2/bin/java
/usr/local/lib/jdk-15.0.2/bin/javac
1.4. 심볼릭 링크 파일 환경 변수 등록
- Java(jdk) 환경 변수를 등록합니다. /usr/local/bin/java_home 심볼릭 링크를 Java(jdk) 환경 변수로 등록하면 alternatives명령어를 이용해 간단하게 필요시에 다양한 버전의 환경 변수를 변경해서 사용할 수 있습니다.
1. vi로 파일 편집
# vi /etc/profile
2. 작성내용 (Shift + G로 파일 맨 끝에 작성해 줍니다.)
export JAVA_HOME=/usr/local/bin/java_home
3. 파일 적용(저장)
# source /etc/profile
2. 버전 관리(사용)
- 위에서 설정한 대로 Java(jdk) 버전 관리를 좀 더 편하게 할 수 있게 됐습니다. alternatives --config 명령어를 이용해 자바 버전을 변경해 봅시다.
2.1. 현재 Java버전 확인
- 현재 자바 버전을 확인해 봅니다.
1. 자바 명령어를 이용해 확인해 본 결과 현재 14.0.2 버전으로 세팅되어 있습니다.
# java -version
openjdk version "14.0.2" 2020-07-14
OpenJDK Runtime Environment (build 14.0.2+12-46)
OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)
# javac -version
javac 14.0.2
2. 환경변수 확인(해당 디렉터리로 접근해 버전을 확인한다.)
# cd $JAVA_HOME
# ls
bin conf include jmods legal lib release
# cat release
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION="14.0.2"
JAVA_VERSION_DATE="2020-07-14"
MODULES="java.base java.compiler java.datatransfer java.xml java.prefs java.desktop java.instrument java.logging java.management java.security.sasl java.naming java.rmi java.management.rmi java.net.http java.scripting java.security.jgss java.transaction.xa java.sql java.sql.rowset java.xml.crypto java.se java.smartcardio jdk.accessibility jdk.internal.vm.ci jdk.management jdk.unsupported jdk.internal.vm.compiler jdk.aot jdk.internal.jvmstat jdk.attach jdk.charsets jdk.compiler jdk.crypto.ec jdk.crypto.cryptoki jdk.dynalink jdk.internal.ed jdk.editpad jdk.hotspot.agent jdk.httpserver jdk.incubator.foreign jdk.internal.opt jdk.jdeps jdk.jlink jdk.incubator.jpackage jdk.internal.le jdk.internal.vm.compiler.management jdk.jartool jdk.javadoc jdk.jcmd jdk.management.agent jdk.jconsole jdk.jdwp.agent jdk.jdi jdk.jfr jdk.jshell jdk.jsobject jdk.jstatd jdk.localedata jdk.management.jfr jdk.naming.dns jdk.naming.rmi jdk.net jdk.nio.mapmode jdk.rmic jdk.scripting.nashorn jdk.scripting.nashorn.shell jdk.sctp jdk.security.auth jdk.security.jgss jdk.unsupported.desktop jdk.xml.dom jdk.zipfs"
OS_ARCH="x86_64"
OS_NAME="Linux"
SOURCE=".:hg:55692db5e928"
2.2. Java버전 변경
- alternatives --config 명령어를 이용해 자바 버전을 변경 후 확인해봅니다. (14.0.2 → 15.0.2)
1. 심볼릭 링크 그룹 마스터 변경 alternatives --config name
# alternatives --config java_home
2 개의 프로그램이 'java_home'를 제공합니다.
선택 명령
-----------------------------------------------
*+ 1 /usr/local/lib/jdk-14.0.2
2 /usr/local/lib/jdk-15.0.2
현재 선택[+]을 유지하려면 엔터키를 누르고, 아니면 선택 번호를 입력하십시오:2
2. 자바버전 확인
# java -version
openjdk version "15.0.2" 2021-01-19
OpenJDK Runtime Environment (build 15.0.2+7-27)
OpenJDK 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)
# javac -version
javac 15.0.2
3. 환경변수 확인(해당 디렉터리로 접근해 버전을 확인한다.)
# cd $JAVA_HOME
# ls
bin conf include jmods legal lib release
# cat release
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION="15.0.2"
JAVA_VERSION_DATE="2021-01-19"
MODULES="java.base java.compiler java.datatransfer java.xml java.prefs java.desktop java.instrument java.logging java.management java.security.sasl java.naming java.rmi java.management.rmi java.net.http java.scripting java.security.jgss java.transaction.xa java.sql java.sql.rowset java.xml.crypto java.se java.smartcardio jdk.accessibility jdk.internal.vm.ci jdk.management jdk.unsupported jdk.internal.vm.compiler jdk.aot jdk.internal.jvmstat jdk.attach jdk.charsets jdk.compiler jdk.crypto.ec jdk.crypto.cryptoki jdk.dynalink jdk.internal.ed jdk.editpad jdk.hotspot.agent jdk.httpserver jdk.incubator.foreign jdk.internal.opt jdk.jdeps jdk.jlink jdk.incubator.jpackage jdk.internal.le jdk.internal.vm.compiler.management jdk.jartool jdk.javadoc jdk.jcmd jdk.management.agent jdk.jconsole jdk.jdwp.agent jdk.jdi jdk.jfr jdk.jshell jdk.jsobject jdk.jstatd jdk.localedata jdk.management.jfr jdk.naming.dns jdk.naming.rmi jdk.net jdk.nio.mapmode jdk.sctp jdk.security.auth jdk.security.jgss jdk.unsupported.desktop jdk.xml.dom jdk.zipfs"
OS_ARCH="x86_64"
OS_NAME="Linux"
SOURCE=".:hg:38912b2a5bcb"
'OS > Linux' 카테고리의 다른 글
[Linux] CentOS7 아파치 톰캣(apache tomcat) 설치 (0) | 2021.08.02 |
---|---|
[Linux] CentOS7 yum으로 Java(jdk) 설치 - yum (0) | 2021.08.01 |
[Linux] 리눅스 환경변수 설정 (2) | 2021.07.30 |
[Linux] CentOS7 원하는 특정 버전 Java(jdk) 설치하기 - wget (2) | 2021.07.25 |
[Linux] CentOS 7 최신 버전 파이썬 설치하기 - 개발환경 구축 (1) | 2021.07.13 |