Навіщо використовувати sbuild над pbuilder?


21

Існує чимало способів побудови пакунків Debian у чистому та відтворюваному середовищі. Два найпоширеніших - це будівельники та будівельники. Особисто я завжди користувався pbuilder. Я вважаю pbuilder набагато простішим у використанні та обслуговуванні. Мені не вдалося знайти жодного зі сторони порівняння цих двох. Що я пропускаю?

Які переваги є у використанні sbuild над pbuilder?

Відповіді:


27

Програми sbuild і pbuilder протягом багатьох років розвивались майже однаковою функціональністю, і оскільки функції додаються до будь-якого, вони, як правило, швидко приймаються іншими.

Оскільки упаковка Debian - це формат, орієнтований на політику, це важлива допомога у визначенні того, чи є дана проблема збірки помилкою у впровадженні конструктора чи проблема з тим, що пакет будується, щоб мати кілька реалізацій системи збирання. Для того, щоб підтримувати це, у всіх провідних системах побудови повинні бути сильні партизани, які їх підтримують, в дусі спільної конкуренції за те, щоб ми мали найправильніші доступні втілення політики.

Внутрішня механіка sbuild і pbuilder істотно відрізняється, тому точно, які пакети витягуються для задоволення будівельних залежностей або як вони витягуються, точний механізм, за допомогою якого різні цілі в debian / правила називаються і т.д., може відрізнятися, викликаючи незначні відмінності в поведінці в дуже конкретних випадках для певних пакетів. Більшу частину часу це представляє помилку в тій чи іншій реалізації, а іноді відображає недостатню чіткість в політиці упаковки: у будь-якому випадку зміни поведінки повинні бути вирішені.

Офіційні збірки як в Debian, так і в Ubuntu використовують sbuild (хоча часто це не архіви, доступні в архівах), що вважається перевагою деяких розробників, оскільки вони мають більшу впевненість у тому, що їх конфігурація відповідає тій, якій буде виставлено їхній пакет, коли він буде створений, хоча якщо всі це роблять, ми втрачаємо здатність відрізняти помилки в політиці від помилок в sbuild.

Історично моє розуміння полягає в тому, що розробка pbuilder спочатку була зосереджена на потребах розробника, оскільки кінцевий користувач та розробка sbuild спочатку орієнтувались на потреби адміністраторів збирання та архіву. Останнім часом ці фокуси змінилися, оскільки люди створили системи управління архівами на основі pbuilder та більш корисні інструменти для розробників за допомогою sbuild.

Обидва інструменти (або їх загальнодоступні близькі похідні) підтримують зберігання хротів як тарболиків, розпакованих у системі, в окремих томах (з доступними гачками для спеціального монтажу: наприклад, знімки LVM), використовуючи файлові системи накладання, використовуючи семантику копіювання під час запису тощо Обидва інструменти пропонують тривіальні інструменти командного рядка для впорядкування загального випадку (тестова збірка пакета) та багату семантику гака для підтримки складних випадків (великих архівів). Обидва забезпечують засіб для створення тестового середовища в chroot. Коротше кажучи, обидва інструменти пропонують майже все, що ви могли б вважати, що хотіли в інструменті створення пакетів (і обидва мають активні верхівки з радістю приймати помилки та виправлення).

Підсумовуючи це: якщо ви задоволені pbuilder, продовжуйте використовувати його. Якщо ви хочете пограти з sbuild, не соромтеся. Найкращий інструмент - це той, який вам зручно використовувати для роботи, яку ви робите.


Цікаво, що ви говорите sbuild, що використовується для створення пакетів Ubuntu, навіть незважаючи на те, що запуск (з того, що я розумію) працює pbuilder...
Alexis Wilke

19

Завжди небезпечно не погоджуватися з Емметом, тому дозвольте почати з визнання, що його відповідь, ймовірно, більш правильна. Однак я особисто вважаю pbuilder більш зручним у користуванні та ефективнішим.

Якщо ви перебуваєте на Ubuntu 12.10 або пізнішої версії, не забудьте встановити відмінні сценарії pbuilder, які є набором надзвичайно доброзичливих обгортків навколо сирого pbuilder.

Якщо ви перебуваєте на Ubuntu 12.04, ви можете встановити сценарії pbuilder із сховища резервних списків.

Тепер порівняємо та порівняємо зручність користування аналогічних операцій. У цих прикладах я пройдуся за допомогою chroot ARM, розміщеного на x86, але поняття все ще застосовуються до x86 chroot, розміщеного на x86. Пам'ятайте, я використовую обгортки сценаріїв pbuilder.

Варто зазначити одне, що сценарії pbuilder реалізують трохи умовності, подібно до того, як Ruby on Rails приймає певні рішення для вас, щоб ви могли швидко піти. Я спробую вказати на це, коли ми йдемо.

Створіть chroot

mk-sbuild --arch=armhf quantal

проти

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

вердикт: прив'язати , обидва командні рядки досить прості, і обидва можуть взяти додаткові варіанти для випадкових випадків використання, якщо це потрібно. Однак зверніть увагу на додатковий новий каталог, створений pcreate.

Завантажте вихідний пакет

# 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

вердикт: незначна грань для sbuild , оскільки ви використовуєте стандартні найкращі практики debian / ubuntu. Конвенція, яку використовує pget, може спочатку здатися дивною, але оскільки я працюю над декількома пакетами в декількох випусках Ubuntu, мені подобається організація, яку вона нав'язує. Зауважте також, що джерело apt-get також витягує джерело, де б ви не виконували команду, залишаючи вам * .orig.tar.gz, * .debian.tar.gz, * .dsc та розширений каталог, який я особисто знаходжу бути безладним. Краса організації незабаром, обіцяю.

Введіть версію chroot, ефемер

schroot -c quantal-armhf

vs.

ptest quantal-armhf

вердикт: невеликий край для pbuild , менше символів для набору - менше символів. Зауважте, що в цій версії введення Chroot всі зміни, які ви внесите тут, втрачаються, коли ви виходите з chroot. Також зауважте, що в schroot ви залишаєтесь звичайним користувачем, тоді як з ptest ви будете chroot як root користувач.

Введіть chroot, збережіть версію змін

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

vs.

ptest quantal-armhf --save

Вердикт: незначна грань для pbuild , менша кількість символів та інтуїтивніші аргументи командного рядка, на мою думку. У цій версії введення chroot будь-які внесені в них зміни будуть збережені для майбутніх викликів.

Створіть пакет в межах 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

вердикт: pbuild , зараз ми бачимо першу значну виграш при використанні конвенцій pbuild. Це мертва проста команда, що нічого більше не потрібно пам’ятати, а саме із зазначенням архітектури, назви chroot та вимагає шляху до файлу * .dsc, який вимагає побудова. Крім того, ви повинні пам'ятати, щоб створити новий * .dsc файл з sbuild, тоді як pbuild зробить це автоматично для вас.

Зробіть той же пакет у chroot, вдруге

У наведеному вище прикладі і sbuild, і pbuild завантажують та встановлюють збірники у відповідних хроніках. Однак pbuild зберігає завантажені файли .deb у / var, тому якщо ви вдруге викликаєте pbuild, вам не доведеться знову завантажувати всі збірники (хоча вони все-таки повинні бути встановлені в chroot). sbuild не кешує файли .deb (принаймні, не за замовчуванням), а отже, ви повинні знову завантажити всі збірники, крім того, щоб чекати їх встановлення в chroot.

вирок: pbuild дальним пострілом. Кешування збірок-deps - це чудова настройка за замовчуванням, і pbuild досить розумний, щоб виявити, чи є в архіві новіша версія збірки-деп, і при необхідності зніме нову версію. Для складного пакету з багатьма складами, ця проста настройка врятує вам хвилини вашого життя.

Підсумок

Я не знаю, що сценарії pbuilder є набагато привітнішими та швидшими, ніж еквіваленти sbuild. Звичайно, є способи зробити pbuilder ще швидшим (побудувати в tmpfs, відключити деякі гачки chroot), і, мабуть, є такі ж хитрощі для sbuild, але я про них не знаю.

Сподіваюсь, це допомагає.


pget виглядає жахливо схожим на 'pull-lp-source' з пакета ubuntu-dev-tools. apt-get source - це те, що я в основному ніколи не використовую для distro dev. Він орієнтований на користувачів, тому вони можуть сказати "дайте мені джерело цього пакету", а не розробникам.
SpamapS

1
Errr .. uhh ... sbuild в пакувальному каталозі робить те саме, що і pbuild. Вибачте, але -1 за це. Виправте та вирішіть це, і я
видалю

Крім того, випадок використання "змінити щось у chroot та зберегти його" є хибним. Це погана ідея, оскільки вона змінює ваш чистий chroot на відмінний від чистий chroot. Його майже ніколи не радили.
SpamapS

@SpamapS, я фактично використовую параметр pbuilder-dist --login --save-after-loginдля того, щоб коли-небудь трохи налаштувати середовище збирання, тому що, наприклад, мені потрібен спеціальний пакет, а запис його Source.list за замовчуванням не існує. Тому, здається, є сенс мати можливість налаштувати середовище chroot.
Алексіс Вілке

вибачте за те, що ви критикуєте, але - "вирок: незначна грань для pbuild, менша кількість символів набирає менше символів" - це дуже дурний аргумент, не дуже серйозний. Введення 5 менших символів не є фактором, коли ми порівнюємо системи SW, очевидно, є набагато важливіші відмінності.
Теле
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.