.deb 패키지

데비안과 우분투 등에서 쓰는 .deb 패키지를 다루는 방법에 대해 내가 썼던 기능들을 적어본다. 원래 의도된 기능과는 다르게 설명된 부분도 있겠지만 복잡하지 않은 패키지 관리 수준에서는 더 깊게 알 필요가 없었다. 그리고 aptitude는 내가 쓰지 않아서 사용법을 모른다.

apt

sources.list


apt-cache

  • search : 해당 문자열이 정보에 포함되는 패키지를 나열한다.
  • pkgnames : 저장소에 있는 패키지 이름을 나열한다. 인자가 있을 경우 그 문자열로 시작되는 패키지를 보여준다.
  • show : 해당 패키지의 전체 버전들에 대해 상세 정보를 보여준다.
  • policy : 해당 패키지의 전체 버전들에 대해 짧게 보여준다.

apt-get

  • update : 저장소 정보를 새로 가져온다.
  • upgrade : 버전이 올라간 패키지를 새로 가져온다.
  • dist-upgrade : 버전이 올라갔지만 다른 의존성에 의해 새로 패키지를 설치해야 하는 등의 경우에는 upgrade에 해당하지 않는데 이것을 포함해 패키지를 새로 가져온다.
  • install : 패키지를 설치한다. 이미 설치된 패키지의 경우 저장소 정보에 상위 버전이 있으면 그것을 설치한다.
    • sudo apt-get install kontact=4:3.4.3-0ubuntu3 와 같이 설치할 버전을 지정해주면 하위 버전으로도 설치할 수 있다. 이때는 아래의 dpkg에서 hold 표시를 해주어야 한다. 버전 정보의 확인은 apt-cache policy로 할 수 있다.
update 과정에서 Google 저장소에 BADSIG A040830F7FAC5991와 같은 오류가 뜨면 구글의 리눅스 패키지 인증키 페이지에서 공개키를 다시 받은 다음 추가하면 된다.

아래와 같이 파일을 만들면 저장소 정보를 가져올 때 Translation-ko 식으로 접근하지 않는다. (이 접속은 무시되거나 느려진다) 
$ cat /etc/apt/apt.conf.d/99no-translation
Acquire::Languages "none";

아래와 같이 파일을 만들면 설치 후에 트리거 처리를 패키지마다 하지 않고 몰아서 한다.
$ cat /etc/apt/apt.conf.d/99triggers
// Trigger deferred
DPkg::NoTriggers "true";
PackageManager::Configure "smart";
DPkg::ConfigurePending "true";
DPkg::TriggersPending "true";


add-apt-repository

언젠가부터 우분투에 추가된 명령. 데비안에도 있는지는 모르겠다. 저장소 목록 파일을 /etc/apt/sources.list.d에 추가해주며 필요할 경우 인증키도 처리해준다.

sudo add-apt-repository ppa:transmissionbt
라고 할 경우 우분투 PPA 저장소 중 transmissionbt를 현재 배포판 버전에 맞게 목록 파일로 만들고 PPA 인증키를 가져와 추가한다. 이후 apt-get update로 저장소를 갱신하고 필요한 패키지를 설치하거나 하면 된다.

dpkg

  • -i : 해당 패키지 파일을 설치한다.
  • -r : 해당 패키지를 지운다. 설정 파일은 남아 있는데, --purge를 이용해 지울 수 있다.
  • --purge : 해당 패키지의 설정 파일까지 지운다.
  • hold 표시를 하기 위해서는 다음과 같이 --set-selections 옵션을 이용한다. echo unzip hold | sudo dpkg --set-selections

dpkg-buildpackage

소스 패키지 중에 debian 디렉토리를 포함하고 있는 경우가 있는데 debian 디렉토리의 상위(=소스의 메인 경로가 보통) 경로에서 dpkg-buildpackage 명령을 실행하면 한 단계 위의 경로에 .deb 패키지를 만들어준다.


Comments