Mengapa menggunakan sbuild di atas pbuilder?

21

Ada banyak cara untuk membangun paket Debian di lingkungan yang bersih dan dapat direproduksi. Dua yang paling sering digunakan adalah pbuilder dan sbuild. Secara pribadi, saya selalu menggunakan pbuilder. Saya menemukan pbuilder jauh lebih mudah digunakan dan dipelihara. Saya belum dapat menemukan perbandingan keduanya. Apa yang saya lewatkan?

Apa keuntungan yang ada dalam menggunakan sbuild dibandingkan pbuilder?

andrewsomething
sumber

Jawaban:

27

sbuild dan pbuilder telah berkembang selama bertahun-tahun untuk memiliki fungsi yang hampir identik, dan karena fitur ditambahkan ke keduanya, mereka cenderung cepat diadopsi oleh yang lain.

Karena kemasan Debian adalah format yang didorong oleh kebijakan, itu adalah bantuan yang signifikan dalam menentukan apakah masalah build yang diberikan adalah bug dalam implementasi builder atau masalah dengan paket yang sedang dibangun untuk memiliki beberapa implementasi dari sistem build. Untuk mempertahankan ini, sistem pembangunan terkemuka harus memiliki pendukung kuat, dengan semangat kompetisi kolaboratif untuk memastikan bahwa kami memiliki implementasi kebijakan yang paling tepat yang tersedia.

Mekanisme internal sbuild dan pbuilder sangat berbeda, jadi paket mana yang ditarik untuk memenuhi dependensi build atau bagaimana mereka ditarik, mekanisme yang tepat di mana berbagai target dalam debian / aturan dipanggil, dll. Mungkin berbeda, menyebabkan beberapa perbedaan perilaku dalam kasus yang sangat spesifik untuk paket tertentu. Sebagian besar waktu ini merupakan bug dalam satu atau implementasi lainnya, dan kadang-kadang mencerminkan kurangnya kejelasan dalam kebijakan pengemasan: dalam hal apa pun, perubahan perilaku harus diselesaikan.

Buildd resmi baik di Debian maupun Ubuntu menggunakan sbuild (walaupun seringkali bukan sbuild yang tersedia dari arsip), yang dianggap sebagai keuntungan oleh beberapa pengembang, karena mereka memiliki keyakinan yang lebih besar bahwa konfigurasi mereka cocok dengan konfigurasi paket yang akan diekspos ketika paket mereka dibangun, walaupun jika semua orang melakukan ini, kami kehilangan kemampuan untuk membedakan bug dalam kebijakan dari bug di sbuild.

Secara historis, pemahaman saya adalah bahwa pengembangan pbuilder pada awalnya berfokus pada kebutuhan pengembang karena pengembangan pengguna akhir dan pengembangan awal pada awalnya difokuskan pada kebutuhan adminstrator buildd dan arsip. Baru-baru ini, fokus ini telah beralih, karena orang-orang telah membangun sistem manajemen arsip berdasarkan pbuilder, dan alat pengembang yang lebih bermanfaat menggunakan sbuild.

Kedua alat (atau turunan dekat yang tersedia secara umum) mendukung penyimpanan chroot sebagai tarball, dibongkar pada sistem, dalam volume terpisah (dengan kait yang tersedia untuk pemasangan khusus: misalnya snapshot LVM), menggunakan sistem file overlay, menggunakan semantik copy-on-write, dll. Kedua alat menawarkan alat baris perintah sepele untuk merampingkan kasus umum (test-build a package) dan semantik kaya hook untuk mendukung kasus kompleks (arsip besar). Keduanya menyediakan sarana untuk membuat lingkungan pengujian dalam chroot. Singkatnya, kedua alat menyediakan hampir semua hal yang Anda pikir Anda inginkan dalam alat pembuatan paket (dan keduanya memiliki upstream aktif yang senang menerima bug dan tambalan).

Singkatnya: jika Anda senang dengan pbuilder, tetap gunakan itu. Jika Anda ingin bermain dengan sbuild, silakan saja. Alat terbaik adalah yang Anda nyaman gunakan untuk jenis pekerjaan yang Anda lakukan.

Emmet Hikory
sumber
Menarik bahwa Anda katakan sbuilddigunakan untuk membuat paket-paket Ubuntu meskipun launchpad (dari apa yang saya mengerti) berjalan pbuilder...
Alexis Wilke
19

Selalu berbahaya untuk tidak setuju dengan Emmet, jadi izinkan saya memulai dengan mengakui bahwa jawabannya mungkin lebih benar. Namun, saya pribadi menemukan pbuilder lebih ramah pengguna dan lebih performan di luar kotak.

Jika Anda menggunakan Ubuntu 12.10 atau lebih baru, pastikan untuk menginstal skrip pbuilder yang luar biasa, yang merupakan sekumpulan pembungkus yang sangat ramah di sekitar pbuilder mentah.

Jika Anda menggunakan Ubuntu 12.04 Anda dapat menginstal skrip pbuilder dari repositori backports.

Sekarang, mari kita bandingkan dan kontraskan keramahan pengguna terhadap operasi yang setara. Dalam contoh-contoh ini, saya akan berjalan menggunakan chroot ARM yang di-host di x86, tetapi konsep-konsepnya masih berlaku untuk chroot x86 yang di-host di x86 juga. Ingat, saya menggunakan pembungkus pbuilder-script.

Satu hal yang perlu diperhatikan adalah bahwa pbuilder-scripts menerapkan sedikit konvensi, mirip dengan bagaimana Ruby on Rails membuat beberapa keputusan untuk Anda sehingga Anda dapat berjalan dengan cepat. Saya akan mencoba dan menunjukkan ini saat kita pergi.

Buat chroot

mk-sbuild --arch=armhf quantal

vs.

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

putusan: tie , kedua baris perintah cukup sederhana, dan keduanya dapat mengambil opsi tambahan untuk kasus penggunaan yang lebih menarik jika diperlukan. Namun, harap perhatikan direktori baru tambahan yang dibuat oleh pcreate.

Unduh paket sumber

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

vs.

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

putusan: sedikit tepi untuk sbuild , karena Anda menggunakan praktik terbaik debian / ubuntu standar. Konvensi yang digunakan oleh pget mungkin tampak aneh pada awalnya, tetapi karena saya mengerjakan banyak paket di beberapa rilis Ubuntu, saya suka organisasi yang diterapkannya. Perhatikan juga bahwa sumber apt-get juga mengekstrak sumber di mana pun Anda menjalankan perintah, meninggalkan Anda dengan * .orig.tar.gz, * .debian.tar.gz, * .dsc dan direktori yang diperluas, yang secara pribadi saya temukan untuk menjadi berantakan. Keindahan organisasi akan segera datang, saya janji.

Masukkan chroot, versi sesaat

schroot -c quantal-armhf

vs.

ptest quantal-armhf

putusan: sedikit tepi untuk pbuild , lebih sedikit karakter untuk diketik lebih sedikit karakter. Perhatikan bahwa dalam versi memasukkan chroot ini, setiap perubahan yang Anda lakukan di sini akan hilang begitu Anda keluar dari chroot. Perhatikan juga bahwa di schroot, Anda akan tetap menjadi pengguna normal sedangkan dengan ptest, Anda akan berada di chroot sebagai pengguna root.

Masukkan chroot, simpan versi perubahan

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

vs.

ptest quantal-armhf --save

putusan: sedikit tepi untuk pbuild , karakter lebih sedikit dan argumen baris perintah yang lebih intuitif, menurut saya. Dalam versi memasukkan chroot ini, setiap perubahan yang Anda lakukan di dalamnya akan disimpan untuk doa selanjutnya.

Buat paket di dalam chroot

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

vs.

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

putusan: pbuild , sekarang kita melihat kemenangan signifikan pertama saat menggunakan konvensi pbuild. Ini adalah perintah sederhana yang mati untuk mengingat, selain menentukan arsitektur, nama chroot, dan membutuhkan path ke file * .dsc yang dibutuhkan oleh sbuild. Selain itu, Anda harus ingat untuk membuat file * .dsc baru dengan sbuild sedangkan pbuild akan melakukannya secara otomatis untuk Anda.

Bangun paket yang sama di chroot, untuk kedua kalinya

Pada contoh di atas, sbuild dan pbuild akan mengunduh dan menginstal build-deps di chroot masing-masing. Namun, pbuild menyimpan file .deb yang diunduh di / var, jadi jika Anda memanggil pbuild untuk kedua kalinya, Anda tidak harus mengunduh semua build-deps lagi (walaupun masih harus diinstal di chroot). sbuild tidak men-cache file .deb (setidaknya tidak secara default), dan karena itu, Anda harus mengunduh semua build-deps lagi selain menunggu mereka diinstal di chroot.

putusan: pbuild dengan tembakan panjang. Caching build-deps adalah pengaturan default yang bagus, dan pbuild cukup pintar untuk mendeteksi jika ada versi build-dep yang lebih baru dalam arsip dan akan menarik versi baru jika diperlukan. Untuk paket kompleks dengan banyak build-deps, pengaturan sederhana ini akan menghemat menit hidup Anda.

Ringkasan

Di luar kotak, saya menemukan skrip pbuilder menjadi lebih ramah dan lebih cepat dari padanan sbuild. Tentu saja, ada cara untuk membuat pbuilder lebih cepat (membangun tmpfs, menonaktifkan beberapa chroot hooks), dan mungkin ada trik yang sama untuk sbuild juga, tetapi saya tidak menyadarinya.

Semoga ini membantu.

achiang
sumber
pget terlihat sangat mirip dengan 'pull-lp-source' dari paket ubuntu-dev-tools. apt-get source adalah sesuatu yang pada dasarnya tidak pernah saya gunakan untuk distro dev. Ini ditujukan untuk pengguna, sehingga mereka dapat mengatakan "beri saya sumber paket ini", bukan pengembang.
SpamapS
1
Errr .. uhh ... sbuild dalam direktori pengemasan melakukan hal yang persis sama dengan pbuild. Maaf, tapi -1 untuk itu. Harap perbaiki dan atasi ini, dan saya akan menghapus -1
SpamapS
Juga, use case "ubah sesuatu di chroot dan tetap ada" itu menyesatkan. Ini adalah ide yang buruk, karena mengubah chroot bersih Anda menjadi berbeda dari chroot clean buildd. Hampir tidak pernah disarankan.
SpamapS
@SpamapS, saya benar-benar menggunakan pbuilder-dist --login --save-after-loginuntuk mengubah sedikit lingkungan build karena, misalnya, saya memerlukan paket khusus dan entri sources.list-nya tidak ada secara default. Jadi sepertinya masuk akal untuk dapat mengubah lingkungan chroot.
Alexis Wilke
maaf karena mengkritik kritik Anda, tetapi - "vonis: sedikit keunggulan untuk pbuild, lebih sedikit karakter untuk diketik adalah lebih sedikit karakter" - ini adalah argumen yang sangat konyol, tidak terlalu serius. Mengetik 5 karakter lebih sedikit bukan faktor ketika kita membandingkan sistem SW, jelas ada perbedaan yang jauh lebih penting.
Tele