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
- dpkg은 package를 설치/검색/제거가 가능한 Command이며, 대신 *.deb 만 가능
- APT Command 관련 명령어
- apt-get : package 설치/제거 및 Package Index update 기능, 및 Package check
- apt-cache : repository package 검색 및 설치된 Package 검색 , 의존성 검사
- add-apt-repository : repository 추가 및 제거
- DPKG(Debian Package) 과 APT(Advanced Packaging Tool) 관련 Tool 비교
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-cache // FILE 부분에서 관련 저장소 및 다른 정보확인
http://manpages.ubuntu.com/manpages/precise/man1/add-apt-repository.1.html
1.1. apt-get/apt-cache 기능확인
- apt-get 사용법
$ 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 기본기능
$ 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
$ add-apt-repository --help Usage: add-apt-repositoryadd-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 설치후 의존성확인 가능)
특히 현재 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
package을 설치는 package index file에 존재해야 설치가 가능하며, 이는 package 에는 영향을 미치지 않는다.
- 관련파일 /etc/apt/source.list or /etc/apt/source.list.d
- apt-get upgrade
$ sudo apt-get update //현재 Package index file을 repository와 sync (update) $ sudo apt-get upgrade // 설치된 패키지를 새버전으로 Upgrade.
- 주의사항
2. Ubuntu의 repository 추가/삭제
Ubuntu에서는 처음 설치후 외부의 Repository를 통해 각각 Package를 추가 및 업그레이드를 진행을 한다.
2.1. Ubuntu Version CodeName 알기
Android 처럼 Ubuntu역시 각각 Version마마 Code Name이 별도로 존재하며, 설정을 할때,이를 제대로 인지해야 무슨 Version인지 본인이 안다.
- Ubuntu Release Version 과 Code Name 알기
- 12.04 LTS precise
- 14.04 LTS trusty
자세한 내용은 아래사이트 참고
https://wiki.ubuntu.com/Releases
2.2. Ubuntu Command를 통해 Repository 관리
add-apt-repository를 이용하여 repository 추가 및 제거가능하며, 추가된 사항을 상위 두곳의 source.list에서 확인가능
- Repository의 주소 및 설정확인
- /etc/apt/sources.list repository 주소 추가 및 제거가능
- /etc/apt/sources.list.d/file 형태로 repository 주소 추가 (ppa 사용시 이곳에 추가)
- /etc/apt/source.list 설정 이해
- Main - Canonical-supported free and open-source software. (Ubuntu에서 제공하는 Open source)
- Universe - Community-maintained free and open-source software.(커뮤니티기반의 Open source)
- Restricted - Proprietary drivers for devices.(자산으로 인정하는 디바이스 드라이버 )
- 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
- 기본 사용예제
$ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update $ sudo vi /etc/apt/sources.list.d/...
- 공식 PPA 사이트
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 로그 분석)
$ 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