2/20/2018

Ubuntu 설치된 중복 Package 관리방법

1. Ubuntu에서 Package 관리 방법 

Ubuntu의 기본 Package 관리방법
  https://ahyuo79.blogspot.com/2015/07/ubuntu.html

APT가 기존의 것보다 상당히 많은 것 같아서 아래와 같이 나열해본다.

  • APT Command 관련 명령어 
  1. apt-get
  2. apt-cache
  3. apt (apt-get/apt-cache 혼합)
  4. apt-add-repository (add-apt-repository와 동일 )
  5. apt-key
  6. apt-ftparchive
  7. apt-extracttemplates
  8. apt-key
  9. apt-mark 
  10. apt-sortpkgs 

 상당히 많은 것 같은데, 현재 다 알필요가 없는 것 같아서 주요한 것만 다시 정리

  • update-alternative  명령 
  1. 내가 Download한 binary를 Package로 등록/삭제  
  2. 설치되었으며, 중복된 Package 중 내가 원하는 Version 선택가능  

  • 관련 Manual 
  https://linux.die.net/man/8/update-alternatives
  https://wiki.debian.org/HowToPackageForDebian

1.1 apt / update-alternatives 사용법 

apt를 보면 apt-get/apt-cache 기능을 간략하게 사용하는 것 같다.

$ apt
Usage: apt [options] command

CLI for apt.
Basic commands: 
 list - list packages based on package names
 search - search in package descriptions
 show - show package details

 update - update list of available packages

 install - install packages
 remove  - remove packages

 upgrade - upgrade the system by installing/upgrading packages
 full-upgrade - upgrade the system by removing/installing/upgrading packages

 edit-sources - edit the source information file


동일한 2개 Package를 설치했을 경우 선택가능 및 내가 원한것을 link로 연결하여 package에 연결한다.

$ sudo update-alternatives
update-alternatives: 아래의 옵션 중에 하나를 선택해서 사용한다. 
   --install link name path priority [--slave link name path]...
   --set name path
   --remove name path
   --remove-all name
   --all
   --auto name
   --display name
   --get-selections
   --set-selections
   --query name
   --list name
   --config name


  • 실행파일 link 존재 
/etc/alternatives/

  • 설정관리 File 존재 
/var/lib/dpkg/alternatives,


2. 중복된 Package Version 변경 ( update-alternatives)

일반적으로 package 가 설치가 되면, /usr/bin/실행파일 link 파일생성이 되고 관련 Package와 연결이 되어있다.
그래서 중복된 Package이지만 Version 이 다른 것을 여러개 설치가 가능하다.


  • OpenJDK 두 개의 Version 설치 

$ sudo apt-get install openjdk-7-jdk openjdk-6-jdk 


  • OpenJDK 중 java 의 version 변경 
$ ls /var/lib/dpkg/alternatives/ | grep java // 사용여부 확인 (등록된 Link 확인)
java
javac
javadoc
javah
javap
javaws

$ sudo update-alternatives --config java  // Version 설정변경 
대체 항목 java에 대해 (/usr/bin/java 제공) 2개 선택이 있습니다.

  선택       경로                                          우선순ꡬ태
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      자동 모드
* 1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      수동 모드
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      수동 모드


  • OpenJDK의 java 설치위치 확인 
$ sudo update-alternatives --list java
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java


  • OpenJDK의 java의 구조 파악 

$ sudo update-alternatives --query java
Name: java
Link: /usr/bin/java
Slaves:
 java.1.gz /usr/share/man/man1/java.1.gz
Status: manual    // Manual/Auto Mode   
Best: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java  // 추천해주는 Package (Auto mode)
Value: /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java // 현재 사용중인 Package

Alternative: /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java  // 실제 설치된 대체 Package 주소  
Priority: 1061  // 우선순위이며 Auto Mode일 경우 높은 것을 자동설정 
Slaves:
 java.1.gz /usr/lib/jvm/java-6-openjdk-amd64/jre/man/man1/java.1.gz

Alternative: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java  // 실제 설치된 대체 Package 주소 
Priority: 1071
Slaves:
 java.1.gz /usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz

설정된 모드를 더 쉽게 보여준다.

$ sudo update-alternatives --display java
java - 수동 모드
 링크가 현재 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 가리킴
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java - 우선순위 1061
  슬레이브 java.1.gz: /usr/lib/jvm/java-6-openjdk-amd64/jre/man/man1/java.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java - 우선순위 1071
  슬레이브 java.1.gz: /usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz
현재 가장 '좋은' 버전은 '/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java'입니다.


  • java 실제 구조파악 
$ ll /usr/bin/java
lrwxrwxrwx 1 root root 22  2월 24  2017 /usr/bin/java -> /etc/alternatives/java*

$ ll /etc/alternatives/java // 실행파일 link 존재 
lrwxrwxrwx 1 root root 46 10월 16 12:49 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java*

$ vi /var/lib/dpkg/alternatives/java   // 관련 설정정보 (수동모드)  
manual
/usr/bin/java
java.1.gz
/usr/share/man/man1/java.1.gz

/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
1061
/usr/lib/jvm/java-6-openjdk-amd64/jre/man/man1/java.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
1071
/usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz


  • 로그를 통한 설정확인 
$ ls /var/lib/dpkg/alternatives/     // 현재 update-alternatives를 설정된 file 전체검색 
animate                       fonts-japanese-gothic.ttf     jconsole                      newt-palette                  tdbbackup
appletviewer                  from                          jdb                           orbd                          telnet
automake                      ftp                           jexec                         pack200                       text.plymouth
awk                           gconftool                     jhat                          pager                         tnameserv
builtins.7.gz                 gem                           jinfo                         php                           traceroute6
......

$ cat /var/log/alternatives.log | tail -n 50  // 본인이 최근에 update-alternatives 사용한 흔적 ,더이전 log는  *.log.1 기록 



3. Download 한 실행파일 연결/제거 (update-alternatives)

Open JDK Download
  https://jdk.java.net/
  https://jdk.java.net/archive/

OpenJDK를 Download 하여 Link를 설정해보고 Link를 제거해보자.

  • 기본사용법 
update-alternatives --install link name path priority [--slave link name path]...
slave는 master 설정에 따라 동작한다고 한다.

  • Link 생성 및 설정변경 (Link만 생성)

$ sudo update-alternatives --install /usr/bin/java java /home/jhlee/jdk-9/bin/java 1091

$ sudo update-alternatives --config java  // 설정을 변경
대체 항목 java에 대해 (/usr/bin/java 제공) 3개 선택이 있습니다.

  선택       경로                                          우선순ꡬ태
------------------------------------------------------------
  0            /home/jhlee/jdk-9/bin/java                       1091      자동 모드
  1            /home/jhlee/jdk-9/bin/java                       1091      수동 모드
* 2            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      수동 모드
  3            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      수동 모드


  • Link 제거 (Link만 제거)

$ sudo update-alternatives --remove java /home/jhlee/jdk-9/bin/java 
update-alternatives: 수동으로 선택한 대체 항목을 지우는 중 - java을(를) 자동 모드로 변경합니다
update-alternatives: using /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in 자동 모드


  https://blog.thinkbee.kr/linux/linux-update-alternatives/
  https://askubuntu.com/questions/26498/how-to-choose-the-default-gcc-and-g-version
  https://blog.thinkbee.kr/linux/linux-update-alternatives/