2012-11-22 27 views
11

Nếu không có hệ thống đóng gói, chúng tôi có (A) mã nguồn, có thể được dịch/biên dịch thành mã nhị phân (B).Cách các tệp * .dsc liên quan đến * .deb và các tệp mã nguồn

Trong trường hợp gói/ubuntu debian chúng ta có (1) mã nguồn, (2) nguồn gói - dsc tập tin và (3) nhị phân gói - deb tập tin. Làm thế nào mà (2) gói nguồn liên quan đến (1) và (3)? Tại sao chúng ta cần nó? Và, câu hỏi quan trọng nhất: tạo luồng công việc (2) và (3) từ (1) là gì?

Trả lời

10

Các công việc thường đi khoảng như thế này:

  1. Có người không liên kết với Debian viết một số mã nguồn và bài viết nó như là một gói phần mềm trên web, ví dụ, splint-3.1.2.tar.gz
  2. người làm việc tại Debian tải các mã nguồn và viết

    1. Một tập hợp các tệp vá để tạo nguồn dựa trên Debian và tuân thủ nguyên tắc Debian. Chạy

      curl -s 'http://archive.ubuntu.com/ubuntu/pool/universe/s/splint/splint_3.1.2.dfsg1-2.diff.gz' | gunzip -dc | less 
      

      để xem điều này cho gói ví dụ.

    2. A textual metadata file mô tả gói — đây là tệp .dsc và tệp debian/control. “DSC” là từ viết tắt của Kiểm soát nguồn Debian.
  3. Gói nhị phân .deb được xây dựng cho mỗi kiến ​​trúc từ mã nguồn gốc ban đầu với các bản vá lỗi dành riêng cho Debian được áp dụng. Here is one such file. Debian Binary Package Building HOWTO giải thích định dạng của các tệp này và cách kiểm tra chúng.

Tệp .dsc không được sử dụng cho logic xây dựng, nó dành cho siêu dữ liệu. Tuy nhiên nhiều công cụ trên đường đi yêu cầu nó. Ví dụ, trường Build-Depends: được sử dụng để cài đặt các phụ thuộc xây dựng bắt buộc.

+0

Câu trả lời hay! Một câu hỏi nữa. Ví dụ bạn đã đưa ra ở đây, chúng tôi có mã ban đầu (ngược dòng) và khác biệt sau khi các thay đổi của người duy trì. Khi phiên bản mới của mã ban đầu sắp sửa được "gỡ lỗi" cách người duy trì theo dõi thay đổi của họ? Họ hợp nhất khác với bản phát hành deb trước đó sang phiên bản mã nguồn mới? Họ có sử dụng một số CVS không? –

+1

Sau một bản phát hành mới, họ thường chỉ áp dụng lại các bản vá lỗi trong '.diff.gz.' cũ nếu có thứ gì đó bị hỏng, chúng sẽ đào bới. Một số người bảo trì có thể sử dụng 'git' hoặc' quilt' hoặc các công cụ khác mà tôi không biết, nhưng theo như tôi biết, nó thực sự phụ thuộc vào người bảo trì gói. – andrewdotn

+0

Một số liên kết trong câu trả lời của bạn bị hỏng. –

1

Nó thực sự phức tạp hơn nhiều. Ý tưởng đằng sau các gói Debian là chúng chứa tất cả các thông tin cần thiết để buld một trang. Thông thường, nguồn được sửa đổi để bao gồm thư mục debian bao gồm tệp control mô tả phụ thuộc của gói đó và các gói khác tương tác với (ví dụ: ngắt, thay thế, cung cấp gói ảo). Tệp rules giải thích cách xây dựng và cài đặt gói. Ngoài ra còn có các mô tả về cách đóng gói vì một gói nguồn duy nhất có thể trở thành nhiều gói nhị phân (ví dụ: foo-utils, libfoo0, libfoo-dev). debuild thực sự đọc thông tin này, biên soạn và tạo các gói nhị phân. Một sự tinh tế: nếu foo sử dụng libbar-dev, tôi có thể không thực sự biết/quan tâm phiên bản nào của gói nhị phân libbar tôi sử dụng. pbuilder chạy debuild trong môi trường trong sạch để không có cơ hội biên dịch dựa vào những thứ bạn chưa chỉ định rõ ràng.

Tham khảo Debian New Maintainers' Guide để biết chi tiết.

+0

Cảm ơn bạn đã trả lời. Cho đến nay tôi đã sử dụng debuild, nhưng bạn đang nói tôi nên sử dụng pbuilder thay thế? Các gói nguồn là gì? Chúng không được sử dụng?Liên kết bạn đăng nó là tuyệt vời, nhưng kích thước của nó làm tôi sợ đọc :) –

+1

pbuilder là một công cụ tiện lợi để xác minh rằng các phụ thuộc được quy định đầy đủ. Về cơ bản nó tạo ra một môi trường ảo không có gì ngoại trừ các phụ thuộc đã khai báo; nếu nó không thể hoàn thành việc xây dựng, nó thường có nghĩa là bạn có một sự phụ thuộc không khai báo. Nhưng nếu bạn chỉ quan tâm đến việc tạo ra một tập tin '.deb' ở đây và bây giờ, nó không cần thiết phải có sự khắt khe này. – tripleee

+1

Gói nguồn là nguồn được gỡ lỗi, tức là về cơ bản .orig.tar.gz cộng với debdiff của bạn. Đây là những gì bạn cần cung cấp cho những người khác muốn tạo tệp .deb của bạn cho chính họ, có lẽ với các bản vá hoặc các chỉnh sửa của riêng họ hoặc có thể họ muốn xây dựng gói cho một kiến ​​trúc khác. Nếu bạn muốn cung cấp cho người khác, 'pbuilder' có thể bắt đầu có ý nghĩa. – tripleee

Các vấn đề liên quan