web-dev-qa-db-fra.com

Pourquoi utiliser sbuild over pbuilder?

Il existe de nombreuses façons de construire des paquets Debian dans un environnement propre et reproductible. Pbuilder et sbuild sont les deux logiciels les plus utilisés. Personnellement, j'ai toujours utilisé pbuilder. Je trouve pbuilder beaucoup plus facile à utiliser et à entretenir. Je n'ai pas été en mesure de comparer côte à côte les deux. Qu'est-ce qui me manque?

Quels avantages y at-il à utiliser sbuild par rapport à pbuilder?

21
andrewsomething

sbuild et pbuilder se sont développés au fil des ans pour offrir des fonctionnalités presque identiques, et à mesure que des fonctionnalités sont ajoutées à l'une ou l'autre, elles ont tendance à être rapidement adoptées par l'autre.

Le packaging de Debian étant un format basé sur des règles, il constitue une aide importante pour déterminer si un problème de construction donné est un bogue dans la mise en œuvre du générateur ou un problème lié au paquet en cours de création, qui impliquerait plusieurs implémentations d'un système de construction. Afin de maintenir cela, les principaux systèmes de construction doivent tous être soutenus par des partisans puissants, dans un esprit de concurrence collaborative afin de garantir la mise en œuvre la plus correcte possible de la politique.

Les mécanismes internes de sbuild et de pbuilder diffèrent considérablement, de sorte que les paquets tirés pour satisfaire les dépendances de construction ou comment ils sont tirés, le mécanisme précis utilisé pour appeler les différentes cibles dans debian/rules, etc. des différences de comportement dans des cas très spécifiques pour certains packages. La plupart du temps, cela représente un bogue dans l'une ou l'autre implémentation, et reflète parfois un manque de clarté dans la politique de packaging: dans tous les cas, les changements de comportement doivent être résolus.

Les builds officiels dans Debian et Ubuntu utilisent sbuild (bien que souvent pas le sbuild disponible dans les archives), ce qui est considéré comme un avantage par certains développeurs, car ils sont plus certains que leur configuration correspond à celle à laquelle leur paquet sera exposé une fois construit, bien que si tout le monde le fait, nous perdons la possibilité de distinguer les bogues dans les règles des bogues dans sbuild.

Ma compréhension a toujours été que le développement de pbuilder était initialement axé sur les besoins du développeur en tant qu'utilisateur final, tandis que le développement de sbuild visait d'abord les besoins des administrateurs de buildd et d'archivage. Récemment, ces priorités ont changé, les utilisateurs ayant construit des systèmes de gestion des archives basés sur pbuilder et des outils de développement plus utiles utilisant sbuild.

Les deux outils (ou leurs dérivés proches couramment disponibles) prennent en charge le stockage des chroots sous forme d'arbalètes, décompactés sur le système, dans des volumes séparés (avec des crochets disponibles pour un montage spécial: par exemple, instantanés LVM), en utilisant des systèmes de fichiers superposés, en utilisant une sémantique de copie sur écriture, etc. Les deux outils offrent des outils de ligne de commande triviaux pour rationaliser le cas courant (test-construire un paquet) et une sémantique de points d'ancrage complexes pour prendre en charge les cas complexes (archives de grande taille). Les deux permettent de créer un environnement de test dans un chroot. En bref, les deux outils fournissent à peu près tout ce que vous pourriez penser de vouloir dans un outil de construction de paquet (et les deux ont un potentiel actif en amont pour accepter les bogues et les correctifs).

En résumé: si vous êtes satisfait de pbuilder, continuez de l’utiliser. Si vous voulez jouer avec sbuild, n'hésitez pas. Le meilleur outil est celui que vous êtes à l'aise d'utiliser pour le type de travail que vous effectuez.

27
Emmet Hikory

Il est toujours dangereux de ne pas être d'accord avec Emmet, alors laissez-moi commencer par reconnaître que sa réponse est probablement plus correcte. Cependant, je trouve personnellement que pbuilder est plus convivial et plus performant en sortie de boîte.

Si vous utilisez Ubuntu 12.10 ou une version ultérieure, veillez à installer les excellents scripts pbuilder, qui constituent un ensemble de extrêmement des wrappers conviviaux autour de pbuilder brut.

Si vous êtes sur Ubuntu 12.04, vous pouvez installer les scripts pbuilder à partir du référentiel de backports.

Comparons maintenant la convivialité d’opérations équivalentes. Dans ces exemples, je vais utiliser un chroot ARM hébergé sur x86, mais les concepts s'appliquent toujours à un chroot x86 hébergé sur x86 également. N'oubliez pas que j'utilise les wrappers de scripts pbuilder.

Une chose à noter est que les scripts pbuilder implémentent un peu de convention, similaire à la façon dont Ruby sur Rails prend des décisions pour vous afin que vous puissiez aller rapidement. Je vais essayer de les signaler au fur et à mesure.

Créer un chroot

mk-sbuild --Arch=armhf quantal

contre

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

verdict: tie , les deux lignes de commande sont assez simples, et les deux peuvent prendre des options supplémentaires pour des cas d'utilisation plus sophistiqués si nécessaire. Cependant, notez le nouveau répertoire supplémentaire créé par pcreate.

Télécharger un paquet source

# 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

verdict: léger Edge pour sbuild , car vous utilisez les meilleures pratiques standard de debian/ubuntu. La convention utilisée par pget peut sembler étrange au début, mais comme je travaille sur plusieurs paquets de plusieurs versions d’Ubuntu, j’aime l’organisation qu’il impose. Notez également qu'apt-get source extrait également la source partout où vous exécutez la commande, vous laissant ainsi les fichiers * .orig.tar.gz, * .debian.tar.gz, * .dsc et le répertoire développé, que je trouve personnellement être en désordre. La beauté de l'organisation arrive bientôt, je le promets.

Entrez le chroot, version éphémère

schroot -c quantal-armhf

vs.

ptest quantal-armhf

verdict: léger Edge pour pbuild , moins de caractères à taper est moins de caractères. Notez que dans cette version d’entrée dans le chroot, toutes les modifications que vous apportez ici seront perdues une fois que vous aurez quitté le chroot. Notez également que dans schroot, vous resterez un utilisateur normal alors qu'avec ptest, vous serez dans le chroot en tant qu'utilisateur root.

Entrez le chroot, enregistrez les modifications version

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

vs.

ptest quantal-armhf --save

verdict: léger Edge pour pbuild , moins de caractères et des arguments de ligne de commande plus intuitifs, à mon avis. Dans cette version de l’entrée dans le chroot, toutes les modifications que vous y apporterez seront sauvegardées pour les invocations futures.

Construire un paquet dans le 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

verdict: pbuild , nous voyons maintenant le premier gain significatif en utilisant les conventions de pbuild. Il s'agit d'une simple commande morte dont vous ne devez vous souvenir que par opposition à la spécification de l'architecture, du nom de chroot et nécessitant un chemin d'accès à un fichier * .dsc requis par sbuild. De plus, vous devez vous rappeler de générer un nouveau fichier * .dsc avec sbuild alors que pbuild le fera automatiquement pour vous.

Construit le même paquet dans chroot, une seconde fois

Dans l'exemple ci-dessus, sbuild et pbuild téléchargeront et installeront les build-deps dans leurs chroots respectifs. Cependant, pbuild enregistre les fichiers .deb téléchargés dans/var. Ainsi, si vous appelez pbuild une seconde fois, vous n'avez pas à télécharger tous les fichiers de compilation. deps encore (bien qu'ils doivent toujours être installés dans le chroot). sbuild ne met pas en cache les fichiers .deb (du moins pas par défaut) et vous devez donc télécharger à nouveau tous les build-deps en plus d'attendre qu'ils soient installés dans le chroot.

verdict: pbuild à long terme. La mise en cache des build-dep est un excellent paramètre par défaut, et pbuild est suffisamment intelligent pour détecter s’il existe une version plus récente d’un build-dep dans l’archive et extraira la nouvelle version si nécessaire. Pour un paquet complexe avec de nombreux build-deps, ce paramètre simple vous fera économiser quelques minutes de votre vie.

Résumé

Hors de la boîte, je trouve que les scripts pbuilder sont beaucoup plus conviviaux et plus rapides que les équivalents sbuild. Bien sûr, il y a moyen de rendre pbuilder encore plus rapide (construire un tmpfs, désactiver certains des hooks de chroot), et il y a probablement les mêmes astuces pour sbuild aussi, mais je ne les connais pas.

J'espère que cela t'aides.

19
achiang