2012-10-09 39 views
11

Tất cả các ví dụ đóng gói Debian mà tôi có thể tìm thấy giả sử người dùng đang đóng gói lại từ một bản dựng ngược dòng, do đó, nó giải nén một gói tarball nguồn, cấu hình, xây dựng lại và đóng gói lại. Tôi đang cố gắng để xây dựng một gói cho thư viện của riêng tôi, được xây dựng bằng cách sử dụng autotools. Tôi đã thử các cách tiếp cận khác nhau, và nỗ lực mới nhất của tôi trông như thế này:Làm cách nào để tạo gói Debian như là một phần của quá trình tự động tạo?

DH_PACKAGE_NAME=`echo $(PACKAGE_NAME) | sed s/_/-/g` 
dist-hook: 
    cd $(distdir) ; \ 
    export DEBFULLNAME="Some One" ; \ 
    export DEBEMAIL="[email protected]" ; \ 
    echo -e "\n" | dh_make --copyright blank --library --native \ 
     --packagename $(DH_PACKAGE_NAME) 
    mv $(distdir)/debian $(distdir)/DEBIAN 
    dpkg-deb --build $(distdir) 

dpkg-deb phàn nàn về dh_makes control file. Tôi có một giải pháp mực in là một cái gì đó đơn giản hơn nhiều?

+2

Tôi khuyên bạn không nên xây dựng gói trong một cái móc, mà thay vào đó tạo các mục tiêu riêng biệt: 'make rpm',' make pkg', 'make deb', vv Không đặt DEBFULLNAME/DEBEMAIL, nhưng yêu cầu người dùng đặt chúng (có thể là trong shell .rcs). Có toàn bộ thư mục debian/control được xây dựng trong khi cấu hình. –

Trả lời

2

Thật không may, tôi không thể đưa ra một trong những câu trả lời tuyệt vời ở đây thực sự làm việc trong môi trường của tôi. Các dpkg-buildpackage chỉ là quá fickle về xây dựng các gói từ nguồn.Cuối cùng tôi đã giải quyết theo cách tiếp cận dpkg-deb --build được hiển thị here

3

Dưới đây là ví dụ về cách tôi tạo gói Debian như một phần của bản dựng tự động.

Trong configure.ac, tôi kiểm tra xem dpkg-buildpackage được cài đặt trên hệ thống, tuy nhiên, tôi không hủy nếu không tìm thấy.

Tôi yêu cầu người dùng chạy ./configure --enable-deb khi tạo gói Debian vì nhiều lý do khác nhau, nhưng trong hầu hết các trường hợp không cần thiết. Nếu --enable-deb được chỉ định nhưng không tìm thấy dpkg-buildpackage thì tôi sẽ hủy.

https://github.com/ptomato/gnome-inform7/blob/master/configure.ac

Sau đó, trong top-level Makefile.am, mã trông như thế này.

https://github.com/ptomato/gnome-inform7/blob/master/Makefile.am

Lưu ý rằng tôi gọi make dist đầu tiên, sau đó giải nén tarball quận và sao chép thư mục debian vào nó. Đây là phương pháp hay nhất theo hướng dẫn đóng gói Debian; họ nói rằng thư mục debian chỉ nên được kiểm soát nguồn, không phải trong bản phân phối tarball.

+0

Tôi nhận thấy bạn không sử dụng dh_make để lấy thư mục debain và kiểm soát tệp. có lẽ dh_make chỉ có ý nghĩa với deb_helper? Bạn có thể đăng một bản sao của tập tin điều khiển của bạn không? Cảm ơn. – CAB

+0

Tệp điều khiển và thư mục debian có trong cùng một kho lưu trữ, chỉ cần duyệt đến chúng ... ;-) – ptomato

3

toàn bộ quá trình đóng gói được sắp xếp hợp lý về việc gói quá trình xây dựng vào quy trình đóng gói. cố gắng để bọc các quá trình đóng gói vào quá trình xây dựng do đó có lẽ không phải là siêu dễ dàng, nhưng tôi không thấy một điều cần thiết để không làm điều đó theo cách tiêu chuẩn.

vậy:

  • làm autotools bạn xây dựng dựa trên hệ thống, nếu như bạn không quan tâm đến gói debian ở tất cả.
  • tạo ra một tập tin debian/quy tắc đơn giản mà sẽ gọi xây dựng hệ thống của bạn và thực hiện một deb gói
  • nếu bạn (hoặc một số người dùng khác của gói của bạn) muốn (s) để xây dựng các deb, chạy dpkg-buildpackage
  • nếu bạn (hoặc một số người dùng khác của gói của bạn) không muốn xây dựng một deb, chỉ cần chạy ./configure && make && make install

này là thực hành tốt hơn, vì nó giữ 2 giai đoạn riêng biệt (xây dựng và đóng gói) ngoài. nó cũng cho phép tích hợp dễ dàng hơn vào bất kỳ bản phân phối dựa trên Debian nào (ví dụ bạn nên quyết định sẽ có gói phần mềm của bạn trong Debian "thực"), vì hướng dẫn đóng gói Debian khá nghiêm ngặt về việc giữ hai quy trình đó các nguồn cung cấp debian riêng của họ/được tán thành và debian của thượng nguồn/thường bị loại bỏ)