7/12/2015

Ubuntu Package 검색/설치/제거 방법

1. Ubuntu 의 Package 관리  

Ubuntu Linux는 Debian Linux 계열로 Linux로 *.deb 방식으로 package를 관리한다.
이에 관련된 Command는 dpkg 과 apt-x tool을 지원한다.
DPKG(Debian Package management system)는 의미 하며, APT(Advanced Packaging Tool)의 의미이다.

  https://wiki.debian.org/ko/DebianPackageManagement

  • dpkg command
  1. dpkg은  package를 설치/검색/제거가 가능한 Command이며, 대신 *.deb 만 가능 

  • APT Command 관련 명령어
  1. apt-get : package 설치/제거 및 Package Index update 기능, 및 Package check 
  2. apt-cache : repository package 검색 및 설치된 Package 검색 , 의존성 검사 
  3. add-apt-repository : repository 추가 및 제거 

  • DPKG(Debian Package) 과 APT(Advanced Packaging Tool) 관련 Tool 비교 
dpkg command 는 Debian Linux에서 사용하는 패키지 관리시스템이며, 설치가 될 경우 *.deb로 관리하여 이를 설치/제거 되어진다.
APT(Advanced Packaging Tool)도 역시 기존의 *.deb은 설치/제거를 하며 보다 쉽게 설치 가능하다.

  https://en.wikipedia.org/wiki/Dpkg
  https://en.wikipedia.org/wiki/APT_(Debian)

  • 관련 Man Page
  https://linux.die.net/man/8/apt-get      // FILE 부분에서 관련 저장소 및 다른 명령확인
  https://linux.die.net/man/8/apt-cache   // FILE 부분에서 관련 저장소 및 다른 정보확인
  http://manpages.ubuntu.com/manpages/precise/man1/add-apt-repository.1.html


1.1. apt-get/apt-cache 기능확인


  • apt-get 사용법
Package를 설치/제거기능 기본이며, Package Index update 및 종속되어지 Package 제거기능, Source/Binary Download 및 의존성체크 기능

$ sudo apt-get 

apt-get은 패키지를 다운로드하고 설치하는 간단한 명령입니다.
가장 많이 사용하는 명령은 update 명령과 install 명령입니다

Commands:
   update - 새 패키지 목록 가져오기 (package index files 를 update 진행)
   upgrade - 업그레이드 실행  (기존 설치된 Package를 Upgrade 진행)
   install - 새 피키지 설치 (패키지 이름은 확장자를 제외함)
   remove - 패키지 제거 
   autoremove - 사용하지 않는 모든 패키지를 자동으로 제거 (거의 사용할일은 없음)
   purge - 패키지와 설정 파일을 함께 제거 (Package 중 종속된 Package가 있는 경우 같이 제거)
   source - 소스 압축 파일 다운로드
   build-dep - 소스 패키지의 빌드 의존성 설정 (의존성 검사후 설치진행)
   dist-upgrade - 배포판 업그레이드  
   dselect-upgrade - dselect 선택 따르기
   clean - 다운로드한 압축 파일 지우기
   autoclean - 다운로드한 압축 파일 중 오래된 것 지우기
   check -의존성이 깨진 패키지를 확인합니다
   changelog - 주어진 패키지의 바뀐 내용 목록을 다운로드한 후 표시
   download - 현재 디렉터리로 바이너리 패키지 다운로드

Options:
  -h  이 도움말.
  -q  기록할 수 있는 출력 - 작업 알리미 없음
  -qq 올 이외의 메시지 표시하지 않기
  -d  압축 파일을 설치하거나 압축 해제하지 않고 다운로드만 하기
  -s  동작 없음. 명령 시뮬레이션 실행
  -y  모든 질문을 표시하지 않고 예라고 대답하기
  -f  망가진 의존성 패키지가 있는 시스템을 즉시 정정하려 합니다.
  -m  압축 파일을 찾을 수 없어도 계속 진행하도록 합니다
  -u  업그레이드한 패키지의 목록도 표시합니다.
  -b  소스 패키지를 가져온 후 빌드합니다
  -V  자세한 버전 번호 표시
  -c=? 지정한 설정 파일 읽기
  -o=? 임의의 옵션을 설정합니다, 예를 들어 -o dir::cache=/tmp
더 자세한 정보는 apt-get(8), sources.list(5) and apt.conf(5) 메뉴얼 페이지
를 확인하십시오.


  • apt-cache 기본기능
이미 설치된/ 설치될 package 정보확인 및 package 의존성 등 다양한 부가 기능을 제공

$ sudo apt-cache 
Usage: apt-cache [options] command
       apt-cache [options] showpkg pkg1 [pkg2 ...]
       apt-cache [options] showsrc pkg1 [pkg2 ...]

apt-cache is a low-level tool used to query information from APT's binary cache files

Commands:
   gencaches - Build both the package and source cache
   showpkg - Show some general information for a single package
   showsrc - Show source records
   stats - Show some basic statistics
   dump - Show the entire file in a terse form
   dumpavail - Print an available file to stdout
   unmet - Show unmet dependencies
   search - Search the package list for a regex pattern
   show - Show a readable record for the package
   depends - Show raw dependency information for a package
   rdepends - Show reverse dependency information for a package
   pkgnames - List the names of all packages in the system
   dotty - Generate package graphs for GraphViz
   xvcg - Generate package graphs for xvcg
   policy - Show policy settings

Options:
  -h   This help text.
  -p=? The package cache.
  -s=? The source cache.
  -q   Disable progress indicator.
  -i   Show only important deps for the unmet command.
  -c=? Read this configuration file
  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp

apt-get으로 설치된 package는 *.deb으로 되어있기때문에 dpkg 명령도 가능하며, dpkg기능도 설치 및 제거도 가능하지만 이곳에서 생략. 자세한 내용은 man or --help로 참조



  • add-apt-repository 
apt command는 remote repository ,server를 가지고 있으며, /etc/apt/source.list or /etc/apt/souce.list.d/  에 관련 repository 주소와 설정을 담고 있다.


$ add-apt-repository --help
Usage: add-apt-repository 

add-apt-repository is a script for adding apt sources.list entries.
It can be used to add any repository and also provides a shorthand
syntax for adding a Launchpad PPA (Personal Package Archive)
repository.

 - The apt repository source line to add. This is one of:
  a complete apt line in quotes,
  a repo url and areas in quotes (areas defaults to 'main')
  a PPA shortcut.
  a distro component

  Examples:
    apt-add-repository 'deb http://myserver/path/to/repo stable myrepo'
    apt-add-repository 'http://myserver/path/to/repo myrepo'
    apt-add-repository 'https://packages.medibuntu.org free non-free'
    apt-add-repository http://extras.ubuntu.com/ubuntu
    apt-add-repository ppa:user/repository
    apt-add-repository multiverse

If --remove is given the tool will remove the given sourceline from your
sources.list


Options:
  -h, --help            show this help message and exit
  -m, --massive-debug   명령줄에 많은 디버그 정보 출력
  -r, --remove          sources.list.d 디렉터레 안의 저장소 제거
  -k KEYSERVER, --keyserver=KEYSERVER
                        키 서버 주소입니다. 기본값: hkp://keyserver.ubuntu.com:80/
  -s, --enable-source   저장소에서 소스 패키지를 다운로드할 수 있도록 합니다.
  -y, --yes             모든 질의예 동의


  https://help.ubuntu.com/community/Repositories/Ubuntu


1.2. APT 명령 / DPKG 명령 기본사용법

  • apt-get install/remove/purge package (package 설치/제거) 
$ sudo apt-get install   pkg                      // pkg 패키지 설치
$ sudo apt-get remove pkg                         // pkg 패키지 제거
$ sudo apt-get purge pkg                          // pkg 는 물론 관련 패키지까지 삭제 (명령어가 생성)
$ sudo apt-get source pkg                         // pkg source download


오래된 Ubuntu Version는 purge가 remove에 포함되어있다.

  • apt-cache show/search package  (설치할 package 정보 및 검색) 
$ sudo apt-cache show pkg                         // 설치할 pkg 패키지 정보
$ sudo apt-cache search pkg                       // 설치할 pkg 패키지 검색


  • apt-cache depend package  (설치전 or 설치후 의존성확인 가능)
설치는 되었지만, Package가 제대로 동작이 되지 않는다면, 이 의존성확인으로 확인하자.
특히 현재 x86과 64bit version 충돌 발생할 수 있으며, 다른 문제도 발생할 수 있으니, 확인

$ sudo apt-cache depends zlib1g-dev:i386  // 의존성확인 의 예 
zlib1g-dev:i386
  의존: zlib1g:i386
 |의존: libc6-dev:i386
  의존: libc-dev:i386
    libc6-dev:i386
  충돌: zlib1-dev
  충돌: zlib1-dev:i386
  대체: zlib1g-dev
  망가뜨림: zlib1g-dev  


1.2.1. apt-get update와 upgrade의 차이 


  • apt-get update 
repository 주소정보가 있는 패키지 정보리스트( /etc/apt/source.list)에서 각 repository에서 package index file을 repository와 sync를 맞추는 작업일 뿐이다.  
package을 설치는 package index file에 존재해야 설치가 가능하며, 이는 package 에는 영향을 미치지 않는다.

- 관련파일 /etc/apt/source.list or /etc/apt/source.list.d


  • apt-get upgrade
현재 설치된 package를 version upgrade하는 명령으로 설치된 package를 가능한 최신 version으로 변경하는 upgrade기능


$ sudo apt-get update       //현재 Package index file을 repository와 sync (update)    
$ sudo apt-get upgrade      // 설치된 패키지를 새버전으로 Upgrade.    


  • 주의사항 
Ubuntu를 바로 설치했거나,  설치되어진지 오래되었다면 update 를 반드시 해야한다. 않을 경우 원하는 package 정보를 찾지 못하는 경우가 발생한다.


2. Ubuntu의 repository 추가/삭제  

Ubuntu에서는 처음 설치후 외부의 Repository를 통해 각각 Package를 추가 및 업그레이드를 진행을 한다.

2.1. Ubuntu Version CodeName 알기 

Android 처럼 Ubuntu역시 각각 Version마마 Code Name이 별도로 존재하며, 설정을 할때,이를 제대로 인지해야 무슨 Version인지 본인이 안다.

  • Ubuntu Release Version 과 Code Name 알기 
  1. 12.04 LTS precise
  2. 14.04 LTS trusty

  자세한 내용은 아래사이트 참고
  https://wiki.ubuntu.com/Releases


2.2. Ubuntu Command를 통해 Repository 관리 

add-apt-repository를 이용하여 repository 추가 및 제거가능하며, 추가된 사항을 상위 두곳의 source.list에서 확인가능


  • Repository의 주소 및 설정확인 
  1. /etc/apt/sources.list   repository 주소 추가  및 제거가능 
  2. /etc/apt/sources.list.d/file 형태로 repository 주소 추가 (ppa 사용시 이곳에 추가)

  • /etc/apt/source.list  설정 이해 
4가지의 main repository 의 설정이며, 중복설정가능
  1. Main - Canonical-supported free and open-source software. (Ubuntu에서 제공하는 Open source)
  2. Universe - Community-maintained free and open-source software.(커뮤니티기반의 Open source)
  3. Restricted - Proprietary drivers for devices.(자산으로 인정하는 디바이스 드라이버 )
  4. Multiverse - Software restricted by copyright or legal issues.(라이센스/법적 제한된 소프트웨어)

1번/2번은 Open source지만 안정성에서 보면 Ubuntu 기본제공과 유저기반제공
3번은 Device Driver의 개발업체의 법적책임과 관리를 개발업체가 관리하지만, Package 제공
4번은 라이센스 및 법적제한이 된 것으로 주의필요



$ sudo vi /etc/apt/source.list
deb http://kr.archive.ubuntu.com/ubuntu/ trusty main restricted       # package repository , trusty: ubuntu version 
deb-src http://kr.archive.ubuntu.com/ubuntu/ trusty main restricted   # source repository 

## Major bug fix updates produced after the final release of the distribution. (내부 주석에 설명 trusty-updates)
deb http://kr.archive.ubuntu.com/ubuntu/ trusty-updates universe      # package repository   
deb-src http://kr.archive.ubuntu.com/ubuntu/ trusty-updates universe  # source repository    

## trusty-backports , 내부주석에 설명 
deb http://kr.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://kr.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

  • add-apt-repository  사용법

lucid (Ubuntu 10.04)

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo vi /etc/apt/sources.list 
## check your list 


jaunty(Ubuntu 9.04)

$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ jaunty multiverse"  
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ jaunty-updates multiverse" 
$ sudo apt-get update
$ sudo vi /etc/apt/sources.list  
   ## check your list  


2.2.1. PPA(Personal Package Archives) 사용 

add-apt-repository는 Repository를 추가시 PPA라는 기능을 제공하며, PPA's Launchpad page에서 찾어 아래의 format으로 Repository를 추가한다.
결론적으로 직접 Repository 주소를 입력하는 것이 아니라 directory를 입력하며,실제주소는 위에서 언급했듯이 PPA's Launchpad page에서 찾는다.

man을 읽어보면,  /etc/apt/sources.list 추가 되거나 /etc/apt/sources.list.d/file (full path사용)추가된다고 하며, GPG public key도 download된다고 한다.

  • PPA's Launchpad page 정보 
$ ls /etc/apt/sources.list.d/
brightbox-ruby-ng-trusty.list  docker.list                    git-core-ppa-trusty.list       git-core-ppa-trusty.list.save 

$ vi /etc/apt/sources.list.d/brightbox-ruby-ng-trusty.list 
deb http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu trusty main
# deb-src http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu trusty main

  • 기본 사용예제 
ppa:[username]/[ppaname] format 추가 (repository의 directory 추가)


$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update  
$ sudo vi /etc/apt/sources.list.d/...  


  • 공식 PPA 사이트
아래사이트에서 ARCH에 따라 본인이 원하는 package를 검색해본다.
  https://launchpad.net/ubuntu/+ppas

PPA for Ubuntu Korea Community
  https://launchpad.net/~ubuntu-ko/+archive/ubuntu/ppa

기타예제
  http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu/
  http://webdir.tistory.com/197


2.3 Ubuntu GUI에서 Package 관리지원

Window 처럼 자동 Upgrade 기능처럼 GUI에서도 이런 기능을 제공.

  • GUI에서 설정->소프트웨어&업데이트 확인가능 



  https://help.ubuntu.com/community/Repositories/Ubuntu

3. 설치된 Package 관련정보분석 

이미 Ubuntu의 설치된 Package들을 검색하고, 로그 분석하는 법을 알아보자.

  • dpkg package (설치된 package 정보 및 검색) 
$ sudo dpkg -l                                    // 현재 전체 설치된 패키지 정보 , (시간검색이 안됨 ) 
$ sudo dpkg -l  | grep pkg                        // 현재 설치된 패키지 검색

  • dpkg package (설치된 PKG 로그 분석) 
package가 설치될 경우 아래와 같이 로그가 생성

$ ls /var/log/dpkg.log*   // 설치된 Package의 로그들  
/var/log/dpkg.log        /var/log/dpkg.log.11.gz  /var/log/dpkg.log.4.gz  /var/log/dpkg.log.7.gz
/var/log/dpkg.log.1      /var/log/dpkg.log.2.gz   /var/log/dpkg.log.5.gz  /var/log/dpkg.log.8.gz
/var/log/dpkg.log.10.gz  /var/log/dpkg.log.3.gz   /var/log/dpkg.log.6.gz  /var/log/dpkg.log.9.gz

$ cat /var/log/dpkg.log | tail -n 30  // 최근 설치된 Package 로그확인 (*.deb 기준)

$ cat /var/log/apt/history.log | tail -n 30  // apt history 로그확인


  • smbclient package를 설치했다고 아래와 같이 검색 
$ grep install /var/log/dpkg.log                  // grep를 이용하여 install (설치된 패키지) 검색 , 설치된 시간이 검색가능 
$ grep install /var/log/dpkg.log /var/log/dpkg.log.1
$ ls /var/lib/dpkg/info/*.list  | grep smbclient    // smbclient package 설치된 Directory들을 확인가능 
$ ls /var/cache/apt/archives/ | grep smb*           // 설치된 *.deb package를 찾아볼수 있다. 
pkg: package name 

  https://unix.stackexchange.com/questions/12578/list-packages-on-an-apt-based-system-by-installation-date