책제목 : The Debian Linux User's Guide 저 자 : Dale Scheets Url : www.linuxpress.com 번역 : 황성욱 3 . dpkg 패키지 관리 툴 3.1 소개 dpkg는 데비안 패키지 시스템의 발판의 역할을 수행한다. root의 권 한으로 수행할 때, 그것은 패키지라고 불리는것들을 제거하거나 설치 할수있다. 개발자를 위하여 패키지를 만들수도 있다. 일반사용자를 위 해서 dpkg는 특별한 패키지의 정보, 어떤 특수한 패키지들의 내용, 시스템위에 설치된 패키지목록들을 알려준다. dpkg는 이와같은 패 키지의 모든 관리 업무를 수행한다. dpkg는 dselect에 의해 사용되 고 패키지의 실제 설치를 수행한다. dpkg 운용의 많은 부분에서 많은 perl 프로그램과 스크립트가 불려진다. dpkg에 대한 능숙함은 많은 일반적인 패키지의 문제를 해결할수 있게한다. 다른 설치방법이 실패 되었을 때, dpkg은 그와같은 실패를 해결하는데 유용하다. 패키지간의 상호의존관계를 다루는 것은 데비안 패키지관리 시스템의 주요한 업무중의 하나이다. dpkg의 의존성 체크기능은 Linux세계에 서 다른 제품들과 비교되었을 때 매우 우수한 기능으로 여겨진다. 이 것이 의미하는 것은 무엇인가? 그것은 당신이 dpkg를 가지고 패키지 설치를 시도한다면, 그패키지가 아직 설치가 되지않은 다른 패키지에 의존하는 기능이 있다면 dpkg는 새로운 패키지를 설치하지않고 이 현상에 대한 설명을 할것이다. 먼저 그 문제를 보여주는 것은 그 문제 의 직접적인 해결방법이다. 설치된 후에 제기능을 수행하지 못하는 패 키지를 설치하면 매우 불만스러운 것 이다. 이와같은 의존관계 동작방 식은 각각의 설치로부터 시스템을 보호한다. dpkg처럼 패키지 의존 성이 만족되지않는것에 대한 정보를 제공하는 것은 의존적 패키지를 설치하는데 무척이나 진보적인 일이다. 의존성이 만족되었다면 패키지 는 문제없이 설치될것이고 설치된후에는 기대하는데로 동작하게 될것 이다. 때때로 한 개 또는 그이상의 의존적인 패키지들은 알려지지않은 개별(local) 버전의 소프트웨어에 의해 제공되기도 한다.. 그의존이 안 정적인지에 대하여 알 수가 없어도 의존적인 패키지를 설치하기위하 여 dpkg를 강제로 실행시키는 방법도 있다. 이런 옵션은 이것의 결과를 이해한 다음 최후에 극단적인 경우에 사용되어야 한다. 이와같은 상호의존적 인 주제들은 dselect로 불리는 dpkg 인터페이스와 함께 4장에서 다 루어진다 다음의 내용들은 dpkg를 사용할때 특별하게 적용되는 모든 옵션들을 사용하는법에 초점을 맞추어서 진행될것이다. 여기에 포함된 모든 정 보는 dpkg -h로 얻게되는 정보를 포함한다. 각각의 옵션들은 최대한 자세 하게 각절에서 묘사될것이다. 3.2 dpkg 운영 dpkg는 두가지의 레벨로 작동한다. dpkg기능의 많은 정보는 간단한 사용자 계정에서도 유용하다. 그러나 패키지를 설치하거나 제거하기위 해서는 root의 권한이 필요하다. 이와같은 root의 권한은 root로의 login이 가능하지 않다면 su 또는 sudo같은 도구를 통하여 얻을수 있다. 패키지를 설치, 제거를 위한 스크립트들은 root권한으로 실행 하거나 중요한 동작들을 위해서 root의 실행을 얻을수 있는 솜씨가 필요하다. sudo는 이와같은 특권을 얻기위해서 root처럼 login하는것을 제공 한다. 컨트롤파일(/etc/sudoerc)안의 목록들은 주어진 사용자가 root 권한으로 사용할수있는 명령을 정의한다. 이와같은 방법에서 개인 또 는 그룹들은 보통 제한이 없는 시스템의 활동영역을 가질수있다. root 활동을 위해서 모든 것이 필요한가? 패키지설치 같은 간단한일 때문에 root권한을 사용하는 것은 너무 위험하지 않은가? 그럼 다음 의 관점으로 보아라. 당신의 시스템에 중요하게 생각되는 패키지를 누 구라도 막 설치하기를 당신은 바라는가? 거의 모두를 원하지 않는 root의 활성이 필요한 관리업무를 하는데 믿음이 가는 사람들인 것처 럼 또한 패키지의 설치, 제거에도 믿음이 가는 사람이 수행해야 한다. 3.3 dpkg에 인식되는 옵션들 3.3.1 설치와 제거 옵션 - i | -- install 이옵션은 개별적인 패키지를 설치하는 표준적인 방법이다. 패키지파일 은 패키지를 포함한 .deb파일명을 갖고있고 그파일이 위치한 충분한 경로를 적어 주어야 한다. 당신의 현재의 디렉토리가 /usr/debian이 고 설치할 것이 저장되어 있는 곳이 /usr/debian/stable 이면 당신은 다음의 하나를 사용할 수 있다. dpkg -i ./stable/binary-i386/admin/cron_3.0pl1-38.deb 또는 dpkg -i /usr/debian/stable/binary-i386/admin/cron_3.0pl1.deb 결과는 같다. 위 라인은 주어진 위치에서 당신의 시스템에 cron 패키 지를 설치할것이다. 이것은 한번에 한 개의 패키지를 설치할 때 유용하고 주어진 디렉토 리밑의 모든 패키지를 설치할 때는 -R 옵션을 추가로 주면 가능하다. 이 옵션은 정의된 디렉토리 밑에서 찾아지는 모든 .deb파일의 설치 를 시도한다. 그래서 당신이 위의 예에서 주어진 admin디렉토리 전 체를 설치하고자 한다면 다음의 명령과 같이 하면 된다. dpkg -i -R /usr/debian/stable/binary-i386/admin 패키지들간의 의존성 때문에 항상(때로는 아주 자주) 성공하는것은 아 니다. 당신이 설치하고자하는 모든 패키지가 그리고 그것들이 의존하 는 패키지가 비표준적인 기록매체에 담겨있다면 이런 상황은 매우 필 요한 것이다. 당신이 필요한 패키지들을 다운받기 위해서 ftp같은 방 법을 이용하여 저장매체를 구성한다면 dpkg는 그룹처럼 설치할 수 있는 저장매체를 만들것이다. 패키지가 /usr/local/Debian/archive안 에서 모두 존재한다면 다음의 명령을 사용하여라 dpkg -i -R /usr/local/Debian/archive 그곳에서 발견되는 모든 패키지파일들을 dpkg는 설치를 할것이다. dpkg는 그것들이 발견되는 순서대로 패키지를 설치할 것이다. 이것 은 처음으로 진행되는 동안 의존성이 만족되지않는 가능성을 알려주 고 끝나기도 한다. 매우 복잡한 패키지의선택위에서 이것은 어쩌면 패 키지파일들중에서 몇 개를 그냥 지나칠수도 있다. 일반적인 해법은 두 과정(unpack, configure)으로 설치를 진행하는 것이다. 첫번째인 패키지파일을 푸는 unpack과정을 지난 후에 두번 째 과정인 configure로 파일들을 조성하는 것이다. 풀린 후에 그것들 이 위치하는 곳에서 파일들이 dpkg와 패키지사이의 연관으로 설정이 결정된다. --unpack package file 때때로 설치방법에서 의존이 생길 때 두개의 분리된 방법으로 설치과 정을 진행하기를 요구한다. --unpack옵션은 그 설치의 첫번째 보조 수단이다. dpkg는 패키지들로부터 파일들을 뽑아내고 파일시스템내에 서 그들의 수정된 위치에 그것들을 둔다. conffiles와같은 구성파일의 설치를 포함해서 패키지의 구성은 다음으로 연기된다. 설치처럼 이 옵 션은 -R | --recursive를 받아들인다. 이것은 주어진 목록 구조 안 에서 패키지의 모든 것을 푸는 것을 허락한다. - install(설치)에 관한 다음의 예제처럼 많은 패키지들은 다음의 한명 령에 의해 풀린다. dpkg --unpack /usr/local/Debian/archive 모든 패키지가 풀린 후에 설치는--configure옵션을 사용함으로써 완벽하게 끝낼 수가 있다. --configure package name 이 옵션은 패키지설치의 완벽을 위하여 unpack옵션과 함께 접속사로 사용된다. 이 옵션은 패키지의 마무리를 위해 실행하는 패키지에 대한 특별한 script들을 포함할 수도 있고 혹은 그것은 dpkg가 conffiles 와 같은 설치파일을 운영할 것을 요구할 수도 있다. conffiles는 그들의 설치동안 특별취급을 요구하는 패키지들에 의해 선언된 파일입니다. 암호정보를 담고있는 passwd파일이 단지 그런 파일인 것이다. dpkg는 그 패키지가 update될 때마다 현재의 password파일이 새로운것으로 교체할 기회를 제공합니다. passwd 의 경우에는 이것은 바람직하지 않지만 mimetypes와 같은 다른 패 키지들은 받아들일 만한 것이다. 새로운 것으로 old conffile을 교체 하였다면 이전 것은 .dpkg-old라는 확장자를 갖는 파일로 저장된다. 새로운 conffile을 거절하였다면 copy file은 .dpkg-dist라는 확장 자를 가지고 제공된다. 이것은 실수에 대한 복구준비인 것이고 또한 혼합된 conffile을 구성할 수 있는 재료를 제공하는 것 이기도 하다. 암호의 예처럼 password파일 구조에 주요한 변화가 일어났다면 새로 운 파일을 받아들이게 된다. 그리고 오래된 데이터는 새로운 파일안에 편집된다. 이것은 이전 사용자정보와 결합된 새로운 변화를 가지는 혼합된 암호파일을 생성한다. 이 --configure옵션은 주어진 패키지의 완벽하게 구성된 세부사항 을 유지시키는 것을 야기시킨다. 풀기는 했지만 조성이 되지않은 모든 패키지를 조성하기 위하여서는 -a | --pending 옵션을 package name의 위치에 두어라. 이전에 단지 풀어만 놓은 패키지의 설치를 완성하기 위해서는 다음과 같은 명령을 실행한다. dpkg --pending 그러면 풀어진 어떤 패키지의 설치도 완벽하게 끝날 것이다. -r | --remove package name 이것은 패키지가 제거되기는 하나 설치된 conffiles에서 없어지는 것 은 아니다. 패키지가 제거되었으나 후에 교체할 필요가 있다면 conffile을 유지하는 것이 때때로 바람직하기도 하다. 극단적인 예가 passwd 파일이다. password패키지는 시스템작동에 손상을 입히는 것 없이 성공적으로 제거될 수 있다. 그 패키지가 제거된 후에 passwd파일이 손상되지 않은 체로 유지되고자 한다면 이 옵션은 그 런 능력을 제공하고 패키지의 제거를 허용하고 conffile을 손실없이 교체한다. 패키지 이름 쓰는 곳에 -a | --pending 옵션을 쓰면 status file안에서 제거 되겠끔 표시된 모든 패키지를 제거할 것이다. 이 status file은 status : field 의 합성인 패키지파일처럼 보인다. 다 음 장에서 다룰 dselect는 그것의 interface에 의해 선택된 것을 기 반으로 이 file을 편집하는 것이다. /var/lib/dpkg/status file을 직접 편집하는 것도 가능한데 이것은 매우 주의 기울여서 수행해야 한다. dpkg와 dselect에 의해 유지된 파일의 모든 정보를 갖고있는 이 데 이터베이스안에서 부적절한 변화가 가해진다면 비참한 결과를 부를 수도 있다. 이와같은 파일을 바꾸고자 시도할 때는 적절한 지식과 이 해가 필요하다. 패키지시스템을 관리하게끔 제공된 툴을 사용하여라. 단지 가장 극한 상황에서만 툴을 버리고 이와같은 파일을 직접적으로 수정하는 것이 다. --purge package name 제거하는 것과는 다르게 이 옵션은 패키지의 제거 뿐만이 아니라 그 패키지와 연관된 confile까지 제거한다. 이런 방법으로 패키지의 모 든 자취는 시스템으로부터 없어진다. 이옵션 또한 package name적는곳에 -a | --pending 옵션을 둘수 있다. 3.3.2 Available Packages File 관리 dpkg와 dselect는 모두 /var/lib/kpkg/available file안의 유용한 패 키지정보를 사용한다. 이 파일은 저장매체의 binary, contrib, non- free section 안에서 발견된 패키지파일들로 부터 만들어진다. 옵션처럼 사용되는 dpkg가 이 파일을 만들거나 관리하기 위하여 제 공하는 몇 개의 툴이 있다. --clear-avail 이 옵션을 주었을 때 dpkg는 available package file의 모든 정보를 지운다. 현재의 파일이 변경되거나 혹은 만약 그렇지 않으면 약간의 충격으로 깨질 경우가 있다. 이것은 다수의 원인에 의해서 발생될 수 가 있다. 가장 일반적인 원인은 그것이 깨진 패키지파일로부터 update되었을 경우이다. 극단적인 경우에서 dpkg의 오래된 버전을 가지고 작동하 다가 실패한 파일에서는 file format의 변화가 일어난다. 그 파일이 수정되기 전에 새로운 버전의 dpkg가 설치되기를 원한다. 파일을 정 돈하는 것은 upgrade가 되는 것을 허락한다. 다시 the available file 이 update될수 있다면 설치는 방해 받지 않고 진행된다. 다음 명령을 실행한다. dpkg --clear-avail 이것은 기록장소를 깨끗이 하고 기록을 시작하는 과정이다. 전통적으로 --merger-avil 명령이 뒤따르게 된다. -A | --avail package file package file이 가르키는 deb file에 포함되어 있는 패키지에 대한 정보를 avilable file에 추가한다. 다음의 명령을 봐라. dpkg -A /usr/local/Debin/archive/joe_2.8-7.deb 이것은 available file안에 이항목이 들어있지 않다면 목록에 추가할 것 이다. 패키지가 이 항목이 갖고 있다면 이 패키지의 버전에 대한 정보로 그 항목은 update될 것이다. --update-avil | --merge-avail Package file update 옵션이 사용될 때는 Package 파일에 포함된 패키지정보로 available 파일안에 포함된 패키지정보가 교체된다. 이 파일은 binary 분류의 최상단에 위치한다. 그래서 binary-i386/, confrib/, non- free/ 등에서 Package 파일을 찾을 수 있다. 다음의 명령에 대하여 논하자. dpkg --update-avail /home/ftp/stable/binary-i386/Package 이것은 /home/ftp/stable/binary-i386안에서 발견되는 Package file 의 목록에서old avilable file을 교체한다. 새로운 저장판이 사용될 때 의 사용을 위한 것이다. merge-avail옵션은 다른 binary 구조로부터 Package file을 유용한 패키지 목록에 추가한다. 새로운 정보는 available file에 새로운 패 키지가 의 정보가 더해짐으로써 구 목록과 결합된 새로운 정보를 얻 게 된다. 다음의 명령과정을 보아라 dpkg --clear-avail dpkg --merge-avail /home/ftp/stable/binary-i386/Packages dpkg --merge-avail /hme/ftp/contrib/Packages dpkg --merge-avail /home/ftp/non-free/Package 이것은 위의 3개의 분류영역을 반영하는 available file을 만든다. 3.3.3 Package System Information -s | --status package name 이 옵션은 status 데이터베이스로부터 그 패키지의 상황정보를 알려 준다. 설치후에 이것에 의한 출력으로 매우 유용한 정보를 얻을 수가 있다. 그들중에는 패키지버전, 그것의 관리자, 패키지의 간략한 설명 등이 있다. 예로써 다음의 명령을 수행하여라. dpkg -s mc 그러면 다음의 결과가 보일 것이다. Package: mc Status: install ok installed Priority: optional Section: utils Maintainer: Fernando Alegre