Набор инструментов для сборки Debian
Эта статья нуждается в дополнительных цитатах для проверки . ( август 2015 г. ) |
Набор сборки Debian инструментов — это набор программных утилит, используемых для создания исходных пакетов Debian ( .dsc
) и бинарные пакеты Debian ( .deb
файлы) из исходных исходного кода архивов .
Эти инструменты используются в проекте Debian, а также в дистрибутивах на основе Debian, таких как Ubuntu .
Обзор
[ редактировать ]Исходный код бесплатного программного обеспечения обычно распространяется в сжатых tar- архивах, называемых tarballs. Debian — это бинарно-ориентированный дистрибутив, то есть его deb
Пакеты включают предварительно скомпилированные двоичные файлы и файлы данных, организованные в иерархию файловой системы, ожидаемую программным обеспечением. Таким образом, цепочке инструментов сборки Debian нужны инструкции о том, как использовать вышестоящую систему сборки для правильной сборки. deb
пакеты.
Эти инструкции хранятся в debian
подкаталог, который добавляется в дерево исходного кода для программного обеспечения, упаковываемого сопровождающим пакета . Хотя можно собрать пакет непосредственно из измененного дерева исходного кода, стандартной практикой является создание пакетов исходного кода , которые содержат изменения, внесенные сопровождающим в вышестоящие исходные коды в распространяемой форме.
Исходные пакеты
[ редактировать ]Типичный исходный пакет Debian состоит из трёх файлов:
- Оригинальный архив (
orig.tar
) — простая копия исходного архива исходного кода, если он находится вtar
формате и никаких изменений не требуется, или переупакованный архив. Последнее может произойти, если он содержит снимок системы контроля версий , который никогда не выпускался в виде архива, или если сопровождающему необходимо удалить файлы, несовместимые с Руководством по свободному программному обеспечению Debian . - The
debian.tar
файл, который содержит изменения в исходном коде, внесенные сопровождающим пакета. Сюда входит весьdebian
каталог. Любые измененные файлы за его пределами объединяются в файлы исправлений внутриdebian/patches
каталог, которые автоматически применяются перед сборкой. - The
dsc
file, который представляет собой текстовый файл с метаданными , такими как имена всех файлов, составляющих исходный пакет, и их контрольные суммы 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
tarball внутри него и применяет все 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) unstable; urgency=low
* New upstream release.
* Dropped 02_manpage_hyphens.dpatch, fixed upstream.
* Added 04_edit_button_crash.dpatch: fix a crash after pressing the edit button. (Closes: #654321)
* debian/control: foo should conflict with libbar. (Closes: #987654)
-- John Doe <[email protected]> Fri, 30 Nov 2007 15:29:42 +0100
Debian предоставляет две основные утилиты для управления debian/changelog
файл:
dch
используется для добавления новых записей в журнал изменений или изменения существующих.dpkg-parsechangelog
анализирует самую последнюю запись и извлекает из нее данные в видеKey: value
формат, аналогичныйdebian/control
. В основном он используется в скриптах.
Debian/контроль
[ редактировать ]Этот файл содержит информацию об исходном пакете и всех двоичных пакетах, которые он собирает (их может быть несколько; например, исходный пакет libbar
может служить источником бинарных пакетов libbar0
, который содержит только общую библиотеку, и libbar-dev
, который содержит статическую версию библиотеки и файлы заголовков).
В нем перечислены (среди прочего) такие вещи, как имя пакета, сопровождающий, целевые архитектуры (для двоичных пакетов), зависимости сборки (пакеты, которые должны быть установлены для успешной сборки пакета) и зависимости (пакеты, которые должны быть установлены для того, чтобы пакет мог быть установлен). функционировать должным образом после установки).
Debian/правила
[ редактировать ]Этот файл представляет собой скрипт, который вызывается 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 source: source-contains-CVS-dir config/CVS N: N: Package contains a CVS directory. It was most likely included by N: accident, since transient CVS data usually doesn't belong in packages. N: Export from CVS rather than use a checkout. N:
W: libfoo-dev: debian-changelog-line-too-long line 2 N: N: The given line of the latest changelog entry is over 80 columns. Such N: changelog entries may look poor in terminal windows and mail messages N: and be annoying to read. Please wrap changelog entries at 80 columns N: or less where possible. N:
I: foo: arch-dep-package-has-big-usr-share 3399kB 77% N: N: The package has a significant amount of architecture-independent data N: in /usr/share, while it is an architecture-dependent package. This is N: wasteful of mirror space and bandwidth, as we then end up with N: multiple copies of this data, one for each architecture. N: N: If the data in /usr/share is not architecture-independent, it is a N: policy violation, and in this case, you should move that data N: elsewhere. N: N: See also: N: http://www.debian.org/doc/developers-reference/ch-best-pkging-practice N: s#s-bpp-archindepdata
Изолированные среды сборки
[ редактировать ]Пакеты исходного кода предназначены для сборки при любой установке целевой версии дистрибутива при условии соблюдения зависимостей сборки. Кроме того, на сборки могут влиять пакеты, уже присутствующие в системе.
Чтобы убедиться, что пакет собирается в любой системе, и исключить любые внешние факторы, используются инструменты для создания изолированных сред сборки. Это pbuilder
(Персональный строитель) и sbuild
.
Эти инструменты поддерживают минимальные рабочие системы в chroot , устанавливают только необходимые зависимости сборки, перечисленные в debian/control
и удалите их после завершения сборки. Поэтому, используя pbuilder
, сопровождающий пакета может обнаружить, что некоторые зависимости сборки не были указаны в debian/control
. Также, pbuilder
позволяет тестировать сборку для дистрибутивов, отличных от того, который использует сопровождающий: например, для версии для разработки, фактически запуская стабильную версию.
sbuild
предназначен для интеграции с демонами автоматической сборки ( buildd
). Он используется серверами сборки Debian, которые автоматически создают двоичные пакеты для каждой поддерживаемой архитектуры. Служба Launchpad предоставляет аналогичные демоны сборки для Ubuntu: как официальный дистрибутив, так и персональные архивы пакетов (PPA).
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Глава 4 — Исходные пакеты» . Руководство по политике Debian . Проверено 1 октября 2014 г.