Làm thế nào và tại sao để tạo các gói -dbg, -dev, -doc?


15

Tôi đang viết một gói Ubuntu cho một gói về cơ bản cung cấp một số thư viện và tiêu đề mà sau đó được sử dụng để xây dựng phần mềm khác. Gói cũng chia thành các gói nhỏ hơn phụ thuộc lẫn nhau; trong ý nghĩa này, gói này khá giống với boost.

Tôi nhận thấy rằng các gói như boost cung cấp

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

nhưng không có gì đi theo tên boosthay libboost.

  • Ý tưởng đằng sau này là gì?
  • Các mục đích của là gì -dbg, -dev-docgói?
  • Có hướng dẫn nào được cung cấp về cách viết tập tin xây dựng cho các gói đó không?

Câu trả lời:


13

Ý tưởng & Mục đích

Lý do chính để tách các gói khác nhau này liên quan đến dung lượng đĩa và tốc độ tải xuống. Đặc biệt, nó là một mối quan tâm lớn đối với không gian gương vì nó có nghĩa là phân phối nhiều bản sao của dữ liệu. Bằng cách làm cho foo-common, foo-datahoặc foo-docgói Architecture: all, chúng tôi chỉ giữ một bản sao của các dữ liệu trong kho lưu trữ thay vì có nó sao chép với mỗi kiến trúc (ví dụ như i386, amd64, vv ...). Hầu hết người dùng không cần các biểu tượng gỡ lỗi và cuối cùng chỉ khiến quá trình tải xuống gói mất nhiều thời gian hơn.

Đối với các gói trong kho lưu trữ chính thức của Ubuntu, thực sự không có lý do gì để tạo -dbgcác gói theo cách thủ công. Các máy xây dựng sẽ tự động loại bỏ các ký hiệu gỡ lỗi và đặt chúng vào -dbgsymcác gói được lưu trữ trên ddebs.ubfox.com. (Xem: Gói Biểu tượng gỡ lỗi ) -dbgcác gói tồn tại thường được chuyển từ Debian.

Hướng dẫn

Để thực hiện, hãy xem câu hỏi này:

Tóm lại, các khổ thơ mới cần được tạo ra debian/controlcho mỗi gói. Sau đó, debian/foo-*.installcác tập tin cần phải được tạo ra. Điều này sẽ cho phép dh_installđưa đúng nội dung vào đúng gói.

Các foo.installcho gói nhị phân chính có thể trông giống như:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, Hoặc bất cứ điều gì:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

Và cho foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

Tạo foo-dbggói yêu cầu chỉnh sửa debian/rulesvì thông thường dh_stripsẽ loại bỏ các biểu tượng gỡ lỗi. Vì vậy, chúng ta cần ghi đè hành vi đó:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg

12

Boost là một ví dụ phức tạp, trước tiên hãy xem xét một cái đơn giản hơn.

Chính xác, gói nguồn openssl cung cấp 5 gói nhị phân:

  • libssl1.0.0chứa thư viện động OpenSSL, phiên bản 1.0.0. Đó là những gì các chương trình liên kết với thư viện này cần phải chạy. Tên gói chứa số phiên bản vì bạn có thể cài đặt các phiên bản khác của thư viện cùng lúc, nếu bạn có các chương trình khác được liên kết với phiên bản khác không tương thích nhị phân với 1.0.0.
  • opensslchứa các công cụ dòng lệnh sử dụng thư viện OpenSSL. Ngay cả khi bạn có nhiều phiên bản của thư viện, bạn không cần nhiều phiên bản của các công cụ này: chỉ có một /usr/bin/opensslvà các công cụ, dữ liệu và tài liệu liên quan.
  • libssl-devchứa các tệp mà bạn cần nếu bạn muốn biên dịch chương trình liên kết với OpenSSL. Có tệp tiêu đề C ( *.h), thư viện để liên kết ( *.a, *.so) và một vài tệp.
  • libssl-docchứa tài liệu cho thư viện OpenSSL. Bạn chỉ cần gói này nếu bạn sẽ viết chương trình sử dụng thư viện.
  • libssl1.0.0-dbgchứa các biểu tượng gỡ lỗi. Nó chỉ hữu ích cho những người gỡ lỗi thư viện OpenSSL hoặc các chương trình sử dụng nó. Câu trả lời của andrews Something có thêm thông tin về các -dbggói này .

Ngoài ra, chính xác có chứa một phiên bản cũ hơn của thư viện libssl0.9.8, bởi vì có những chương trình vẫn được liên kết với phiên bản cũ hơn.

Các gói khác mà bạn có thể thấy là các ràng buộc cho các ngôn ngữ khác ngoài C. OpenSSL không giao hàng với bất kỳ (có ràng buộc nào với OpenSSL cho các ngôn ngữ khác, nhưng chúng không đến từ cùng một nguồn). Một ví dụ là sqlite3 , tàu có các ràng buộc TCL .

Lý do chính để chia các gói như thế này là các gói khác nhau có đối tượng mục tiêu khác nhau. Một hệ thống mà không ai từng biên dịch bất cứ thứ gì chỉ cần libgói lõi và có thể là các công cụ dòng lệnh; chúng sẽ được cài đặt tự động từ các phụ thuộc nếu cần. Nếu ai đó muốn biên dịch một chương trình sử dụng thư viện, họ cần -devgói đó. Nếu ai đó muốn viết một chương trình sử dụng thư viện, họ cần -docgói.

Vậy còn Boost thì sao? Nó có cùng cấu trúc, nhưng vì Boost là một thư viện khổng lồ, nên nó được chia thành nhiều gói nhỏ hơn: libboost-*1.46.1libboost-*1.46-dev. Nói chính xác, chỉ có một phiên bản Boost, 1.46 , nhưng oneiric có cả 1.421.46 . Ngoài ra còn có một mặc định tăng cường siêu dữ liệu kéo gói trong phiên bản như là một phụ thuộc.

Nhìn vào libhangul , ngoài gói thư viện động libhangul1và gói phát triển libhangul-dev, còn có một gói libhangul-data. Gói này chứa dữ liệu bổ sung được yêu cầu bởi thư viện. Ngay cả khi bạn có nhiều phiên bản của thư viện, họ có thể chia sẻ -datagói. Ngoài ra, gói là độc lập kiến ​​trúc. Phần mềm chứa một lượng lớn dữ liệu độc lập với kiến ​​trúc được chia thành các gói phụ thuộc vào kiến ​​trúc và độc lập với kiến ​​trúc, để tiết kiệm không gian trên các trang phân phối. Một hậu tố khác với một ý nghĩa tương tự là -common.

Các quy tắc đóng gói Ubuntu và Debian rất giống nhau, vì vậy tài liệu về việc tạo các gói Debian cũng áp dụng cho Ubuntu. Thực tế, bạn có thể có cùng gói nguồn cho Debian và Ubuntu; điều duy nhất làm cho các gói Debian và Ubuntu trở nên khác biệt là biên dịch chúng theo các phiên bản thư viện khác nhau và điều đó không khác gì giữa sự khác biệt giữa các bản phát hành Ubuntu khác nhau. Có sẵn tài liệu dành cho nhà phát triển Debian , đặc biệt là Hướng dẫn chính sách DebianTài liệu tham khảo của nhà phát triển ; xem Hướng dẫn bảo trì mới để biết giới thiệu. Bỏ qua các phần về làm việc với dự án Debian, v.v., chỉ cần đọc các phần về cách tạo gói.dh_make là một cách tốt để bắt đầu với gói gỡ lỗi (bạn sẽ muốn chọn Thư viện trên mạng).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.