리눅스 시스템에서 프로그램을 설치하다보면, 여러 가지 버전의 패키지를 같이 설치해 사용할 필요가 있다.
예를 들어 gcc 같은 경우, 어떤 프로그램은 예전의 버전을 사용하고, 어떤 프로그램은 최신 버전을 사용해서 컴파일이 안되는 경우가 많다.
이런 경우 설치하고자 하는 프로그램에 맞는 버전의 gcc를 선택해서 사용해야 하는데, 시스템에 설치된 gcc 버전을 항상 기억하고 관리하기가 쉽지 않다.
그 때 그 때 찾아볼 수도 있겠으나, update-alternatives 를 이용하면 한꺼번에 관리하기가 조금 더 수월해진다.
설치된 패키지 확인 방법은 아래와 같다.
* 참고로 update-alternatives 는 /usr/sbin/alternatives 에 alias 되어 있다.
우분투 :
$ sudo dpkg -l | grep <확인할 패키지 이름> | awk '{print $2}'
레드햇 :
$ rpm -qa | grep <확인할 패키지 이름>
아래 명령을 이용하면 해당 패키지에 설정된 alternatives 내용을 볼 수 있다.
물론 alternatives가 설정되지 않은 패키지는 설정된 것이 없다고 나온다.
$ sudo update-alternatives --display gcc <-- (gcc 부분에 <원하는 패키지명 >을 넣으면 된다.)
gcc - auto mode
link currently points to /usr/bin/gcc-4.6 <-- 현재 사용 중인 gcc 버전
/usr/bin/gcc-4.4 - priority 20 <-- 설치되어 있는 gcc 버전 1
/usr/bin/gcc-4.6 - priority 40 <-- 설치되어 있는 gcc 버전 2
Current 'best' version is '/usr/bin/gcc-4.6'.
위와 같이 현재 시스템에 설치된 gcc 버전과 현재 사용하도록 설정되어 있는 gcc 버전이 나온다.
여러 가지 버전의 패키지(예: qmake, gcc, g++)를 동시에 설치하면, 우분투에서 알아서 alternatives를 설정하고 관리해 주기도 하지만, 그렇지 않은 경우도 있었다. 이유는 모르겠지만..
이럴 경우 수동으로 alternatives에 해당 패키지를 등록하고 사용하면 된다.
$ sudo update-alternatives --install
는 실행파일 이름으로 /etc/alternatives/ 을 가리킨다. (예: /usr/bin/gcc)
은 해당 링크 그룹의 대표 이름으로, 여러 가지 버전의 패키지들을 대표하는 이름으로 보면 될 것 같다. (예: gcc)
는 alternatives 로 실제 연결할 실행파일 이름으로, 시스템에 설치한 패키지의 실행파일 이름이다. (예: /usr/bin/gcc-4.6)
는 automatic 모드에서 어떤 것을 자동으로 선택해서 사용할지 결정할 때 사용되는 우선순위로, 높은 수가 더 높은 우선순위이다. 이 부분은 정확한 사용법은 모르겠으나, 우선적으로 사용하길 원하는 버전의 패키지에 우선순위를 높게 주도록 하자. (예: 40)
gcc-4.6과 gcc-4.4가 함께 설치되어 있는데, alternatives가 설정되어 있지 않다면,
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 40
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20
$ sudo update-alternatives --display gcc
gcc - auto mode
link currently points to /usr/bin/gcc-4.6
/usr/bin/gcc-4.4 - priority 20
/usr/bin/gcc-4.6 - priority 40
Current 'best' version is '/usr/bin/gcc-4.6'.
와 같이 설치하고 확인할 수 있다. 물론 --remove 옵션을 이용해 지우는 것도 가능하다.
자세한 내용은 sudo update-alternatives --help 를 참조…
alternatives 를 설정한 패키지들 중 실제 사용하고 싶은 패키지 버전을 변경하고 싶은 경우 --config 옵션을 이용한다.
$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-4.6 40 auto mode
1 /usr/bin/gcc-4.4 20 manual mode
2 /usr/bin/gcc-4.6 40 manual mode
Press enter to keep the current choice[*], or type selection number:
여기서 설정하고자 하는 패키지 번호를 입력하면 gcc 라는 명령이 선택한 버전과 연결된다.
alternatives 기본 패키지 변경