패키징 시스템은 어떤 패키지가 설치되었고 안되었고 설치에 가용한지 추적하는
자체의 데이타베이스를 사용한다. apt-get 프로그램은 이
데이타베이스를 이용해서 사용자가 원하는 패키지를 설치하는 방법을 인식하고
선택된 패키지가 작동하는데 필요한 추가적인 패키지가 있는지 찾게 된다.
이 리스트를 업데이트하기 위해서는 apt-get update를 이용하면 된다.
이 명령은 /etc/apt/sources.list에 있는 아카이브의 패키지 리스트를
찾는다; 이 파일에 대한 더 자세한 정보는 /etc/apt/sources.list 파일, 2.1를
참조하면 된다.
이 명령을 주기적으로 이용해서 여러분 시스템에서 가용한 패키지 업데이트를 하고 있는 것이 좋다. 특히 보안 업데이트는 매우 중요하다.
마지막으로 여러분은 기다리기만 한다! 여러분의 sources.list와 업데이트 가능한 리스트를 이용해서 여러분이 할 일은 apt-get을 이용해서 여러분이 원하는 패키지를 설치하면 된다. 예를 들어 다음과 같다:
apt-get install xchat
APT는 패키지의 가장 최신버젼을 데이타베이스에서 찾고 이를 sources.list에 정해져 있는 해당 아카이브에서 받아오게 된다. 이 패키지가 다른 것에 의존하는 경우에는 APT는 의존성을 확인해서 필요한 패키지를 설치해준다. 예를 들면:
[root]@[/] # apt-get install nautilus
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 17.2MB will be used.
Do you want to continue? [Y/n]
nautilus 패키지는 공유 라이브러리에 의존하는데 APT는 자동적으로
아카이브에서 이것들을 가져온다. apt-get 명령행에서 이러한
라이브러리의 이름을 정했다면 APT는 여러분이 계속 하기를 원한다면 APT는 물어보지
않을 것이다; 여러분이 이런 패키지들을 모두 원한다면 모두 자동적으로 설치될
것입니다.
APT가 단지 의존성을 만족시키는 패키지를 제외하고 패키지를 설치할 필요가 있을 때는 확인을 요구하게 된다.
다음의 옵션은 apt-get을 이용할 때 유용하다:
-h This help text.
-d Download only - do NOT install or unpack archives
-f Attempt to continue if the integrity check fails
-s No-act. Perform ordering simulation
-y Assume Yes to all queries and do not prompt
-u Show a list of upgraded packages as well
여러개의 패키지를 설치하고자 하는 경우에 한줄에 다 넣으면 된다. 네트워크를 통해서 파일을 다운로드하면 설치후에는 /var/cache/apt/archives에 위치하게 된다.
두번째 명령행에 제거할 패키지를 정할 수 있다. 단지 '-'를 제거할 패키지 뒤에 다음과 같이 넣으면 된다:
[root]@[/] # apt-get install nautilus gnome-panel-
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0
The following packages will be REMOVED:
gnome-applets gnome-panel gnome-panel-data gnome-session
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 2594kB will be used.
Do you want to continue? [Y/n]
패키지 삭제에 관해서는 패키지 제거하기, 3.3을 참조하라.
패키지가 문제가 있다거나 동일 버젼으로 패키지 파일을 설치하고자 한다면 다음과 같이 --reinstall를 이용하면 된다.
[root]@[/] # apt-get --reinstall install gdm
Reading Package Lists... Done
Building Dependency Tree... Done
0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
Need to get 0B/182kB of archives. After unpacking 0B will be used.
Do you want to continue? [Y/n]
이 문서를 만들 당시의 APT의 버젼은 0.5.3이었다. 이는 현재 `불안정' 버젼(sid)에서 이용되는 버젼이다. 이 버젼이 설치되었다면 추가적인 기능을 갖게 된다: apt-get install package/distribution의 형태를 이용해서 원하는 디스트리뷰션에서 패키지를 설치할 수 있다 또는 apt-get install package=version을 이용할 수 있다. 예를 들면:
apt-get install nautilus/unstable
이러면 여러분이 사용하는 것이 `stable'이라해도 `unstable'에서 노틸러스 패키지를 설치할 수 있다. '디스트리뷰션'에 대한 값들로는 stable, testing, unstable이 있다.
중요한점: 데비안의 `unstable' 버젼은 데비안 패키지의 가장 새로운 버젼이 가장 먼저 업로드 되는 곳이다. 이 디스트리뷰션은 패키지가 지나온 모든 변화를 갖고 있는데 작은 패키지에서 부터 많은 패키지에 영향을 주는 패키지나 전체 시스템에 영향을 주는 패키지까지 있다. 이러한 이유로 인해서 디스트리뷰션의 이 버젼은 경험이 없는 사용자나 안정성이 필요한 사람들이 사용해서는 안된다.
`testing' 디스트리뷰션은 `unstable'보다는 안정성면에서 낫다.
더이상 어떤 패키지를 사용하고자 하지 않으면 이를 여러분의 시스템에서 APT를 이용해서 없앨 수 있다. 이렇게 하기 위해서는 apt-get remove package를 실행하면 된다. 예를 들면:
[root]@[/] # apt-get remove gnome-panel
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
gnome-applets gnome-panel gnome-panel-data gnome-session
0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
Need to get 0B of archives. After unpacking 14.6MB will be freed.
Do you want to continue? [Y/n]
위의 예에서 볼 수 있듯이 APT는 의존성이 걸린 패키지의 제거에 신중하다. 의존하는 패키지들을 제거하는 것 없이 패키지를 제거할 수 있는 방법은 APT에서는 없다.
apt-get를 위에서와 같이 실행하면 패키지를 제거하지만 설정파일이
있다면 없애지는 않고 시스템에 그대로 남겨둔다. 패키지를 확실하게 지우려면
다음을 실해하라:
[root]@[/] # apt-get --purge remove gnome-panel
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
Need to get 0B of archives. After unpacking 14.6MB will be freed.
Do you want to continue? [Y/n]
이름 뒤에 나온 '*'를 유의하라. 이는 각 패키지의 설정파일이 모두 삭제된다는 의미가 된다.
install 방법에서 처럼 여러분은 remove을 심볼로 하여 특정한 패키지에 대한 의미를 변경할 수 ㅇLㅆ다. 제거하는 경우에 '+'를 패키지 이름 바로 뒤에 붙이면 패키지를 제거하는 대신 패키지를 설치한다.
[root]@[/] # apt-get --purge remove gnome-panel nautilus+
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
The following packages will be REMOVED:
gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 2594kB will be used.
Do you want to continue? [Y/n]
apt-get는 설치될 다른 패키지들도 보여준고(즉 패키지 설치시
패키지가 정상으로 작동하기 위해서 필요한 패키지들) 없앨 패키지들과 추가
패키지들을 포함해서 설치될 패키지들을 보여준다.
패키지 업그레이드는 APT 시스템의 성공작이다. 단 하나의 명령어로 할 수 있다:apt-get upgrade. 이 명령을 이용해서 동일 디스트리뷰션내에서 패키지 업그레이드가 가능하고 새로운 디스트리뷰션으로 업그레이드도 되지만 이 경우에는 apt-get dist-upgrade를 권한다; 자세한 내용은 새로운 릴리즈로 업글하기, 3.5 섹션을 참고 하기 바란다.
이 명령을 이용할 때는 -u과 함께 사용한다. 이 옵션은 APT를 이용할 때 업그레이드 되는 패키지 목록을 보여준다. 이 옵션없이 하면 무엇이 업그레이드 되는지 모른다. APT는 각 패키지의 최신버젼을 다운로드 하고 적절한 순서로 설치한다. 이를 실행하기 전에 반드시 apt-get update를 실행해야 하는 것이 중요하다. 가용한 패키지 리스트 업데이트하기, 3.1를 참조하라. 다음의 예제를 보면:
[root]@[/] # apt-get -u upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages have been kept back
cpp gcc lilo
The following packages will be upgraded
adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc
29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
Do you want to continue? [Y/n]
과정은 매우 단순하다. 처음 몇줄에서는 apt-get이 몇몇 패키지들이 kept back(그대로 있음)으로 있음을 알려주고 있다. 이 의미는 새로운 버젼의 패키지가 몇가지 이유에 의해서 설치가 안된다는 의미가 된다. 가능한 이유로는 의존성이 깨진(그 패키지가 의존하는 패키지가 다운로드 가능한 버젼이 아닌경우)경우이거나 새로운 의존성(그 패키지가 의존하는 패키지가 새로운 패키지에 의존하는 경우)이 있는 경우이다.
첫번째 경우에는 정확한 해결법이 없다. 두번째 경우에는 특정패키지를 apt-get install를 이용해서 설치하면 충분하다. 결국 이 것이 의존성을 해결해주는 셈이다. 더 깨끗한 방법은 dist-upgrade를 이용하는 것인데 새로운 릴리즈로 업글하기, 3.5를 참조하라.
APT의 이 기능은 여러분이 전체 데비안 시스템을 인터넷을 통하건 새로운 CD(구입하건 ISO이미지를 이용하건)를 이용하건 업그레이드가 됩니다.
설치된 패키지들간의 관계가 변화가 있을 때 사용된다. apt-get upgrade를 이용해서 패키지들을 그대로 있을 수 있다(kept back).
예를 들어 데비안의 안정버젼의 리비젼 0을 사용하고 있고 리비젼 3의 시디를
구입했다고 가정하자. APT를 이용해서 새로운 CD를 이용해서 시스템을 업그레이드
할 수 있다. 이렇게 하기 위해서는 apt-cdrom를 이용해서(CD-ROM을 sources.list에 추가하기, 2.4 참조)
CD를 /etc/apt/sources.list에 넣고 apt-get
dist-upgrade를 실행시켜준다.
APT가 항상 가장 새로운 버젼의 패키지를 찾는다. 따라서 CD가 아닌 더욱더 최근의 것을 갖는 리스트를 /etc/apt/sources.list이 포함한다면 APT는 패키지를 거기서 다운로드 한다.
패키지 업그레이드, 3.4 섹션에서 본 예와같이 몇개의 패키지들은 그대로(kept back) 있게 된다. 이 문제를 dist-upgrade 방법으로 해결할 수 있다.
[root]@[/] # apt-get -u dist-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
Calculating Upgrade... Done
The following NEW packages will be installed:
cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
libpcre2 logrotate mailx
The following packages have been kept back
lilo
The following packages will be upgraded
adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc
indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
procps psmisc
31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
Do you want to continue? [Y/n]
패키지가 업그레이드 되고 새로운 패키지가 설치되는 것이다(패키지의 새로운 의존성). lilo는 그대로(kept back) 있게 된다. 새로운 의존성보다 심각한 문제가 있을 수 있다. 다음을 실행함으로써 확인이 가능하다:
[root]@[/] # apt-get -u install lilo
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
logrotate mailx
The following packages will be REMOVED:
debconf-tiny
The following NEW packages will be installed:
cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
logrotate mailx
The following packages will be upgraded
lilo
1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
Do you want to continue? [Y/n]
위에서 언급한 것 처럼 lilo는 debconf-tiny를 없애지 않고 설치될 수 없는
상황이라서 debconf-tiny와 새롭게 충돌이 일어나고 있다.
dselect는 사용자들이 데비안 패키지 설치를 위해서 도움을 주는
프로그램이다. 다소 복잡하고 진부하게 여길 수 있다. 하지만 조금만 연습하면 이
콘솔 기반의 ncurses 인터페이스에 익숙해지고 그리 힘들지 않을 것이다.
dselect의 하나의 기능중의 하나는 패키지 설치시 "추천"하고 "제안"하는 데비안 패키지의 기능을 충분히 이용하는 것입니다. 다 필요하지는 않지만 CD ROM을 사용하지 않고 인터넷에서 패키지를 다운로드 하고자 한다면 dselect를 이용하는 것이 가장 좋다.
dselect의 사용에 관해 자세히 알고 싶으면 http://www.debian.org/doc/ddp에
나온 dselect에 관한 문서를 살펴보면 됩니다.
dselect를 이용해서 여러분의 원하는 것을 선택한 후에:
apt-get -u dselect-upgrade
아래의 예에서 볼 수 있는 것처럼:
[root]@[/] # apt-get -u dselect-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
lbxproxy
The following NEW packages will be installed:
bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0
gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl
libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules
libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy
util-linux-locales vacation xbill xplanet-images
The following packages will be upgraded
debian-policy
1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded.
Need to get 7140kB of archives. After unpacking 16.3MB will be used.
Do you want to continue? [Y/n]
동일 시스템에서 apt-get dist-upgrade을 실행하는 것과 비교하라:
[root]@[/] # apt-get -u dist-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
Calculating Upgrade... Done
The following packages will be upgraded
debian-policy
1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 421kB of archives. After unpacking 25.6kB will be freed.
Do you want to continue? [Y/n]
위에서 나온 많은 패키지들이 설치되는데 "제안되거나" "추천된" 패키지들이기 때문이다. 다른 것들은 dselect를 이용해서 선택한 설치되거나 제거(예를 들어 lbxproxy의 경우) 패키지들이다. Dselect는 APT와 함께 사용할 때 막강한 도구가 될 수 있다.
어떠한 경우에는 패키지에서 무엇인가를 변경할 때가 있고 시간은 없고 이러한 변화들을 프로그램의 새버젼으로 옮기고 싶지 않을 때가 있다. 예를 들어, 단지 여러분의 데비안 디스티리뷰션을 3.0으로 올렸지만 어떤 패키지는 그냥 데비안 2.2를 유지하고 싶은 경우가 있다. 여러분이 설치하고자 하는 버젼을 "pin(고정)"시킬 수 있고 업그레이드 하지 않을 수 있다.
이 리소스를 이용하는 것은 단순하다. /etc/apt/preferences을 편집할 필요가 있다.
포맷은 단순하다:
Package: <package>
Pin: <pin definition>
Pin-Priority: <pin's priority>
예를 들어, sylpheed를 그대로 유지해서 버젼을 0.4.99으로
"reply-to-list"를 이용해서 변경이 가능하다. 다음을 추가한다:
Package: sylpheed
Pin: version 0.4.99*
여기서는 *를 사용했다. 이는 "wildcard"이다; 이 "pin"을 0.4.99로 시작하는 모든 버젼에 대해서 유용하게 사용하고 싶다는 의미가 된다. 이는 데비안이 패키지 버젼을 "데비안 리비젼"을 이용할 수 있기 때문이고 이러한 리비젼의 설치를 피하고 싶지 않기 때문이다. 그래서 0.4.99-1과 0.4.99-10이 가용하다면 모두 설치될 것이다. 만일 패키지를 변형하고자 한다면 이런식으로 하고 싶지는 않을 것이다.
Pin-Priority 필드는 선택이다; 정하지 않으면 기본으로 989로 정해진다.
여기서 잠깐 pin 우선순위가 어떻게 작동하는지 알아보자. 0보다 낮은 순위는 패키지가 결코 설치되지 말아야한다는 의미이다. 우선순위 0부터 100까지는 설치되지 않은 패키지를 의미하고 가용한 버젼이 아니라는 의미이다. 이는 버젼 선택 과정에 나오지 않을 것이다. 우선 순위 100은 설치된 패키지에 우선순위가 할당된 것이다 - 다른 버젼으로 대체될 설치된 패키지의 버젼에 대해서 대체하는 것은 100보다 우선 순위가 높아야한다.
100 이상의 우선순위가 의미하는 것은 패키지가 반드시 설치되어야한다는 의미이다. 전형적으로 설치된 패키지의 버젼은 새로운 버젼으로 업그레이드 된다. 100과 1000사이의 우선순위는 이 전형적인 것을 따르게 된다. 이러한 우선순위를 갖는 패키지는 낮은 버젼을 갖는 가용한 버젼으로 다운그레이드 되지 않는다. 예를 들어 sylpheed가 0.5.3이 설치되었고 pin을 0.4.99로 정하고 우선순위를 99로 하면 pin을 만족시키는 버젼인 0.4.99로 되지 않을 것이다. "다운그레이드 가능한" 패키지를 만들려면 1000이상으로 정해줘야한다.
이 다운그레이드의 개념은 막강한 어플리케이션을 갖고 있다; 여러분이 stable 버젼의 데비안을 testing으로 업그레이한다고 가정하고 그 결정을 번복하고 싶은 경우가 있다 - testing이 여러분을 충족시켜 줄 정도로 "테스트"되지 않았다. 기본 pin을 정의하여 패키지 이름에 대해서 와일드카드를 이용해서 stable로 돌아갈 수 있다. 예를 들어:
Package: *
Pin: release a=stable
Pin-Priority: 1001
이렇게 한 후에 apt-get -u dist-upgrade를 하면 시스템을 안정 버젼으로 다운그레이드가 가능하다.
pin은 패키지의 version, release나 origin에 대해 정해줄 수 있다.
version를 정하는 것은 버젼 숫자를 지원하고 동시에 몇개의 특정 버젼을 지원한다.
release 옵션은 APT 저장소나 CD에서 릴리즈 파일에 의존한다. 이 옵션은 이 파일을 제공하지 않는 패키지 저장소를 사용하는 경우에 전혀 쓸모가 없게 된다. /var/lib/apt/lists/에 있는 릴리즈 파일의 내용을 볼 수 있다. 릴리즈에 대한 파라메타는 다음과 같다: a (archive), c (components), v (version), o (origin) 와l (label).
일 예로:
Package: *
Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
Priority: 1001
이 예를 통해서 보면 데비안 2.2* 버젼을 선택했고(2.2r2, 2.2r3이 될 수 있고 -- 이는 보안 수정을 포함하는 "point release"를 포함하고 이는 매우 중요한 업데이트다), stable 저장소, main 섹션(contrib나 non-free와는 반대되는)와 origin과 label 데비안을 선택했다. Origin(o=)는 누가 그 릴리즈 파일을 만드는지 정의하고 label(l=)은 디스트리뷰션의 이름을 정의한다: 데비안 자체를 위한 데비안과 프로제니를 위한 프로제니를 예로 들 수 있다. 샘플 릴리즈 파일은 다음과 같다:
$ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release
Archive: stable
Version: 2.2r3
Component: main
Origin: Debian
Label: Debian
Architecture: i386
APT HOWTO
1.7.3 - 2001년 9월 September 2001kov@debian.orgyooseong@debian.org