Neden sbuild'i geliştirici üzerinde kullanıyorsunuz?


21

Debian paketlerini temiz ve tekrarlanabilir bir ortamda oluşturmanın çok sayıda yolu vardır. En sık kullanılan ikisi, inşaatçı ve sbuild'dir. Şahsen ben her zaman inşaatçı kullandım. Kullanıcının kullanması ve bakımı çok daha kolay. İkisinin yan yana karşılaştırmasını hiçbir zaman bulamadım. Neyi özlüyorum?

Sbuild'i üreticiden daha fazla kullanmanın avantajları nelerdir?

Yanıtlar:


27

sbuild ve pbuilder yıllar içinde neredeyse aynı işlevselliğe sahip olacak şekilde gelişti ve özellikler de eklendiğinde, diğerleri tarafından hızlıca benimseme eğiliminde.

Debian ambalajı politikaya dayalı bir format olduğundan, belirli bir yapım sorununun inşaatçının uygulamasında bir hata mı yoksa bir inşaat sisteminin birden fazla uygulamasına sahip olmak için oluşturulan pakette bir sorun mu olduğunu belirlemek için önemli bir yardımcıdır. Bunu sürdürmek için, önde gelen yapım sistemlerinin hepsinin, politikaları en doğru şekilde uygulayabilmemizi sağlamaya yönelik işbirliğine dayalı bir rekabet ruhu içinde, kendilerini destekleyen güçlü partizanları olmalıdır.

Sbuild ve pbuilder'ın iç mekaniği önemli ölçüde farklıdır, bu nedenle kesin olarak hangi paketlerin yapı bağımlılıklarını sağlamak için çekildiği veya bunların nasıl çekildiği, debian / kurallardaki çeşitli hedeflerin çağrıldığı kesin mekanizma farklı olabilir ve bu durum biraz hafif olabilir. belirli paketler için çok özel durumlarda davranış farklılıkları. Bu, çoğu zaman bir uygulamada veya başka bir uygulamada bir hatayı temsil eder ve bazen paketleme politikasındaki açıklık eksikliğini yansıtır: Her durumda, davranış değişiklikleri çözülmelidir.

Hem Debian hem de Ubuntu’daki resmi yapımlar, bazı geliştiriciler tarafından bir avantaj olarak kabul edilen sbuild’i (genellikle arşivlerden elde edilen sbuild’ler olmasa da) kullanmaktadır. Buna rağmen, eğer herkes bunu yaparsa, politikadaki böcekleri sbuild'deki böceklerden ayırt etme yeteneğimizi kaybederiz.

Tarihsel olarak, benim anlayışım, inşaat geliştiricinin başlangıçta geliştiricinin son kullanıcı olarak ihtiyaçlarına ve inşaat geliştiriciliğinin başlangıçta inşa ve arşiv yöneticilerinin ihtiyaçlarına odaklanmış olmasıdır. Son zamanlarda, insanlar odaklanmakta olan arşiv yönetim sistemleri ve sbuild'i kullanan daha yararlı geliştirici araçları kurduklarından, bu odaklar değişti.

Her iki araç (veya yaygın olarak bulunan yakın türevleri), kökleri, sistemde paketlenmiş, ayrı hacimlerde (özel montaj için mevcut kancalarla: örn. LVM anlık görüntüleri), üzerine bindirilmiş dosya sistemlerini kullanarak, üzerine yazılan semantikleri kullanarak, vb. Her iki araç da, ortak durumu kolaylaştırmak için (bir paketi test etme) ve karmaşık vakaları (büyük arşivler) desteklemek için zengin kanca anlambilimi için önemsiz komut satırı araçları sunar. Her ikisi de bir chroot içinde bir test ortamı oluşturmak için bir araç sağlar. Kısacası, her iki araç da bir paket oluşturma aracında isteyebileceğiniz her şeyi sağlar (ve her ikisinde de böcek ve yamaları kabul etmekten mutluluk duyan aktif akışlar vardır).

Özetle: eğer inşaatçıdan memnunsanız, kullanmaya devam edin. Eğer sbuild ile oynamak istiyorsanız çekinmeyin. En iyi araç, yaptığınız iş için rahat kullandığınız araç.


sbuildSöylediğin ilginç şey , fırlatma rampası (anladığım kadarıyla) çalışsa bile Ubuntu paketlerini oluşturmak için kullanılıyor pbuilder...
Alexis Wilke

19

Emmet'e katılmamak her zaman tehlikelidir, bu yüzden cevabının muhtemelen daha doğru olduğunu kabul ederek başlamama izin verin. Ancak, şahsen ben daha çok kullanıcı dostu ve kutudan daha iyi performans gösteren bir inşaatçı buluyorum.

Eğer Ubuntu 12.10 veya daha yenisindeyseniz, ham yapıcının etrafına son derece dostça sarmalayıcılar koyan mükemmel pbuilder-scriptlerini kurduğunuzdan emin olun .

Ubuntu 12.04 kullanıyorsanız, pbuilder-scripts'i backports deposundan yükleyebilirsiniz.

Şimdi, eşdeğer işlemlerin kullanıcı dostu olduğunu karşılaştıralım ve karşılaştıralım. Bu örneklerde, x86'da barındırılan bir ARM chroot kullanarak yürüyeceğim, ancak kavramlar hala x86'da barındırılan bir x86 chroot için de geçerli. Unutma, ben el yapımı senaryo sarmalayıcılarını kullanıyorum.

Unutulmaması gereken bir şey, yapımcı komut dosyalarının Ruby on Rails'in sizin için nasıl bazı kararlar vermesiyle aynı şekilde hızlı bir şekilde ilerleyebilmesi gibi bir kongre düzenlemesidir. Bunları ilerledikçe göstermeye çalışacağım.

Bir chroot oluştur

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

Karar ver: kravat , her iki komut satırı oldukça basittir ve her ikisi de gerekirse meraklısı kullanım durumları için ekstra seçenekler alabilir. Ancak, pcreate tarafından oluşturulan ek yeni dizini not edin.

Kaynak paket indir

# 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

Karar: sbuild için hafif bir kenar çünkü standart debian / ubuntu en iyi yöntemini kullanıyorsunuz. Pget tarafından kullanılan konvansiyon ilk başta garip görünebilir, ancak Ubuntu'nun birden fazla sürümünde birden fazla paket üzerinde çalıştığım için dayattığı organizasyonu seviyorum. Ayrıca apt-get kaynağının, komutu çalıştırdığınız her yerde kaynağı ayıkladığını ve sizi şahsen bulduğum * .orig.tar.gz, * .debian.tar.gz, * .dsc ve genişletilmiş dizini bıraktığını unutmayın. dağınık ol. Organizasyonun güzelliği yakında gelecek, söz veriyorum.

Chroot, geçici sürümünü girin

schroot -c quantal-armhf

vs.

ptest quantal-armhf

karar: pbuild için hafif kenar , daha az karakter yazmak için daha az karakterdir. Chroot'a girmenin bu sürümünde, chroot'tan çıktıktan sonra burada yaptığınız değişikliklerin kaybolacağını unutmayın. Ayrıca, schroot'ta normal bir kullanıcı kalacağınızı, ptest ile kök kullanıcı olarak chrootta olacağınızı unutmayın.

Chroot'a girin, değişiklikleri kaydedin

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

vs.

ptest quantal-armhf --save

Karar: bence pbuild için hafif bir kenar , daha az karakter ve daha sezgisel komut satırı argümanları. Chroot'a girmenin bu versiyonunda, yapacağınız değişiklikler gelecekteki çağrılar için kaydedilecektir.

Chroot içinde bir paket oluşturun

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

Karar: pbuild , şimdi pbuild'in sözleşmelerini kullanırken ilk önemli kazancı görüyoruz. Bu, mimariyi belirtmek yerine, chroot adını belirtmek ve sbuild'in gerektirdiği bir * .dsc dosyasına giden bir yolu gerektiren, hatırlanması gereken başka bir şey olmayan basit bir komuttur. Ek olarak, sbuild ile yeni bir * .dsc dosyası oluşturmayı unutmamalısınız, pbuild bunu sizin için otomatik olarak yapacak.

Aynı paketi chroot'ta oluşturun, ikinci kez

Yukarıdaki örnekte, hem sbuild hem de pbuild, build-dep'leri kendi chroot'larına indirecek ve yükleyecek. Ancak, pbuild , indirilen .deb dosyalarını / var dizinine kaydeder , bu yüzden pbuild'i ikinci kez çağırırsanız, tüm derlemeleri indirmeniz gerekmez (yine de chroot'a yüklenmeleri gerekir). sbuild .deb dosyalarını önbelleğe almaz (en azından varsayılan olarak) ve bu nedenle chroot'a yüklenmelerini beklemenin yanı sıra tüm derlemeleri indirmelisiniz.

Karar: Uzun bir atışla pbuild . Derleme-önbellekleri önbelleğe almak harika bir varsayılan ayardır ve pbuild, arşivde derleme-deponun daha yeni bir sürümü olup olmadığını tespit etmek için yeterince akıllıdır ve gerekirse yeni sürümü indirecektir. Birçok yapı içeren karmaşık bir paket için, bu basit ayar size hayatınızdan birkaç dakika kazandırır.

özet

Kutudan çıktığımda, pbuilder-scriptlerinin sbuild eşdeğerlerinden çok daha dostça ve hızlı olduğunu düşünüyorum. Elbette, inşaatçıyı daha da hızlı hale getirmenin yolları var (bir tmpfs içinde inşa etmek, bazı chroot kancalarını devre dışı bırakmak için) ve muhtemelen sbuild için de aynı püf noktaları var, ama ben onlardan habersizim.

Bu yardımcı olur umarım.


pget, ubuntu-dev-tools paketindeki 'pull-lp-source' ile oldukça benzer görünüyor. apt-get source, dağıtım için hiç kullanmadığım bir şey. Kullanıcılara yöneliktir, bu nedenle geliştiricilere değil, "bana bu paketin kaynağını ver" diyebilirler.
SpamapS

1
Errr .. uhh ... sbuild, bir paketleme dizininde, pbuild ile aynı şeyi yapar. Üzgünüz, bunun için -1. Lütfen düzeltin ve adresleyin; -1
SpamapS

Ayrıca, "chroot'taki bir şeyi değiştir ve sürmesini sağla" kullanım durumu yanıltıcıdır. Bu, kötü chroot'unuzdan farklı olacak şekilde temiz chroot'unuzu değiştirdiğinden kötü bir fikirdir. Neredeyse asla tavsiye edilmez.
SpamapS

@SpamapS, aslında pbuilder-dist --login --save-after-loginyapı ortamını hafifçe değiştirmek için kullanıyorum çünkü örneğin, özel bir pakete ihtiyacım var ve sources.list girişi varsayılan olarak mevcut değil. Böylece chroot ortamını ince ayarlayabilmeniz mantıklı geliyor.
Alexis Wilke,

eleştirinizi eleştirdiğiniz için özür dilerim, ancak - "karar ver: pbuild için hafif bir kenar, daha az karakter yazmak için daha az karakter" - bu çok saçma bir tartışma, gerçekten ciddi değil. SW sistemlerini karşılaştırdığımızda 5 daha az karakter yazmak bir faktör değil, tabii ki çok daha önemli farklılıklar var.
Tele
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.