Tại sao sử dụng sbuild hơn pbuilder?


21

Có nhiều cách để xây dựng các gói Debian trong một môi trường sạch và có thể tái tạo. Hai trong số thường xuyên được sử dụng là pbuilder và sbuild. Cá nhân, tôi đã luôn sử dụng pbuilder. Tôi thấy pbuilder dễ sử dụng và bảo trì hơn nhiều. Tôi đã không thể tìm thấy bất kỳ so sánh cạnh nhau của hai. Tôi đang bỏ lỡ điều gì?

Những lợi thế nào trong việc sử dụng sbuild so với pbuilder?

Câu trả lời:


27

sbuild và pbuilder đã phát triển qua nhiều năm để có chức năng gần như giống hệt nhau và khi các tính năng được thêm vào, chúng có xu hướng nhanh chóng được người khác chấp nhận.

Vì bao bì Debian là định dạng dựa trên chính sách, nó là một trợ giúp quan trọng trong việc xác định xem sự cố xây dựng nhất định có phải là lỗi trong quá trình triển khai trình xây dựng hay sự cố với gói được xây dựng để có nhiều triển khai hệ thống xây dựng hay không. Để duy trì điều này, tất cả các hệ thống xây dựng hàng đầu phải có các đảng phái mạnh mẽ hỗ trợ họ, trên tinh thần cạnh tranh hợp tác nhằm đảm bảo rằng chúng tôi có các triển khai chính sách sẵn có chính xác nhất.

Cơ chế bên trong của sbuild và pbuilder khác nhau đáng kể, do đó, chính xác các gói được kéo để đáp ứng phụ thuộc vào xây dựng hoặc cách chúng được kéo, cơ chế chính xác mà các mục tiêu khác nhau trong debian / quy tắc được gọi, v.v. có thể khác nhau sự khác biệt trong hành vi trong các trường hợp rất cụ thể cho các gói nhất định. Hầu hết thời gian điều này đại diện cho một lỗi trong một hoặc thực hiện khác, và đôi khi phản ánh sự thiếu rõ ràng trong chính sách đóng gói: trong mọi trường hợp, thay đổi hành vi nên được giải quyết.

Các buildds chính thức trong cả Debian và Ubuntu đều sử dụng sbuild (mặc dù thường không phải là sbuild có sẵn từ kho lưu trữ), được coi là một lợi thế của một số nhà phát triển, vì họ tin tưởng hơn rằng cấu hình của họ phù hợp với gói mà họ sẽ được tiết lộ khi xây dựng, mặc dù nếu mọi người làm điều này, chúng ta sẽ mất khả năng phân biệt các lỗi trong chính sách với các lỗi trong sbuild.

Trong lịch sử, sự hiểu biết của tôi là sự phát triển pbuilder ban đầu tập trung vào nhu cầu của nhà phát triển vì sự phát triển của người dùng cuối và sbuild ban đầu tập trung vào nhu cầu của buildd và quản trị viên lưu trữ. Gần đây, những trọng tâm này đã chuyển đổi, vì mọi người đã xây dựng các hệ thống quản lý lưu trữ dựa trên pbuilder và các công cụ phát triển hữu ích hơn bằng cách sử dụng sbuild.

Cả hai công cụ (hoặc các công cụ phái sinh gần gũi thường có của chúng) đều hỗ trợ lưu trữ chroots dưới dạng tarball, giải nén trên hệ thống, trong các khối riêng biệt (với các móc có sẵn để gắn đặc biệt: ví dụ: snapshot LVM), sử dụng hệ thống tập tin lớp phủ, sử dụng ngữ nghĩa sao chép, v.v. Cả hai công cụ đều cung cấp các công cụ dòng lệnh tầm thường để hợp lý hóa trường hợp phổ biến (thử nghiệm xây dựng gói) và ngữ nghĩa hook phong phú để hỗ trợ các trường hợp phức tạp (lưu trữ lớn). Cả hai đều cung cấp một phương tiện để tạo ra một môi trường thử nghiệm trong một chroot. Nói tóm lại, cả hai công cụ đều cung cấp bất cứ thứ gì bạn có thể nghĩ là bạn muốn trong một công cụ xây dựng gói (và cả hai đều có hoạt động ngược dòng vui vẻ chấp nhận lỗi và bản vá).

Tóm lại: nếu bạn hài lòng với pbuilder, hãy tiếp tục sử dụng nó. Nếu bạn muốn chơi với sbuild, hãy thoải mái. Công cụ tốt nhất là công cụ bạn cảm thấy thoải mái khi sử dụng cho loại công việc bạn làm.


Thật thú vị khi bạn nói rằng sbuildđược sử dụng để tạo các gói Ubuntu mặc dù launchpad (từ những gì tôi hiểu) chạy pbuilder...
Alexis Wilke

19

Luôn luôn nguy hiểm khi không đồng ý với Emmet, vì vậy hãy để tôi bắt đầu bằng cách thừa nhận rằng câu trả lời của anh ấy có lẽ đúng hơn. Tuy nhiên, cá nhân tôi thấy pbuilder thân thiện với người dùng hơn và hiệu suất cao hơn.

Nếu bạn đang sử dụng Ubuntu 12.10 trở lên, hãy chắc chắn cài đặt các tập lệnh pbuilder tuyệt vời, đó là một tập hợp các trình bao bọc cực kỳ thân thiện xung quanh trình xây dựng thô.

Nếu bạn đang dùng Ubuntu 12.04, bạn có thể cài đặt tập lệnh pbuilder từ kho lưu trữ backports.

Bây giờ, hãy so sánh và đối chiếu sự thân thiện với người dùng của các hoạt động tương đương. Trong các ví dụ này, tôi sẽ chuyển qua sử dụng một chroot ARM được lưu trữ trên x86, nhưng các khái niệm vẫn áp dụng cho một chroot x86 được lưu trữ trên x86. Hãy nhớ rằng, tôi đang sử dụng các trình bao bọc pbuilder-scripts.

Một điều cần lưu ý là các tập lệnh pbuilder thực hiện một chút quy ước, tương tự như cách Ruby on Rails đưa ra một số quyết định cho bạn để bạn có thể đi nhanh chóng. Tôi sẽ thử và chỉ ra những điều này khi chúng tôi đi.

Tạo một chroot

mk-sbuild --arch=armhf quantal

đấu với

# in addition to the chroot, creates a new, empty directory named ~/Projects/quantal-armhf
pcreate -a armhf -d quantal quantal-armhf

Phán quyết: tie , cả hai dòng lệnh đều khá đơn giản và cả hai có thể có thêm tùy chọn cho các trường hợp sử dụng fancier nếu cần. Tuy nhiên, hãy lưu ý thư mục mới bổ sung được tạo bởi pcreate.

Tải xuống gói nguồn

# standard debian/ubuntu method, works in any directory
apt-get source casper

so với

# 'quantal-armhf' is the name of the chroot created earlier
# results in downloading package to: ~/Projects/quantal-armhf/casper/
pget quantal-armhf casper

Phán quyết: cạnh nhẹ cho sbuild , bởi vì bạn đang sử dụng thực tiễn tốt nhất của debian / ub Ubuntu. Quy ước được sử dụng bởi pget ban đầu có vẻ lạ, nhưng vì tôi làm việc trên nhiều gói trên nhiều bản phát hành Ubuntu, tôi thích tổ chức mà nó áp đặt. Cũng lưu ý rằng nguồn apt-get cũng trích xuất nguồn bất cứ nơi nào bạn chạy lệnh, để lại cho bạn với * .orig.tar.gz, * .debian.tar.gz, * .dsc và thư mục mở rộng mà cá nhân tôi tìm thấy lộn xộn Vẻ đẹp của tổ chức sẽ đến sớm, tôi hứa.

Nhập chroot, phiên bản phù du

schroot -c quantal-armhf

so với

ptest quantal-armhf

Phán quyết: cạnh nhẹ cho pbuild , ít ký tự để nhập là ít ký tự hơn. Lưu ý rằng trong phiên bản nhập chroot này, mọi thay đổi bạn thực hiện ở đây sẽ bị mất khi bạn thoát khỏi chroot. Cũng lưu ý rằng trong schroot, bạn sẽ vẫn là người dùng bình thường trong khi với ptest, bạn sẽ ở trong chroot với tư cách là người dùng root.

Nhập chroot, lưu phiên bản thay đổi

sudo schroot -c quantal-armhf-source -u root

so với

ptest quantal-armhf --save

Phán quyết: cạnh nhẹ cho pbuild , ít ký tự hơn và các đối số dòng lệnh trực quan hơn, theo ý kiến ​​của tôi. Trong phiên bản nhập chroot này, mọi thay đổi bạn thực hiện trong đó sẽ được lưu lại cho các yêu cầu trong tương lai.

Xây dựng một gói trong chroot

debuild -S -sa -I -i
sbuild -A --arch armhf -d quantal-armhf /path/to/casper-1.315.dsc

so với

# must be invoked when pwd is ~/Projects/quantal-armhf/casper/casper-1.315
pbuild

Phán quyết: pbuild , bây giờ chúng ta thấy chiến thắng đáng kể đầu tiên khi sử dụng các quy ước của pbuild. Đây là một lệnh đơn giản đã chết mà không có gì khác để nhớ, so với việc chỉ định kiến ​​trúc, tên của chroot và yêu cầu một đường dẫn đến tệp * .dsc mà sbuild yêu cầu. Ngoài ra, bạn phải nhớ tạo tệp * .dsc mới với sbuild trong khi pbuild sẽ tự động làm điều đó cho bạn.

Xây dựng gói tương tự trong chroot, lần thứ hai

Trong ví dụ trên, cả sbuild và pbuild sẽ tải xuống và cài đặt các bản dựng trong các bộ tương ứng của chúng. Tuy nhiên, pbuild lưu các tệp .deb đã tải xuống trong / var, vì vậy nếu bạn gọi pbuild lần thứ hai, bạn không phải tải xuống tất cả các bản dựng lại (mặc dù chúng vẫn phải được cài đặt trong chroot). sbuild không lưu trữ các tệp .deb (ít nhất là không theo mặc định), và do đó, bạn phải tải xuống tất cả các bản dựng lại ngoài việc chờ chúng được cài đặt trong chroot.

Phán quyết: pbuild bởi một cú sút xa. Bộ nhớ đệm xây dựng là một cài đặt mặc định tuyệt vời và pbuild đủ thông minh để phát hiện nếu có phiên bản mới hơn của bản dựng trong kho lưu trữ và sẽ kéo xuống phiên bản mới nếu được yêu cầu. Đối với một gói phức tạp có nhiều bản dựng, cài đặt đơn giản này sẽ giúp bạn tiết kiệm được vài phút trong cuộc sống.

Tóm lược

Ra khỏi hộp, tôi thấy các kịch bản pbuilder thân thiện hơn và nhanh hơn các tương đương sbuild. Tất nhiên, có nhiều cách để làm cho pbuilder nhanh hơn (xây dựng trong một tmpfs, vô hiệu hóa một số hook chroot), và có lẽ cũng có những thủ thuật tương tự cho sbuild, nhưng tôi không biết về chúng.

Hi vọng điêu nay co ich.


pget trông cực kỳ giống với 'pull-lp-source' từ gói công cụ ubfox-dev. nguồn apt-get là thứ mà về cơ bản tôi không bao giờ sử dụng cho distro dev. Nó nhắm vào người dùng, vì vậy họ có thể nói "hãy cho tôi nguồn của gói này", chứ không phải cho các nhà phát triển.
SpamapS

1
Errr .. uhh ... sbuild trong một thư mục đóng gói thực hiện chính xác giống như pbuild. Xin lỗi, nhưng -1 cho điều đó. Vui lòng sửa và giải quyết vấn đề này và tôi sẽ xóa -1
SpamapS

Ngoài ra, trường hợp sử dụng "thay đổi một cái gì đó trong chroot và duy trì nó" là sai lệch. Đây là một ý tưởng tồi, vì nó thay đổi chroot sạch của bạn thành khác với chroot sạch chilot. Nó gần như không bao giờ khuyên.
SpamapS

@SpamapS, tôi thực sự sử dụng pbuilder-dist --login --save-after-loginđể điều chỉnh môi trường xây dựng một chút bởi vì, ví dụ, tôi cần một gói đặc biệt và mục nhập nguồn.list của nó không tồn tại theo mặc định. Vì vậy, nó có vẻ có ý nghĩa để có thể điều chỉnh môi trường chroot.
Alexis Wilke

xin lỗi vì đã chỉ trích lời chỉ trích của bạn, nhưng - "phán quyết: cạnh nhẹ cho pbuild, ít ký tự để nhập ít ký tự hơn" - đây là một lập luận rất ngớ ngẩn, không thực sự nghiêm trọng. Nhập 5 ký tự ít hơn không phải là một yếu tố khi chúng ta so sánh các hệ thống SW, rõ ràng có sự khác biệt quan trọng hơn nhiều.
Tele
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.