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

차례

8.1. 데비안은 패키지를 다루는 무슨 프로그램을 제공하나요?
8.1.1. dpkg
8.1.2. APT
8.1.3. aptitude
8.1.4. synaptic
8.1.5. tasksel
8.1.6. 다른 패키지 관리 도구
8.2. 데비안은 실행 중인 프로그램을 업데이트할 수 있다고 주장합니다. 이것이 어떻게 이루어지나요?
8.3. 데비안 시스템에 이미 설치된 패키지가 무엇인지 어떻게 아나요?
8.4. 설치된 패키지의 파일 목록을 표시하려면 어떻게 하나요?
8.5. 특정 파일이 무슨 패키지에 의해 생성되었는지 확인하려면 어떻게 하나요?
8.6. 나는 "foo"를 설치 제거했는데 왜 "foo-data"는 안 없어지나요? 안 쓰는 오래된 라이브러리 패키지를 purge 하려면 어떻게 하나요?

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

aptitudeapt-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 tmpfoo_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으로도 알려져 있습니다