alternatives 를 사용한 jdk 버전관리

Taesu Seo·2021년 3월 5일
1

Linux

목록 보기
1/1

alternatives?

리눅스 시스템에서 여러 가지 버전의 패키지를 설치하여 사용 할 경우가 많음. 이럴 때 alternatives 커맨드라인 툴을 이용하여 여러 버전의 패키지를 관리하여 필요에 따라 유동적으로 원하는 버전 선택 가능
alternatives는 심볼릭 링크를 생성, 제거, 관리, 조회 할 수 있는 기능을 제공하는 GNU 라이센스의 커맨드라인 툴

사용법

현재 alternatives 설정에는 jdk7, jdk8 가 설치되어 있음

[root@localhost java]# alternatives --config java

심볼릭 링크 생성하기 ( jdk 11 설치과정 생략 )

[root@localhost java]# alternatives --install /usr/bin/java java /usr/local/java/jdk-11.0.9/bin/java 1

Redhat 기준 alternatives 는 기본적으로 /etc/alternatives<name> 의 경로에 링크가 생성되고 priority, link, path 등 관련정보를 /var/lib/alternatives/<name>의 경로에 저장

-> <link> : 심볼릭 링크의 경로
-> <name> : alternatives 에서 관리 할 심볼릭 링크 그룹명
-> <path> : 패키지의 절대 경로
-> <priority> : 링크 그룹 내에서 우선순위 지정. 정수로 입력하며 클 수록 우선순위

설정 값을 확인하면 이전에는 등록되지 않았던 java 그룹 내 jdk11 버전 확인 가능하며 목록 내 자바 버전으로 수정 가능

JAVA_HOME 환경변수 설정을 위해 /etc/profile 파일을 열어 하단에 명령어 추가 후 변경사항 반영

[root@localhost java]# vi /etc/profile
# add line
export JAVA_HOME=$(readlink -f /usr/bin/java) | sed "s:bin/java::")
[root@localhost java]# . /etc/profile

readlink -f 의 의미는 심볼릭 링크에서 원본파일을 추출하는 명령어
포스트 내용대로 진행했다면 readlink -f /usr/bin/java 명령어의 결과는 /usr/local/java/jdk-11.0.9/bin/java

sed 는 유닉스에서 텍스트를 변환하기 위한 프로그램
s : 행마다 처음 검색된 텍스트를 원하는 텍스트로 바꿈
: : 토큰을 기준으로 bin/java 텍스트를 공백으로 치환
포스트 내용대로 진행했다면 JAVA_HOME 환경변수에 /usr/local/java/jdk-11.0.9/ 텍스트 대입

profile
Connecting the dots

2개의 댓글

comment-user-thumbnail
2021년 9월 1일

안녕하세요.
올려주신 글 덕분에 Java 설치에 많은 도움이 되었습니다.
환경변수에서 readlink 앞에 괄호가 한개 빠진 것 같습니다.
프로파일 불러 올 때 오류가 발생해서 괄호를 한 개 더 넣어 수정했더니 잘 적용되었습니다.

export JAVA_HOME=$((readlink -f /usr/bin/java) | sed "s:/bin/java::")

그리고 alternatives 를 이용하여 Java 버전 변경했을 때 "java -version" 명령어를 쳐보면
기존 버전으로 계속 표기가 되더라구요. . /etc/profile 명령어를 치더라도 같은 결과 입니다.
반드시 로그아웃을 했다가 다시 로그인 해야만 변경된 JAVA_HOME 경로가 적용되는 것 같은데 무슨 방법이 없을까요?

개발자가 아니라 두서없는 내용으로 문의 드립니다.^^
감사합니다.

1개의 답글