Сборки Debian Набор инструменты представляет собой набор программных утилит , используемый для создания Debian исходных пакетов ( .dsc
) и Debian бинарных пакетов ( .deb
файлы) от вверх по течению источника тарболлов .
Эти инструменты используются в проекте Debian, а также в дистрибутивах на основе Debian, таких как Ubuntu .
Обзор
Исходный код бесплатного программного обеспечения обычно распространяется в сжатых архивах tar, называемых tarballs. Debian - это двоично-ориентированный дистрибутив, что означает, что его deb
пакеты включают предварительно скомпилированные двоичные файлы и файлы данных, организованные в иерархию файловой системы, которую ожидает программное обеспечение. Таким образом, инструментальная цепочка сборки Debian нуждается в инструкциях по использованию вышестоящей системы сборки для сборки правильных deb
пакетов.
Эти инструкции хранятся в debian
подкаталоге, который добавляется к дереву исходных текстов для программного обеспечения упакованной в пакет сопровождающего . Хотя можно собрать пакет непосредственно из измененного дерева исходных текстов, стандартной практикой является создание пакетов с исходным кодом , которые содержат изменения, внесенные сопровождающим в исходные тексты восходящего направления, в распространяемой форме.
Исходные пакеты
Типичный пакет исходного кода Debian состоит из трех файлов:
- Исходный tarball (
orig.tar
) - простая копия tarball исходного кода, если он имеетtar
формат и не требуется никаких изменений, или перепакованный tarball. Последнее может произойти, если он содержит снимок системы контроля версий, который никогда не выпускался в виде tarball, или если сопровождающему необходимо удалить файлы, несовместимые с Руководством по свободному программному обеспечению Debian . debian.tar
Файл, который содержит изменение к источнику вверх по течению , сделанного сопровождающим пакет. Сюда входит весьdebian
каталог. Любые измененные файлы вне этогоdebian/patches
каталога объединяются в файлы исправлений внутри каталога, которые автоматически применяются перед сборкой.dsc
Файл, который представляет собой текстовый файл с метаданными , например, имена всех файлов , составляющих пакет исходных кодов и их SHA256 контрольных сумм. Он также содержит подпись создателя пакета с исходным кодом.
Например, исходный пакет с именем исходной foo
версии 1.2.3 и Debian версии 4 может состоять из следующих файлов:
foo_1.2.3.orig.tar.gz
foo_1.2.3-4.debian.tar.gz
foo_1.2.3-4.dsc
Пакет с исходным кодом создается с помощью dpkg-buildpackage
инструмента или его оболочки debuild
. При вызове для создания пакета с исходным кодом dpkg-buildpackage
вызывает правила сопровождающего для очистки дерева исходных текстов от любых промежуточных файлов, выполняет различные проверки работоспособности и, наконец, подписывает dsc
файл с помощью ключа упаковщика с помощью debsign
утилиты.
Обратный процесс - создание распакованного дерева исходных текстов из пакета с исходным кодом - выполняется с помощью dpkg-source
утилиты, которая извлекает исходный тарбол в подкаталог, извлекает debian.tar
архив внутри него и применяет все имеющиеся исправления quilt . Это первый шаг, который делает система сборки при сборке двоичных пакетов из исходного пакета.
В старых исходных пакетах (с использованием исходного формата 1) .diff.gz
вместо файла debian.tar
. Это унифицированный файл сравнения , содержащий debian
каталог и любые изменения исходного кода, которые не управляются системой исправлений.
Каталог debian
Каталог debian содержит файлы, используемые dpkg-buildpackage
для создания как двоичных, так и исходных пакетов. В отличие от RPM , в котором spec
для инструкций используется один файл, инструменты Debian используют целый подкаталог с несколькими файлами. Три файла необходимы , как минимум , чтобы правильно построить пакет - changelog
, control
и rules
. Четвертый файл copyright
,, предусмотрен политикой Debian, но это требование закона, а не техническое.
По замыслу, все файлы в debian
каталоге представляют собой текстовые файлы, большинство из которых удобочитаемы и редактируются с помощью простого текстового редактора.
debian / журнал изменений
Этот файл содержит информацию обо всех версиях пакета с момента его создания. Инструменты сборки обрабатывают только верхнюю запись, которая используется для определения версии пакета, срочности (которая имеет отношение только к самому Debian) и ошибок в дистрибутиве, которые исправляет этот выпуск.
Например, для пакета с именем foo
пример debian/changelog
записи может выглядеть так:
foo (1.2.3-1) нестабильный; срочность = низкая * Новый апстрим-релиз. * Сбросил 02_manpage_hyphens.dpatch, исправил апстрим. * Добавлен 04_edit_button_crash.dpatch: исправлен сбой после нажатия кнопки редактирования. (Закрывает: # 654321) * debian / control: foo должен конфликтовать с libbar. (Закрывается: # 987654) - Джон Доупт, 30 ноября 2007 г., 15:29:42 +0100 @example.com>
Debian предоставляет две основные утилиты для работы с debian/changelog
файлом:
dch
используется для добавления новых записей в журнал изменений или изменения существующих.dpkg-parsechangelog
анализирует самую последнюю запись и извлекает из нее данные вKey: value
формате, аналогичномdebian/control
. В основном он используется в скриптах.
debian / control
Этот файл содержит информацию об исходном пакете и всех бинарных пакетах, которые он создает (их может быть несколько; например, исходный пакет libbar
может служить источником для бинарных пакетов libbar0
, который содержит только общую библиотеку, и libbar-dev
, который содержит статический версия библиотеки и заголовочные файлы).
В нем перечислены (среди прочего) такие вещи, как имя пакета, сопровождающий, целевые архитектуры (для бинарных пакетов), зависимости сборки (пакеты, которые должны быть установлены для успешной сборки пакета) и зависимости (пакеты, которые должны быть установлены, чтобы пакет мог быть собран). функционируют должным образом при установке).
debian / rules
Этот файл представляет собой скрипт , который вызывается dpkg-buildpackage
с одним аргументом , который определяет действие принять ( clean
, build
, install
, binary
). Хотя технически это может быть любой сценарий, он всегда реализован как make-файл .
Помимо вызова вышестоящей системы сборки, большинство инструкций в debian/rules
ней очень часто повторяются и повсеместно встречаются, и, таким образом, практически все debian/rules
файлы включают эту функциональность в сценарии debhelper . Например, автоматическое определение зависимостей на основе используемых разделяемых библиотек - очень распространенное действие, и поэтому вместо включения кода, необходимого для этого, debian/rules
файл просто вызывает dh_shlibdeps
. К другим примерам сценариев debhelper относятся dh_installdocs
, которые устанавливают файлы стандартной документации, например, debian/copyright
в соответствующие места, или dh_fixperms
, которые гарантируют, что файлы в пакете имеют правильные права доступа (например, исполняемые файлы /usr/bin
имеют установленный бит "исполняемый", но доступны только для записи от суперпользователя).
Поскольку последовательности debhelper
сценариев сами по себе повторяются, некоторые пакеты упрощают debian/rules
файлы напрямую, используя dh или CDBS, вместо того, чтобы запускать каждую debhelper
команду напрямую.
Патч-системы
Иногда специалисту по сопровождению необходимо изменить исходный код. Хотя в прошлом это часто делалось простым редактированием файлов на месте и включением изменений в diff.gz
, это могло затруднить обслуживание при выпуске новых исходных версий, потому что все изменения приходилось проверять и объединять при необходимости.
В новом исходном формате 3.0 (quilt) используется система исправлений quilt , позволяющая разбивать модификации на группы логически разделенных исправлений, каждая из которых имеет дело с одним изменением и может быть отправлена вверх по течению как есть. Эти патчи живут в файлах debian/patches
.
Есть также пакеты, использующие другие системы исправлений, такие как dpatch
. Он генерирует и выполняет сценарии оболочки, которые представляют собой нестандартные унифицированные файлы различий с заголовком, которые, тем не менее, совместимы со стандартной diff
утилитой. debian/rules
Файл модифицирован для вызова dpatch apply-all
перед сборкой бинарного пакета и dpatch deapply-all
перед сборкой пакета источника (и очисток любой комплекции побочных продуктов). quilt
и некоторые другие системы исправлений устраняют необходимость в специальных заголовках и используют стандартные файлы различий.
Отслеживание изменений в исходных пакетах: debdiff и interdiff
Иногда пользователь может захотеть посмотреть на различия между двумя исходными пакетами - например, чтобы сгенерировать предлагаемый патч для версии, которая в настоящее время находится в репозитории, для включения в систему отслеживания ошибок дистрибутива . Если оба пакета используют одну и ту же исходную версию, это можно сделать с помощью debdiff
инструмента, который создает различия между двумя исходными деревьями с включенными изменениями упаковки.
Если архивы исходной версии для двух версий различаются, такое наивное сравнение использовать нельзя. Вместо этого interdiff
утилиту можно использовать для получения различий между двумя файлами различий (в данном случае между двумя diff.gz
файлами). Недостатком является то, что interdiff
вывод требует больше усилий для применения, и тот, кто применяет изменения, также должен найти и загрузить более новый архив восходящего потока, что обычно делается с использованием get-orig-source
правила в debian/rules
. [1]
Проверка здравомыслия с помощью lintian
Этот инструмент обеспечивает автоматическую проверку типичных ошибок упаковки как в двоичных, так и в исходных пакетах, включая нарушения политики Debian и потенциальные проблемы совместимости.
Хотя сопровождающий обычно стремится исправить все проблемы, на которые указывает lintian
, разные дистрибутивы могут иметь разные политики в отношении них. Например, Ubuntu требует , чтобы все пакеты, происходящие из Ubuntu, были чистыми, но для пакета, объединенного в Ubuntu из Debian, такого требования нет: новые изменения просто не должны содержать никаких предупреждений в дополнение к существующим. Это сделано для минимизации расхождений между пакетами Debian и Ubuntu.
Вот примеры lintian
выходов:
W: foo источник: исходный-содержит-CVS-каталог config / CVSN:N: Пакет содержит каталог CVS. Скорее всего, он был включенN: случайность, поскольку временные данные CVS обычно не принадлежат пакетам.N: Экспорт из CVS вместо использования извлечения.N:
W: libfoo-dev: debian-changelog-line-too-long, строка 2N:N: Данная строка последней записи журнала изменений содержит более 80 столбцов. ТакойN: записи журнала изменений могут плохо выглядеть в окнах терминала и почтовых сообщенияхN: и будет неприятно читать. Поместите записи журнала изменений в 80 столбцовN: или меньше, если возможно.N:
I: foo: arch-dep-package-has-big-usr-share 3399 КБ 77%N:N: пакет содержит значительный объем данных, не зависящих от архитектуры.N: в / usr / share, пока это архитектурно-зависимый пакет. ЭтоN: расточительное использование зеркального пространства и пропускной способности, так как в итоге мы получаемN: несколько копий этих данных, по одной для каждой архитектуры.N: N: если данные в / usr / share не зависят от архитектуры, этоN: нарушение политики, и в этом случае вам следует переместить эти данныеN: в другом месте.N: N: См. Также:N: http://www.debian.org/doc/developers-reference/ch-best-pkging-practiceN: s # s-bpp-archindepdata
Изолированные среды сборки
Исходные пакеты предназначены для сборки на любой установке целевой версии дистрибутива при условии соблюдения зависимостей сборки. Кроме того, на сборки могут влиять пакеты, уже присутствующие в системе.
Чтобы убедиться, что пакет собирается в любой системе, и исключить любые внешние факторы, используются инструменты для создания изолированных сред сборки. Это pbuilder
(Personal Builder) и sbuild
.
Эти инструменты поддерживают минимальное количество рабочих систем в chroot , устанавливают только необходимые зависимости сборки, перечисленные в debian/control
, и удаляют их по завершении сборки. Таким образом, используя pbuilder
, сопровождающий пакета может определить, не указаны ли некоторые зависимости сборки в debian/control
. Кроме того, pbuilder
позволяет тестировать сборку для дистрибутивов, отличных от того, который запускает сопровождающий: например, для разрабатываемой версии, при этом фактически выполняется стабильная версия.
sbuild
предназначен для интеграции с автоматическими демонами сборки ( buildd
). Он используется серверами сборки Debian, которые автоматически создают двоичные пакеты для каждой поддерживаемой архитектуры. Служба Launchpad предоставляет аналогичные демоны сборки для Ubuntu, как официальный дистрибутив, так и личные архивы пакетов (PPA).
Смотрите также
Рекомендации
- ^ «Глава 4 - Пакеты с исходным кодом» . Руководство по политике Debian . Проверено 1 октября 2014 года .