R&D/OS

deb 패키지 만들기

sunshout 2009. 11. 2. 23:56
우분투 패키지 구조
~ 우분투 패키지는 xxx.deb 파일로 표기하며, 3개의 파일의 archieve 이다.
~ 패키지 파일은 다음과 같으며, ar -x xxx.deb 을 하여 풀 수 있다.
~ 압축 파일은 tar 를 이용하여 풀면 된다.

xxx.deb 파일 구조 (Language : text)
rw-r--r-- 0/0      4 Mar 28 13:46 2002 debian-binary
rw-r--r-- 0/0   1386 Mar 28 13:46 2002 control.tar.gz
rw-r--r-- 0/0  39772 Mar 28 13:46 2002 data.tar.gz
 

파일 설명

debian-binary
 ~ 이 파일은 text 파일로 deb 파일 형식을 의미한다.
debian-binary (Language : text)
2.0\n

control.tar.gz
~ control.tar.gz 파일을 풀면 다음과 같은 설정 파일들이 나온다.
  • control - deb 패키지에서 가장 중요한 메타 파일
  • postinst - 설치 시 실행할 script
  • prerm - 삭제 시 실행할 script
  • md5sums - 사용자 컴퓨터에 설치될 파일들에 대한 MD5 checks

    control.tar.gz (Language : text)
    -rw-r--r--    1 root     root         1336 Mar 28  2002 control
    -rw-r--r--    1 root     root          388 Mar 28  2002 md5sums
    -rwxr-xr-x    1 root     root          253 Mar 28  2002 postinst
    -rwxr-xr-x    1 root     root          194 Mar 28  2002 prerm
     

    data.tar.gz
    ~ 이는 특정 경로에 설치할 파일 리스트 모두를 보여 준다.

    data.tar.gz (Language : text)
    drwxr-xr-x root/root         0 2002-03-28 13:44:57 ./
    drwxr-xr-x root/root         0 2002-03-28 13:44:49 ./sbin/
    -rwxr-xr-x root/root     31656 2002-03-28 13:44:49 ./sbin/parted
    drwxr-xr-x root/root         0 2002-03-28 13:44:38 ./usr/
    drwxr-xr-x root/root         0 2002-03-28 13:44:41 ./usr/share/
    drwxr-xr-x root/root         0 2002-03-28 13:44:38 ./usr/share/man/
    drwxr-xr-x root/root         0 2002-03-28 13:44:52 ./usr/share/man/man8/
    -rw-r--r-- root/root      1608 2002-03-28 13:44:37 ./usr/share/man/man8/parted.8.gz
    drwxr-xr-x root/root         0 2002-03-28 13:44:41 ./usr/share/doc/
    drwxr-xr-x root/root         0 2002-03-28 13:44:52 ./usr/share/doc/parted/
    -rw-r--r-- root/root      1880 2002-03-07 14:20:08 ./usr/share/doc/parted/README.Debian
    -rw-r--r-- root/root      1347 2002-02-27 01:40:50 ./usr/share/doc/parted/copyright
    -rw-r--r-- root/root      6444 2002-03-28 13:37:33 ./usr/share/doc/parted/changelog.Debian.gz
    -rw-r--r-- root/root     15523 2002-03-28 02:36:43 ./usr/share/doc/parted/changelog.gz
     
     

    예제
    ~ 본 예제에서는 qemu-system-x86_64 파일을 /usr/local/bin/ 디렉토리에 설치하는 패키지를 만든다.

    1) data.tar.gz 용 폴더 만들기

    data.tar.gz 만들기 (Language : text)
    $ mkdir -p ./debian/usr/local/bin
    $ cp qemu-system-x86_64 ./debian/usr/local/bin
     

    2) control.tar.gz 용 폴더 만들기
    - 버전 번호는 데시와 함께 부가적인 패키지 번호를 가져야 한다. 예 1.1-1
    - 프로그램을 이식성이 가능한 쉘 스크립트로 설치하면 Architecture 는 all 로 선택한다.
    - 의존 패키지가 존재하면 Depends 를 설정한다. (이는 dpkg -S <파일> 을 해보면 알 수 있다)
    - 필드 정보
      - Package (mandatory)
      - Source
      - Version (mandatory)
      - Section (recommanded)
      - Priority (recommanded)
      - Architecture (mandatory)
      - Esstial
      - Depends et al
      - Installed-Size
      - Maintainer (mandatory)
      - Description (mandatory)
      - Homepage


    control (Language : text)
    Package: ktns-qemu
    Version: 1.0-1
    Section: devel
    Architecture: amd64
    Maintainer: sunshout
    Description: qemu-system-x86_64 for KTNS

    cotrol 파일을 debian/DEBIAN 디렉토리에 복사한다.

    (Language : text)
    $ mkdir -p ./debian/DEBIAN
    $ cp control ./debian/DEBIAN

    3) 패키징 만들기

    (Language : text)
    $ dpkg-deb --build debian
    dpkg-deb: building package `ktns-qemu' in `debian.deb'.
    $ mv debian.deb ktns-qemu_1.0-1_amd64.deb
     


    4) 설치
    - 이제 만든 패키지는 dpkg 를 이용하여 설치 할 수 있다.
    $ dpkg -i ./ktns-qemu_1.0-1_amd64.deb

    음하하 패키징 만들기도 무지 쉽네!




    참고:
    deb 파일 캐쉬 디렉토리: /var/cache/apt/archieves/
    deb 파일 정보 보기     : dpkg-deb -I xxx.deb
    deb 설치 파일 리스트  : dpkg-deb -c xxx.deb
    실행파일의 의존 패키지 찾기: dpkg -S <실행파일명>    ex) dpkg -S /bin/cat
    설치된 패키지 정보 : apt-cache showpkg <패키지명>  ex) apt-cache showpkg coreutils
    패키징 검사 방법: lintian xxx.deb

    참고 사이트:
    http://wiki.kldp.org/wiki.php/DocbookSgml/Debian-Binary-Package-Building-HOWTO