Warum sbuild over pbuilder verwenden?

21

Es gibt zahlreiche Möglichkeiten, Debian-Pakete in einer sauberen und reproduzierbaren Umgebung zu erstellen. Zwei der am häufigsten verwendeten sind pbuilder und sbuild. Persönlich habe ich immer pbuilder verwendet. Ich finde pbuilder viel einfacher zu bedienen und zu warten. Ich habe keinen Vergleich der beiden nebeneinander finden können. Was verpasse ich?

Welche Vorteile bietet die Verwendung von sbuild gegenüber pbuilder?

undetwas
quelle

Antworten:

27

sbuild und pbuilder haben sich im Laufe der Jahre zu nahezu identischen Funktionen entwickelt, und wenn Funktionen hinzugefügt werden, werden sie in der Regel schnell von den anderen übernommen.

Da das Debian-Paket ein richtliniengesteuertes Format ist, ist es eine wichtige Hilfe bei der Feststellung, ob ein bestimmtes Build-Problem ein Fehler in der Implementierung des Builders oder ein Problem mit dem Paket ist, das für mehrere Implementierungen eines Build-Systems erstellt wird. Um dies aufrechtzuerhalten, müssen die führenden Build-Systeme alle von starken Partisanen unterstützt werden, und zwar im Sinne eines kollaborativen Wettbewerbs, um sicherzustellen, dass wir die korrektesten verfügbaren Implementierungen von Richtlinien haben.

Die internen Mechanismen von sbuild und pbuilder unterscheiden sich erheblich, so dass genau die Pakete gezogen werden, um Build-Abhängigkeiten zu erfüllen, oder wie sie gezogen werden, der genaue Mechanismus, durch den die verschiedenen Ziele in debian / rules aufgerufen werden, usw., was einige geringfügige Unterschiede verursachen kann Unterschiede im Verhalten in ganz bestimmten Fällen für bestimmte Pakete. In den meisten Fällen handelt es sich dabei um einen Fehler in der einen oder anderen Implementierung, der manchmal auf mangelnde Klarheit in der Verpackungsrichtlinie zurückzuführen ist. In jedem Fall sollten Verhaltensänderungen behoben werden.

Offizielle Builds sowohl in Debian als auch in Ubuntu verwenden sbuild (obwohl oft nicht das in den Archiven verfügbare sbuild), was von einigen Entwicklern als Vorteil angesehen wird, da sie sicherer sind, dass ihre Konfiguration mit der übereinstimmt, der ihr Paket beim Erstellen ausgesetzt sein wird. Wenn jedoch jeder dies tut, verlieren wir die Fähigkeit, Bugs in Policy von Bugs in Sbuild zu unterscheiden.

Historisch gesehen ist mein Verständnis, dass sich die Pbuilder-Entwicklung anfangs auf die Bedürfnisse des Entwicklers als Endbenutzer und die Sbuild-Entwicklung anfangs auf die Bedürfnisse der Build- und Archivadministratoren konzentrierte. In letzter Zeit haben sich diese Schwerpunkte geändert, da die Leute Archivverwaltungssysteme auf der Basis von pbuilder und hilfreichere Entwicklertools mit sbuild erstellt haben.

Beide Tools (oder ihre allgemein verfügbaren Close - Derivate) unterstützen das Speichern von Chroots als Tarballs, die auf dem System entpackt sind, in separaten Volumes (mit verfügbaren Hooks für die spezielle Bereitstellung: z. B. LVM - Snapshots), mithilfe von Overlay - Dateisystemen, mithilfe von Copy - on - Write - Semantik usw Beide Tools bieten einfache Befehlszeilen-Tools zur Optimierung des allgemeinen Falls (Test-Build eines Pakets) und umfangreiche Hook-Semantik zur Unterstützung komplexer Fälle (große Archive). Beide bieten die Möglichkeit, eine Testumgebung in einer Chroot zu erstellen. Kurz gesagt, beide Tools bieten nahezu alles, was Sie für ein Tool zur Paketerstellung halten (und beide haben aktive Upstreams, die gerne Fehler und Patches akzeptieren).

Fazit: Wenn Sie mit pbuilder zufrieden sind, verwenden Sie es weiter. Wenn Sie mit sbuild spielen möchten, fühlen Sie sich frei. Das beste Werkzeug ist dasjenige, mit dem Sie für die Art von Arbeit, die Sie ausführen, vertraut sind.

Emmet Hikory
quelle
Interessant, dass Sie sagen, sbuildwird verwendet, um die Pakete von Ubuntu zu erstellen, obwohl Launchpad (soweit ich weiß) ausgeführt wird pbuilder...
Alexis Wilke
19

Es ist immer gefährlich, mit Emmet nicht einverstanden zu sein. Lassen Sie mich zunächst anerkennen, dass seine Antwort wahrscheinlich korrekter ist. Ich persönlich finde pbuilder jedoch benutzerfreundlicher und leistungsfähiger.

Wenn Sie mit Ubuntu 12.10 oder neuer arbeiten, müssen Sie die hervorragenden pbuilder-Skripte installieren, die eine Reihe äußerst benutzerfreundlicher Wrapper für raw pbuilder darstellen.

Wenn Sie mit Ubuntu 12.04 arbeiten, können Sie die pbuilder-Skripte aus dem Backports-Repository installieren.

Vergleichen und kontrastieren wir nun die Benutzerfreundlichkeit gleichwertiger Operationen. In diesen Beispielen werde ich eine auf x86 gehostete ARM-Chroot verwenden, die Konzepte gelten jedoch auch für eine auf x86 gehostete x86-Chroot. Denken Sie daran, ich verwende die pbuilder-scripts-Wrapper.

Zu beachten ist, dass die pbuilder-Skripte eine gewisse Konvention implementieren, ähnlich wie Ruby on Rails einige Entscheidungen für Sie trifft, damit Sie schnell loslegen können. Ich werde versuchen, darauf hinzuweisen, wenn wir gehen.

Erstellen Sie eine 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

Fazit: Unentschieden , beide Befehlszeilen sind ziemlich einfach und beide können bei Bedarf zusätzliche Optionen für anspruchsvollere Anwendungsfälle verwenden. Beachten Sie jedoch das zusätzliche neue Verzeichnis, das von pcreate erstellt wurde.

Laden Sie ein Quellpaket herunter

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

gegen

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

fazit : leichter rand für sbuild , weil du standard debian / ubuntu best practice verwendest. Die von pget verwendete Konvention mag auf den ersten Blick seltsam erscheinen, aber da ich an mehreren Paketen in mehreren Ubuntu-Versionen arbeite, mag ich die Organisation, die sie auferlegt. Beachten Sie auch, dass apt-get source den Quellcode an jedem Ort extrahiert, an dem Sie den Befehl ausführen. Dabei verbleiben die Dateien * .orig.tar.gz, * .debian.tar.gz, * .dsc und das erweiterte Verzeichnis, das ich persönlich finde unordentlich sein. Die Schönheit der Organisation kommt bald, das verspreche ich.

Geben Sie die Chroot, vergängliche Version

schroot -c quantal-armhf

gegen

ptest quantal-armhf

Urteil: Leichte Kante für pbuild , weniger zu tippende Zeichen sind weniger Zeichen. Beachten Sie, dass in dieser Version des Eintritts in die Chroot alle Änderungen, die Sie hier vornehmen, verloren gehen, sobald Sie die Chroot verlassen. Beachten Sie auch, dass Sie in schroot ein normaler Benutzer bleiben, während Sie in ptest als Root-Benutzer in der chroot sind.

Geben Sie die Chroot ein, speichern Sie die geänderte Version

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

gegen

ptest quantal-armhf --save

fazit : meiner meinung nach leichter rand für pbuild , weniger zeichen und intuitivere befehlszeilenargumente . In dieser Version von chroot werden alle darin vorgenommenen Änderungen für zukünftige Aufrufe gespeichert.

Erstellen Sie ein Paket in der Chroot

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

gegen

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

Urteil: pbuild , jetzt sehen wir den ersten signifikanten Gewinn, wenn wir die Konventionen von pbuild verwenden. Dies ist ein ganz einfacher Befehl, an den man sich nichts anderes merken muss, als die Architektur und den Namen von chroot anzugeben und einen Pfad zu einer * .dsc-Datei anzugeben, die sbuild benötigt. Darüber hinaus müssen Sie daran denken, mit sbuild eine neue * .dsc-Datei zu generieren, wohingegen pbuild dies automatisch für Sie erledigt.

Erstellen Sie dasselbe Paket ein zweites Mal in chroot

Im obigen Beispiel werden sowohl sbuild als auch pbuild die Build-Deps herunterladen und in ihren jeweiligen Chroots installieren. Pbuild speichert jedoch die heruntergeladenen .deb-Dateien in / var. Wenn Sie also pbuild ein zweites Mal aufrufen, müssen Sie nicht alle build-deps erneut herunterladen (obwohl sie noch in der chroot installiert sein müssen). sbuild speichert die .deb-Dateien nicht im Cache (zumindest nicht standardmäßig). Daher müssen Sie alle build-deps erneut herunterladen und darauf warten, dass sie in der chroot installiert werden.

Fazit : Bei weitem nicht . Das Cachen der Build-Deps ist eine großartige Standardeinstellung, und pbuild ist intelligent genug, um zu erkennen, ob es eine neuere Version einer Build-Dep im Archiv gibt, und wird die neue Version bei Bedarf herunterladen. Bei einem komplexen Paket mit vielen Build-Deps erspart Ihnen diese einfache Einstellung Minuten Ihres Lebens.

Zusammenfassung

Ich finde, dass pbuilder-Skripte viel benutzerfreundlicher und schneller sind als die sbuild-Entsprechungen. Natürlich gibt es Möglichkeiten, pbuilder noch schneller zu machen (tmpfs einbauen, einige der chroot-Hooks deaktivieren), und es gibt wahrscheinlich auch die gleichen Tricks für sbuild, aber ich kenne sie nicht.

Hoffe das hilft.

Achiang
quelle
pget sieht 'pull-lp-source' aus dem Paket ubuntu-dev-tools furchtbar ähnlich. apt-get source benutze ich grundsätzlich nie für Distributionsentwickler. Es richtet sich an Benutzer, also können sie sagen "Gib mir die Quelle dieses Pakets", nicht an Entwickler.
SpamapS
1
Errr .. uhh ... sbuild in einem Paketverzeichnis macht genau dasselbe wie pbuild. Sorry, aber -1 dafür. Bitte korrigieren und beheben Sie dies, und ich werde meine -1
SpamapS
Auch der Anwendungsfall "Ändere etwas in der Chroot und lass es bestehen" ist irreführend. Dies ist eine schlechte Idee, da Ihre saubere Chroot sich von der gebauten sauberen Chroot unterscheidet. Es wird fast nie empfohlen.
SpamapS
@SpamapS, ich benutze das eigentlich pbuilder-dist --login --save-after-login, um die Build-Umgebung schon mal geringfügig zu optimieren, da ich zum Beispiel ein spezielles Paket benötige und dessen source.list-Eintrag standardmäßig nicht existiert. Es scheint also sinnvoll zu sein, die Chroot-Umgebung zu optimieren.
Alexis Wilke
Es tut mir leid, dass Sie Ihre Kritik kritisiert haben, aber - "Urteil: Leichte Kante für pbuild, weniger zu tippende Zeichen sind weniger Zeichen" - dies ist ein sehr albernes Argument, nicht wirklich ernst. Die Eingabe von 5 Zeichen weniger spielt beim Vergleich von SW-Systemen keine Rolle, da offensichtlich viel wichtigere Unterschiede bestehen.
Tele