8장. 데비안 패키지 관리 도구

# 8장. 데비안 패키지 관리 도구

## 8.1. 데비안은 패키지를 다루는 무슨 프로그램을 제공하나요?

그래픽 또는 텍스트 기반 인터페이스부터 패키지 설치에 사용되는 저수준 도구에 이르기까지 데비안 패키지를 관리하는데 사용되는 여러 도구가 있습니다. 사용 가능한 모든 도구는 더 낮은 수준 도구에 의존하여 올바르게 동작하며, 여기에 복잡도를 낮추어 표시합니다.

aptitude 또는 synaptic 같은 높은 수준 패키지 관리 도구는 그 자체가 시스템에서 패키지를 관리하려면 dpkg에 의존한다는 것을 이해하는 것이 중요합니다.

데비안 패키지 관리 유틸리티에 대한 자세한 내용을 보려면 데비안 참조의 제2장. 데비안 패키지 관리를 참조하십시오. 이 문서는 다양한 언어와 형식으로 제공됩니다. DDP 사용자 매뉴얼 안의 데비안 참조를 보십시오.

### 8.1.1. dpkg

이것은 주요 패키지 관리 프로그램입니다. dpkg를 여러 옵션으로 호출할 수 있습니다. 공통 용도:

- 모든 옵션 찾기: `dpkg --help`.

- 지정된 패키지에 대한 제어 파일(및 기타 정보)을 출력: `dpkg --info foo_VVV-RRR.deb`.

- 하드 디스크 파일 시스템에 패키지(패키지 풀기 및 구성 포함)를 설치: `dpkg --install foo_VVV-RRR.deb`.

- 하드 디스크의 파일 시스템에 데비안 아카이브의 압축을 풉니다(configure 안 함): `dpkg --unpack foo_VVV-RRR.deb`. 이 명령이 반드시 패키지를 사용 가능한 상태로 남겨두는 것은 아닙니다: 일부 파일은 제대로 실행하려면 추가 사용자 지정이 필요할 수 있습니다. 이 명령은 프로그램의 이미 설치된 모든 버전을 제거하고 패키지와 관련된 preinst( 7.6절. “데비안 preinst, postinst, prerm, 그리고 postrm script 는 무엇인가요?” 참조) 스크립트를 실행합니다.

- 이미 푼 패키지를 구성: `dpkg --configure foo`. 무엇보다 이 액션은 패키지 관련된 postinst (7.6절. “데비안 preinst, postinst, prerm, 그리고 postrm script 는 무엇인가요?” 참조)를 실행합니다. 이 패키지를 위해 `conffiles` 에 나열된 파일을 업데이트합니다. 주의하십시오. 'configure' 연산은 그 패키지 이름 (예시, foo)을 받습니다, 데비안 아카이브 파일 이름(예시, foo_VVV-RRR.deb) 아님.

- 데비안 아카이브에서 단일 파일 "blurf"(또는 "blurf*" 파일 그룹)을 추출: `dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - 'blurf*'`.

- 패키지 제거 (설정 파일은 아님): `dpkg --remove foo`.

- 패키지 제거 (설정 파일 포함): `dpkg --purge foo`.

- 문자열(또는 정규식) "foo*"가 들어간 패키지의 설치 상태를 나열: `dpkg --list 'foo*'`.

### 8.1.2. APT

APT는 Advanced Package Tool, apt-get 프로그램을 제공하는 데비안 패키지 시스템에 대한 개선된 인터페이스입니다. 패키지 검색 및 관리, 패키지에 대한 정보 쿼리, libapt-pkg 라이브러리의 모든 기능에 대한 저수준 액세스를 위한 명령줄 도구를 제공합니다. 자세한 내용은 `/usr/share/doc/apt-doc/guide.html/index.html` 에 있는 사용자 가이드를 보십시오.(`apt-doc` 패키지를 설치해야 될 겁니다)

데비안 Jessie를 시작으로 자주 사용되는 일부 apt-get 및 apt-cache 명령은 새로운 apt 바이너리를 통해 동등한 명령을 제공합니다. 즉, apt-get update, apt-get install, apt-get remove, apt-cache search, 또는 apt-cache show 같은 일부 인기 있는 명령도 apt, 즉 apt update, apt install, apt remove, apt search, 또는 apt show를 통해 간단히 호출할 수 있습니다. 다음은 이전 명령과 새 명령에 대한 개요입니다:

     apt-get update             ->  apt update
     apt-get upgrade            ->  apt upgrade
     apt-get dist-upgrade       ->  apt full-upgrade
     apt-get install package    ->  apt install package
     apt-get remove package     ->  apt remove package
     apt-get autoremove         ->  apt autoremove
     apt-cache search string    ->  apt search string
     apt-cache policy package   ->  apt list -a package
     apt-cache show package     ->  apt show package
     apt-cache showpkg package  ->  apt show -a package

apt 도구는 apt-get 및 apt-cache의 기능을 병합하며 기본적으로 더 화려한 색상의 출력 형식을 가지고 있어 더 쾌적합니다. 스크립트 또는 고급 사용 사례에서는 apt-get이 여전히 바람직하거나 필요합니다.

apt-get은 여러 소스에서 명령줄을 사용하여 패키지를 검색하고 설치하는 단순한 방법을 제공합니다. dpkg와는 달리, apt-get은 .deb 파일을 모르며, 패키지 이름과 함께 동작하며 `/etc/apt/sources.list` 에서 온 .deb 아카이브만 설치 가능합니다. apt-get은 .deb 아카이브[5]를 configure 된 소스에서 다운로드 후 dpkg를 부릅니다.

apt-get 사용하는 일반적 방법 몇 가지:

- 시스템에 알려진 패키지 목록을 업데이트하려면, 실행하기:

      apt update

  (패키지 목록을 업데이트하려면 이 작업을 정기적으로 실행해야 함)

- `foo` 패키지와 그 종속을 설치하려면, 실행하기:

      apt install foo

- 시스템에서 온 foo 패키지를 제거하려면, 실행하기:

      apt remove foo

- 패키지 foo와 시스템에서 온 그 설정 파일을 제거하려면, 실행하기:

      apt purge foo

- 새 버전이 가능한 패키지 나열하고 실행하기:

      apt list --upgradable

- 시스템에 있는 모든 패키지 업그레이드(추가 패키지 설치 또는 패키지 제거 없이)하려면, 실행하기:

      apt upgrade

- 시스템에 있는 모든 패키지 업그레이드, 패키지 업데이트 필요하면, 추가 패키지 설치 또는 패키지 제거 하려면 실행하기:

      apt full-upgrade

  (`upgrade` 명령은 업그레이드 시 새로운 의존성을 충족하기 위해 추가 패키지 설치가 필요한 경우, 해당 패키지를 업그레이드하지 않고 이미 설치된 구버전 상태로 유지합니다. 반면 `full-upgrade` 명령어는 이보다 덜 보수적으로 동작하여 필요한 패키지를 적극적으로 설치합니다.)

패키지를 변경하는 명령을 실행하려면 반드시 root 로 로그인하십시오.

apt-get은 이제 추천 패키지도 기본적으로 설치하며, 프로그램의 견고함 덕분에 콘솔 환경에서 시스템 설치 및 주요 시스템 업그레이드를 수행할 때 가장 선호되는 패키지 관리 프로그램입니다.

apt 도구 모음에는 패키지 목록을 조회하기 위한 apt-cache 도구도 들어 있습니다. 이 도구를 이용하면 단순 텍스트나 정규 표현식 질의를 통해 특정 기능을 제공하는 패키지를 찾을 수 있으며, 패키지 관리 시스템의 의존성 관계를 조회할 수도 있습니다. apt-cache를 사용하는 몇 가지 일반적인 방법:

- 설명에 `단어`가 포함된 패키지를 찾기:

      apt search 단어

- 패키지의 자세한 정보 출력:

      apt show 패키지

- 주어진 패키지가 의존하는 패키지 출력:

      apt-cache depends 패키지

- 패키지의 가용한 버전 정보와 해당 패키지에 역의존성(reverse-depends)이 있는 패키지들에 대한 상세 정보를 출력:

      apt-cache showpkg 패키지

더 자세한 정보는 `apt` 패키지를 설치하고 apt(8), apt-get(8), sources.list(5) 매뉴얼 페이지를 읽어보십시오. 또한 `apt-doc` 패키지를 설치한 후 `/usr/share/doc/apt-doc/guide.html/index.html` 파일을 읽으십시오.

### 8.1.3. aptitude

aptitude는 apt 패키지 관리 인프라의 프런트엔드를 제공하는 데비안 시스템용 패키지 관리자입니다. aptitude는 curses 라이브러리를 사용하는 텍스트 기반 인터페이스입니다. 작업은 시각적 인터페이스나 명령줄(커맨드 라인)에서 수행할 수 있습니다.

aptitude를 사용하면 관리 작업을 빠르고 쉽게 수행할 수 있습니다. 사용자는 패키지 목록을 보고 패키지 설치, 업그레이드, 제거 같은 패키지 관리 작업을 수행할 수 있습니다.

aptitude는 apt-get의 기능 뿐 아니라, 다음과 같은 많은 추가 기능들을 제공합니다:

- aptitude 는 패키지의 모든 버전에 쉬운 접근을 제공합니다.

- aptitude는 더 이상 사용되지 않는 소프트웨어를 "Obsolete and Locally Created Packages" 항목 아래에 나열하여 이를 쉽게 추적할 수 있게 해줍니다.

- aptitude는 특정 패키지를 검색하고 패키지 표시 범위를 제한할 수 있는 상당히 강력한 시스템을 포함하고 있습니다. mutt의 표현식 구문에서 영감을 얻었기 때문에, mutt에 익숙한 사용자라면 이 시스템을 빠르게 익힐 수 있습니다.

- aptitude를 사용하여 미리 정의된 task를 설치할 수 있습니다. 자세한 내용은 8.1.5절. “tasksel” 참조.

- aptitude 전체 화면 모드는 su 기능이 내장되어 있어 일반 사용자 계정으로도 실행할 수 있습니다. 관리자 권한이 실제로 필요한 작업이 발생하면 su를 호출하며 (root 암호가 설정되어 있다면) root 암호를 물어봅니다.

aptitude는 시각적 인터페이스(단순히 `aptitude` 실행)를 통해 사용하거나 명령줄에서 직접 사용할 수 있습니다. 사용되는 명령줄 구문은 apt-get에서 사용하는 것과 매우 비슷합니다. 예를 들어, `foo` 패키지를 설치하려면 `aptitude install `foo``를 실행할 수 있습니다.

aptitude는 콘솔에서 일상적인 패키지 관리를 수행할 때 권장되는 프로그램입니다.

더 자세한 정보는 매뉴얼 페이지 aptitude(8)을 읽고 `aptitude-doc` 패키지를 설치하십시오.

### 8.1.4. synaptic

synaptic은 그래픽 패키지 관리자입니다. 사용자에게 친숙한 방식으로 소프트웨어 패키지를 설치, 업그레이드 및 제거할 수 있습니다. 적성에 의해 제공되는 대부분의 기능과 함께 사용된 리포지터리 목록을 편집할 수 있는 기능도 있으며 패키지와 관련된 사용 가능한 모든 문서를 탐색할 수 있습니다. 자세한 내용은 Synaptic 웹사이트를 참조하십시오.

### 8.1.5. tasksel

특정 작업을 수행하려고 할 때 요구 사항을 충족하는 적절한 패키지 제품군을 찾는 것이 어려울 수 있습니다. 데비안 개발자는 `task`를 정의했는데, task는 특정 활동과 관련된 여러 개별 데비안 패키지의 모음입니다. task는 tasksel 프로그램 또는 aptitude 를 통해 설치할 수 있습니다.

일반적으로 데비안 설치 프로그램은 표준 시스템 및 데스크톱 환경과 관련된 작업을 자동으로 설치합니다. 설치된 특정 데스크톱 환경은 사용되는 CD/DVD 미디어에 따라 달라지며, 가장 일반적으로 GNOME 데스크톱(`gnome-desktop` 태스크)입니다. 또한 설치 프로세스 전체에서 선택한 항목에 따라 시스템에 작업이 자동으로 설치될 수 있습니다. 예를 들어, 영어 이외의 언어를 선택한 경우 연결된 태스크도 자동으로 설치됩니다.

### 8.1.6. 다른 패키지 관리 도구

#### 8.1.6.1. dpkg-deb

이 프로그램은 데비안 아카이브(`.deb`) 파일을 다룹니다. 몇 가지 일반적인 용도:

- 모든 옵션 찾기: `dpkg-deb --help`.

- 데비안 아카이브 파일에 어떤 파일이 들어있는지 확인: `dpkg-deb --contents foo_VVV-RRR.deb`

- 지정된 데비안 아카이브에 들어있는 파일들을 사용자가 지정한 디렉터리에 추출합니다: `dpkg-deb --extract foo_VVV-RRR.deb tmp`는 `foo_VVV-RRR.deb`에 들어있는 각 파일들을 `tmp/` 디렉터리에 추출합니다. 이는 패키지를 루트 파일 시스템에 설치하지 않고, 국소적인 디렉터리 내에서 패키지의 내용을 조사할 때 편리합니다.

- 패키지에서 제어 정보 파일들을 추출: `dpkg-deb --control foo_VVV-RRR.deb tmp`.

`dpkg-deb --extract`를 써서 단순히 풀기만 한 패키지들은 올바르게 설치되지 않는다는 점에 유의하십시오. 대신 `dpkg --install`을 사용하십시오.

더 자세한 정보는 매뉴얼 페이지 dpkg-deb(1)에 있습니다.

## 8.2. 데비안은 실행 중인 프로그램을 업데이트할 수 있다고 주장합니다. 이것이 어떻게 이루어지나요?

Debian GNU/Linux 시스템의 커널(파일 시스템)은 파일이 사용 중인 동안에도 파일을 바꾸는 기능을 지원합니다.

우리는 또한 부팅 시 데몬을 시작하거나, 런레벨이 변경될 때(예: 다중 사용자 모드에서 단일 사용자 모드로 전환되거나 시스템이 정지될 때) 데몬을 중지하는 데 쓰이는 start-stop-daemon 프로그램을 제공합니다. 데몬을 포함한 새 패키지가 설치될 때 설치 스크립트에서도 이와 같은 프로그램을 사용하여, 실행 중인 데몬을 중지하고 필요에 따라 다시 시작합니다.

## 8.3. 데비안 시스템에 이미 설치된 패키지가 무엇인지 어떻게 아나요?

데비안 시스템에 설치된 모든 패키지의 상태를 확인하려면, 실행할 명령어

    dpkg --list

이 명령은 각 패키지에 대해 한 줄 요약을 출력하며, 여기에는 (헤더에 설명된) 두 글자 상태 기호, 패키지 이름, 설치된 버전, 그리고 짧은 설명이 포함됩니다.

이름이 "foo"로 시작하는 패턴과 일치하는 패키지들의 상태를 확인하려면, 실행할 명령어:

    dpkg --list 'foo*'

특정 패키지에 대한 더 상세한 보고서를 확인하려면, 실행할 명령어:

    dpkg --status packagename

## 8.4. 설치된 패키지의 파일 목록을 표시하려면 어떻게 하나요?

설치된 패키지 `foo`에서 제공하는 모든 파일의 목록을 나열하려면 실행할 명령어.

    dpkg --listfiles foo

설치 스크립트에 의해 생성된 파일들은 표시되지 않는다는 점 유의하십시오.

## 8.5. 특정 파일이 무슨 패키지에 의해 생성되었는지 확인하려면 어떻게 하나요?

이름이 `foo`인 파일을 생성한 패키지를 식별하려면, 다음 중 하나를 실행:

- `dpkg --search foo`

  이것은 설치된 패키지 중에서 `foo`를 검색합니다. (이 방식은 (현재) `/var/lib/dpkg/info/` 디렉터리에 있는 확장자가 `.list`인 모든 파일을 검색하여, 해당 파일을 포함하고 있는 모든 패키지의 이름과 diversion을 출력하도록 결과를 조정하는 것과 같습니다.)

  이에 대한 더 빠른 대안은 dlocate 도구.

      dlocate -S foo

- `zgrep foo Contents-ARCH.gz`

  이것은 전체 경로 이름에 `foo` 부분문자열이 포함된 파일들을 검색합니다. `Contents-ARCH.gz` 파일(여기서 ARCH는 원하는 아키텍처를 나타냄)은 데비안 아카이브 사이트의 주요 패키지 디렉터리(main, non-free, contrib) 내(`/debian/dists/trixie` 아래)에 있습니다. `Contents` 파일은 해당 파일이 위치한 하위 디렉터리 트리에 속한 패키지들만 참조합니다. 따라서 사용자는 파일 `foo`가 포함된 패키지를 찾기 위해 하나 이상의 `Contents` 파일을 검색해야 할 수도 있습니다.

  이 방법은 현재 시스템에 설치되어 있지 않은 패키지에 포함된 파일들도 찾아낼 수 있다는 점에서 `dpkg --search`보다 유리합니다.

- `apt-file search `foo``

  만약 `apt-file` 패키지를 설치하면, 위에서 언급한 것과 비슷하게 전체 경로 이름에 부분 문자열이나 정규 표현식 `foo`가 포함된 파일들을 검색합니다. 위 사례와 비교했을 때의 장점은 `Contents-ARCH.gz` 파일들을 직접 가져올 필요가 없다는 것입니다. (root 권한으로) `apt-file update`를 실행하면 `/etc/apt/sources.list`에 정의된 모든 소스에 대해 이 작업을 자동으로 수행하기 때문입니다.

## 8.6. 나는 "foo"를 설치 제거했는데 왜 "foo-data"는 안 없어지나요? 안 쓰는 오래된 라이브러리 패키지를 purge 하려면 어떻게 하나요?

일부 패키지는 프로그램("foo")과 데이터("foo-data") (또는 "foo" 및 "foo-doc")로 나뉩니다. 이는 데비안의 많은 게임, 멀티미디어 애플리케이션, 사전 프로그램에 적용되는 방식입니다. 이렇게 분리한 이유는 일부 사용자가 프로그램을 설치하지 않고도 원본 데이터에만 접근하고 싶어 할 수 있고, 데이터 없이 프로그램만 실행할 수도 있어 "foo-data"를 선택 사항으로 만들기 위해서입니다.

라이브러리를 다룰 때도 비슷한 상황이 생깁니다: 일반적으로 응용 프로그램이 포함된 패키지가 라이브러리에 의존하기 때문에 라이브러리가 함께 설치됩니다. 응용 프로그램 패키지를 purge 하더라도 해당 라이브러리 패키지는 시스템에 그대로 남을 수 있습니다. 또 다른 사례로, 응용 프로그램 패키지가 업그레이드 되면서 더 이상 libdb4.2에 의존하지 않고 libdb4.3에 의존하는 경우.

이 경우 "foo-data"는 "foo"에 의존하지 않으므로, "foo" 패키지를 제거해도 대부분의 패키지 관리 도구에서 "foo-data"가 자동으로 제거되지 않습니다. 이는 라이브러리 패키지의 경우도 마찬가지입니다. 이렇게 처리하는 이유는 순환 의존성(circular dependencies) 문제를 방지하기 위해서입니다. 그러나, 패키지 관리 도구로 apt-get( 8.1.2절. “APT” 참조) 또는 aptitude (8.1.3절. “aptitude” 참조)를 사용한다면, 이 도구들이 자동으로 설치된 패키지들을 추적하여 시스템에 이를 사용하는 패키지가 더 이상 남아 있지 않을 때 제거할 수 있는 기능을 제공할 것입니다.

[5] 레드햇 패키지 매니저 같은 다른 패키지 관리 시스템에서 이 도구를 사용할 수 있도록 하는 포트도 있으며, 이는 rpm으로도 알려져 있습니다

7장. 데비안 패키지 관리 시스템 기초 |  | 9장. 데비안 시스템 최신으로 유지하기