2014-02-04

Create a .deb Debian package (tạo một package.deb)

Để tạo một .deb package có thể tham khảo các tài liệu

How to create Debian packages

Mình chỉ tóm tắt thôi, nó gồm các bước như sau:

  1. Tạo thư mục dạng ${PACKAGE_NAME}_${VERSION}_${ARCHITECTURE}, ví dụ your-app_0.4.5-r5_i386.

    Nếu build .deb cho Ubuntu có thể chỉ định thêm Ubuntu version ví dụ your-app_0.4.5-r5ubuntu1_i386 có nghĩa là version 1 dành cho Ubuntu build từ version 0.4.5-r5 dành cho Debian.

  2. Tạo các subdirectories cho các file sẽ install, ví dụ:
    /usr/bin ‣ your-app
    /usr/lib/nautilus/extensions-03 ‣ chứa extension cho Nautilus như libnautilus-your-app.so
    /usr/share/doc, /usr/share/man ‣ chứa file help, manual
    /usr/share/locale ‣ file ngôn ngữ, /usr/share/menu.
    /opt/your-app/logo_32.xpm

  3. Tạo thư mục DEBIAN trong package directory. Trong thư mục DEBIAN chứa các file như control, conffile, md5sums, postinst, postrm, preinst, prerm. Có thể tham khảo từ các .deb package khác bằng cách extract nội dung các .deb có sẵn. Thông thường các .deb được cache trong /var/cache/apt/archives. Để xem .deb có nội dung gì có thể dùng ar –t ví dụ

    ar -t /var/cache/apt/archives/firefox_15.0.1+build1-0ubuntu0.11.10.1_i386.deb.
    

    Để extract dùng ar –x sau đó dùng tar để xem nội dung các file nén.
    Có thể dùng tool dpkg-deb để extract nội dung file .deb, eg.

    dpkg-deb -x .../app.deb ~/workspace/app
    dpkg-deb -e .../app.deb ~/workspace/app/DEBIAN
    

  4. Nội dung file DEBIAN/control có thể giống file control của các app khác, chỉ cần chỉnh sửa 1 số field.
  5. File DEBIAN/postinst là một script sẽ run bởi dpkg –i sau khi các file trong package được extract. Post-install bắt đầu bằng
    #! /bin/sh Để bảo đảm nếu có error phát sinh, script nên return non-zero exit code bằng set –e để shell exit ngay command đầu tiên không thành công.

  6. File DEBIAN/preinst pre-install
  7. File DEBIAN/prerm pre-remove
  8. File DEBIAN/postrm post-remove
  9. Xóa tất cả các file backup *~, nhất là các file trong DEBIAN/*~

    rm -rf `find package-dir -name '*~'`
    

  10. Tạo file md5sums chứa checksum MD5 cho tất cả các file trong package bằng command

    md5sum `find . -type f | grep -v '^[.]/DEBIAN/'` > DEBIAN/md5sums
    

    Chạy command trong thư mục chứa DEBIAN.

  11. Giá trị của field Installed-Size: là số cuối cùng trong output của command du chạy trong package directory (lưu ý remove backup file). Có thể chỉ summarize kết quả với command như sau:

    du -sx --exclude DEBIAN package-dirname
    -s, --summarize   ‣display only a total for each argument
    -x, --one-file-system ‣skip directories on different file systems
    

  12. Build .deb package bằng

    fakeroot dpkg-deb –b|--build package-dir
    

  13. Kiểm tra bằng

    lintian package-name.deb
    

  14. Để install .deb package chỉ cần double click, dùng command như sau

    sudo dpkg -i package-file.deb
    

    Để uninstall dùng command

    sudo dpkg -r package-name