강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급: 프로그램의 패키지에 관한 모든 관리업무하는 dpkg

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 프로그램의 패키지에 관한 모든 관리업무하는 dpkg





 

 

dpkg

 

 

 

데비안 패키지 시스템의 발판의 역할을 수행한다.

 

 

 

1) 개요

 

 

dpkg는 프로그램의 패키지에 관한 모든 관리 업무를 수행한다(데비안, 우분투 등 데비안 계열의 리눅스 배포판에서 사용한다).

 

 

dpkgroot의 권한으로 실행하면 프로그램의 패키지를 제거하거나 설치할 수 있고, 프로그램의 패키지를 만들 수도 있다.

 

 

 

일반 사용자들은 dpkg를 사용하여 특정 패키지의 정보, 패키지들의 내용, 시스템에 설치된 패키지 목록들을 알 수 있다.

 

 

 

 

dpkgdselect에 의해 사용되고 패키지의 실제 설치를 수행한다.

 

 

 

dpkg 운용의 많은 부분에서 perl 프로그램과 스크립트를 사용한다.

 

 

 

dpkg에 능숙해지면 패키지에 관한 많은 문제를 해결할 수 있게 될 것이다.

 

 

 

dpkg로 패키지를 설치할 때 해당 패키지가 아직 설치되지 않은 다른 패키지에 의존하는 기능이 있다면 dpkg는 새로운 패키지를 설치하지 않고 이 현상에 대하여 설명할 것이다.

 

 

 

그리고 의존성이 만족되었다면 패키지는 문제없이 설치된다.

 

 

 

때때로 한 개 또는 그 이상의 의존적인 패키지들은 알려지지 않은 개별(local) 버전의 소프트웨어에 의해 제공되기도 한다.

 

 

 

안정성 여부에 대해서는 별론으로 하고 의존적인 패키지를 설치하기 위하여 dpkg를 강제로 실행시키는 방법도 있다.

 

 

 

이런 선택은 이것의 결과를 이해한 다음 최후에 극단적인 경우에 사용되어야 한다.

 

 

 

2) 옵션 및 설명

 

 

설치

 

 

 

 

 

 

-i | --install

 

 

 

 

 

 

 

이 옵션은 개별 패키지를 설치하는 표준적인 방법이다.

 

 

 

패키지 파일은 패키지를 포함한 .deb 파일명을 갖고 있고 그 파일이 위치한 완전한 경로를 적어주어야 한다.

 

 

 

현재의 디렉토리가 /usr/local/ubutu이고 설치할 것이 저장되어 있는 곳이 /usr/local/ubutu/ stable라면 다음 중 하나를 선택하여 사용할 수 있다.

 

 

 

결과는 동일하다.

 

 

 

 

 

 

 

 

 

dpkg i ./stable/binary-i386/admin/cron_3.0p11-38.deb

 

 

 

 

 

 

 

또는

 

 

 

 

 

 

 

dpkg i /usr/local/ubutu/stable/binary-i386/admin/cron_3.0p11-38.deb

 

 

 

 

 

 

 

그리고 주어진 디렉토리 밑의 모든 패키지를 설치할 때는 -R 옵션을 추가한다.

 

 

 

이 옵션은 정의된 디렉토리 밑에서 찾아지는 모든 .deb 파일의 설치를 시도한다.

 

 

 

그래서 위의 예에서 주어진 admin 디렉토리 이하의 패키지 전체를 설치하고자 한다면 다음의 명령과 같이 하면 된다.

 

 

 

 

 

 

 

 

 

dpkg i R /usr/local/ubutu/stable/binary-i386/admin

 

 

 

 

 

 

 

패키지들 간의 의존성 문제로 인하여 설치에 문제가 발생하는 경우도 있다.

 

 

 

한편, dpkgftp 등에 의해 필요한 패키지들을 다운받아서 저장소를 구성하여 /usr/local/ubutu/ archive 안에 패키지들이 모두 존재한다면 다음 명령을 사용하여 설치할 수 있다.

 

 

 

 

 

 

 

 

dpkg i -R /usr/local/Debian/archive

 

 

 

 

 

 

 

 

만약 이때 의존성 문제가 발생한다면, --unpack, --configure --pending 옵션을 활용하여 문제 해결이 가능하다.

 

 

 

먼저

--unpack 옵션을 이용하여 특정 파일을 언팩하거나 R 옵션을 함께 사용하여 디렉토리 내의 모든 파일들을 언팩하고, --configure를 언팩되었지만 congifure되지 않은 파일을 configure하거나 이 옵션과 --pending 옵션을 함께 적용하여 언팩되었지만 아직 configure 되지 않은 모든 패키지들을 configure 한다.

 

 

 

 

패키지 삭제

 

 

 

 

 

 

-r | --remove package_name

 

 

 

 

 

 

 

이 옵션에 의해 패키지가 제거되기는 하지만 설치된 설정 파일들이 없어지는 것은 아니다.

 

 

 

패키지가 제거되었으나 후에 교체할 필요가 있다면 설정 파일들을 유지하는 것이 때때로 바람직하기도 하다.

 

 

 

극단적인 예가 passwd 파일이다.

 

 

 

password 패키지는 시스템 작동에 손상을 입히는 것 없이 성공적으로 제거될 수 있다.

 

 

 

그 패키지가 제거된 후에 passwd 파일이 손상되지 않은 채로 유지되고자 한다면, 이 옵션은 그런 능력을 제공하고 패키지의 제거를 허용하고 설정 파일이 손실되지 않은 채로 교체한다.

 

 

 

만약 패키지명을 쓰는 곳에 이것 대신 -a 또는 --pending 옵션을 쓰면 언팩되었지만 status 파일 안에 제거되도록 표시된 모든 패키지를 제거할 것이다.

 

 

 

 

 

 

 

 

--purge package_name

 

 

 

 

 

 

 

이 옵션은 패키지뿐만 아니라 그 패키지와 연관된 설정 파일까지 모두 제거한다.

 

 

 

이 옵션 또한 패키지명을 적는 곳에 -a 또는 --pending 옵션을 둘 수 있다.

 

 

 

이 경우도 언팩되었지만 status 파일 안에 purged 로 표시된 모든 패키지를 제거할 것이다.

 

 

 

 

available file 옵션

 

 

dpkg/var/lib/dpkg/available 파일에 기술된 유용한 패키지 정보를 사용한다.

 

 

 

이 파일은 저장 매체의 binary, contrib, non-free section 안에서 발견된 패키지 파일들로부터 만들어진다.

 

 

 

dpkg가 이 파일을 만들거나 관리하기 위하여 제공하는 몇 개의 옵션들이 있다.

 

 

 

 

 

 

 

 

--clear-avail

 

 

 

 

 

 

 

이 옵션을 주었을 때 dpkgavailable package file의 모든 정보를 지운다.

 

 

 

현재의 파일이 변경되거나 혹은 만약 그렇지 않으면 약간의 충격으로 깨질 경우가 있다.

 

 

 

이것은 다수의 원인에 의해서 발생될 수가 있다.

 

 

 

 

 

가장 일반적인 원인은 그것이 깨진 패키지 파일로부터 update되었을 경우이다.

 

 

 

극단적인 경우에서 dpkg의 오래된 버전을 가지고 작동하다가 실패한 파일에서는 파일 포맷의 변화가 일어난다.

 

 

 

그 파일이 수정되기 전에 새로운 버전의 dpkg가 설치되기를 원하는 경우에, 파일을 정돈하는 것은 업그레이드가 가능하도록 한다.

 

 

 

다시 available 파일이 업데이트될 수 있다면 설치는 방해받지 않고 진행된다.

 

 

 

 

다음 명령을 실행한다.

 

 

 

이것은 기록 장소를 깨끗이 하고 기록을 시작하는 과정이다.

 

 

 

 

 

 

 

 

 

dpkg --update-avail

 

 

 

 

 

 

 

 

 

-A | --avail package_file

 

 

 

 

 

 

 

 

패키지 파일, .deb 파일에 포함되어 있는 패키지에 대한 정보를 avilable 파일에 추가한다.

 

 

 

다음의 명령을 살펴보자.

 

 

 

 

 

 

 

dpkg A /usr/local/Debian/archive/joe_2.8.7.deb

 

 

 

 

 

 

 

이것은 available 파일 안에 이 항목이 들어있지 않다면 목록에 추가할 것이다.

 

 

 

이미 이 항목이 갖고 있다면 이 패키지의 버전에 대한 정보로 그 항목이 update될 것이다.

 

 

 

 

 

 

 

 

 

--update-avail | --merge-avail package_file

 

 

 

 

 

 

 

update 옵션이 사용될 때는 Package 파일에 포함된 패키지 정보로 available 파일 안에 포함된 패키지 정보가 교체된다.

 

 

 

이 파일은 binary 분류의 최상단에 위치한다.

 

 

 

그래서 binary-i386/, confrib/, non-free/ 등에서 Package 파일을 찾을 수 있다.

 

 

 

다음의 명령에 대하여 살펴보자.

 

 

 

 

 

 

 

dpkg --update-avail /home/ftp/stable/binary-i386/Packages

 

 

 

 

 

 

 

 

이것은 /home/ftp/stable/binary-i386 안에서 발견되는 Package 파일의 목록에서 오래된 available 파일을 교체한다.

 

 

 

 

--merge-avail 옵션은 다른 binary 구조로부터 Package file을 유용한 패키지 목록에 추가한다.

 

 

 

available 파일에 새로운 패키지의 정보가 더해져서 구 목록과 결합된 새로운 정보를 얻게 된다.

 

 

 

 

다음의 명령 과정을 살펴보자.

 

 

 

 

 

 

 

dpkg --clear-avail

dpkg --update-avail /home/ftp/stable/binary-i386/Packages

dpkg --update-avail /home/ftp/contrib/Package

dpkg --update-avail /home/ftp/non-free/Package

 

 

 

 

 

 

 

 

이것은 위의 3개의 분류 영역을 반영하는 available 파일을 만든다.

 

 

 

 

 

패키지 시스템 정보

 

 

 

 

 

 

 

-s | --status package_name

 

 

 

 

 

 

 

이 옵션은 status 데이터베이스로부터 그 패키지의 상황 정보를 알려준다.

 

 

 

설치 후에 이것에 의한 출력으로 매우 유용한 정보를 얻을 수가 있다.

 

 

 

그들 중에는 패키지버전, 패키지의 관리자, 패키지의 간략한 설명 등이 있다.

 

 

 

다음과 같이 명령을 수행한다.

 

 

 

 

 

 

 

 

 

dpkg s ftp

 

 

 

 

 

 

 

 

 

--print-avail package_name

 

 

 

 

 

 

 

status 옵션처럼 사용되는데 훨씬 많은 정보를 제공한다.

 

 

 

status 정보가 제공하지 않는 설치 크기 및 구조, 패키지 크기 정보들이 이 목록 안에서 제공된다.

 

 

 

다음과 같이 명령을 수행한다.

 

 

 

 

 

 

 

 

 

dpkg --print-avail ftp

 

 

 

 

 

 

 

 

 

-L | --listfiles package_name

 

 

 

 

 

 

 

 

이 옵션을 적용함으로써 dpkg가 설치한 패키지의 모든 파일을 볼 수 있다.

 

 

 

물론 dpkg에 알려지지 않은 설치 스크립트에 의해서 만들어진 파일들은 포함하지 않는다.

 

 

 

다음과 같이 명령을 수행하면, ftp 패키지의 파일들이 어떤 경로로 설치되었는지 알 수 있다.

 

 

 

 

 

 

 

 

 

dpkg L ftp

 

 

 

 

 

 

 

 

 

-l | --list [package_name_pattern]

 

 

 

 

 

 

 

 

이 옵션으로 package_name_pattern과 일치하는 패키지들을 설치 상태, 현재 버전 및 짧은 설명을 알 수 있다.

 

 

 

package_name_pattern을 주지 않는다면 시스템상에 설치된 모든 패키지의 목록을 제공한다.

 

 

 

다음의 명령으로 ftp 패키지의 예를 볼 수 있다.

 

 

 

 

 

 

 

 

 

dpkg l ftp

 

 

 

 

 

 

 

 

 

-S | --search search_file_pattern

 

 

 

 

 

 

 

 

search_file_pattern으로 기술된 파일을 포함하고 있는 패키지를 이 옵션을 통하여 알 수 있다.

 

 

 

패키지와 파일 위치 모두 보인다.

 

 

 

조금 더 유익한 정보를 위해 그동안의 예와는 다르게 다음의 명령을 사용해 보자.

 

 

 

 

 

 

 

dpkg S whereis

 

 

 

 

 

 

 

 

 

-C | --audit

 

 

 

 

 

 

 

 

완전히 혹은 정확하게 조성되지 않은 모든 패키지들은 이 옵션에 의해 알아볼 수 있다.

 

 

 

자주 사용되는 올바른 해결법은 완전한 설치를 위해서 dpkg --configure package를 작동하는 것이다.

 

 

 

다음 명령을 실행해 보자.

 

 

 

 

 

 

 

dpkg -C

 

 

 

 

 

 

 

강제 옵션

 

 

force options(이하 강제 옵션)dkpg의 초기 행동을 무시하기 위해 사용된다.

 

 

 

이 옵션에 따른 명령에 의해서 매우 위험한 양상이 일어날 수 있다는 점을 고려하여야 한다.

 

 

 

이 명령들 각각은 dpkg가 보통의 행동과는 다른 행동을 수행하도록 하여, 매우 잘 구성된 시스템에 손해를 줄 가능성이 있다.

 

 

 

강제 옵션은 옵션 뒤에 실행하고자 하는 과정을 적어주어야 한다.

 

 

 

강제 옵션은 두 가지의 기능으로 작동을 한다.

 

 

 

 

 

 

 

 

 

--force- : 주의를 주어 오류를 줄인다.

 

 

 

 

--refuse- : 오류가 생기면 실행을 멈춘다.

 

 

 

 

--no-force-thing == --refuse-thing

 

 

 

 

 

 

 

위 옵션들(--force- , --refuse-, --no-force-)은 접두사로 다음의 항목에 선행될 수 있다.

 

 

 

 

 

 

 

 

 

--downgrade

 

 

 

 

 

 

 

 

현재 설치된 패키지가 설치되고자 하는 것보다 최신 버전이어도 선택된 패키지를 설치한다.

 

 

 

초기값으로 이 옵션은 가능하다.

 

 

 

 

 

 

 

 

--configure-any

 

 

 

 

 

 

 

 

이는 하나뿐만 아니라 다른 패키지까지 configure한다.

 

 

 

이 패키지가 의존하는 패키지가 현재는 단지 풀리기만 하고 configure 되지 않았다면 그것까지 configure 한다.

 

 

 

 

 

 

 

 

 

--remove-reinstreq

 

 

 

 

 

 

 

 

재설치를 위해 패키지가 표시되었다면 이 강제 옵션은 그것의 제거를 허용할 것이다.

 

 

 

몇몇 상황 아래서 dpkg의 지식이 없다면 나중에 파일 안에 남겨지는 결과가 되는 것으로 이해되었다.

 

 

 

 

 

 

 

 

 

--remove-essential

 

 

 

 

 

 

 

 

필수적인 패키지의 제거는 위탁되는 것이 아니다.

 

 

 

왜냐하면 이런 패키지는 적절한 시스템의 동작을 위해서 필요하고 그들이 제거된다면 시스템이 깨지기 때문이다.

 

 

 

패키지 이름 변경, 개인적 소프트웨어의 구축으로 인한 기능의 변화 등의 몇몇 드문 경우에, 이 옵션은 그런 패키지를 제거하기 위해 필요할 수 있다.

 

 

 

이 강제 옵션은 제거 과정을 허용할 것이다.

 

 

 

 

 

miscellaneous options(기타 옵션들)

 

 

 

--print-architecture : 의도대로 구성되는 패키지의 메커니즘의 구조도를 보여준다.

 

 

 

 

--version : dpkg의 버전을 보여준다.

 

 

 

 

--help : 현재 dpkg가 제공하는 옵션의 간단한 설명과 기능, 목록을 보여준다.

 

 

 

 

3) dpkg 운영

 

 

dpkg는 두 가지의 레벨로 작동한다.

 

 

 

dpkg 기능의 많은 정보는 간단한 사용자 계정에서도 유용하다.

 

 

 

그러나 패키지를 설치하거나 제거하기 위해서는 root의 권한이 필요하다.

 

 

 

이와 같은 root의 권한은 root로의 로그인이 가능하지 않다면 su 또는 sudo같은 도구를 통하여 얻을 수 있다.

 

 

 

패키지의 설치 및 제거를 위한 스크립트들은 root 권한으로 실행해야 하고, 중요한 작동을 위해 root의 권한이 필요할 수 있다.

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  74 명