Содержание
Теперь мы готовы собрать пакет.
Для полной (пере)сборки пакета, необходимо убедиться в установке следующего:
пакета build-essential
,
пакетов, перечисленных в поле Build-Depends
(смотрите
Раздел 4.1, «Файл control
») и
пакетов, перечисленных в поле Build-Depends-indep
(смотрите Раздел 4.1, «Файл control
»).
Затем выполните следующую команду в каталоге с исходным кодом:
$ dpkg-buildpackage -us -uc
Она сделает всё, что необходимо для создания всех двоичных пакетов и пакета с исходным кодом. Она выполняет:
очистку дерева исходного кода (debian/rules clean
)
сборку пакета с исходным кодом (dpkg-source -b
)
сборку программы (debian/rules build
)
сборку двоичных пакетов (fakeroot debian/rules binary
)
создаёт файл .dsc
создаёт файл .changes
с помощью
dpkg-genchanges
Если результат сборки устраивает, подпишите файл .dsc
и
.changes
вашим закрытым ключом GPG с помощью команды
debsign. Вам потребуется ввести секретную фразу
дважды. [64]
Для неродного пакета Debian, например, gentoo
, после сборки пакетов вы увидите
следующие файлы в родительском каталоге (~/gentoo
):
gentoo_0.9.12.orig.tar.gz
Это оригинальный архив tar c исходным кодом, только переименованный для
соответствия стандартам Debian. Обратите внимание, что первоначально он был
создан с помощью dh_make -f ../gentoo-0.9.12.tar.gz
.
gentoo_0.9.12-1.dsc
Этот файл содержит информацию о содержимом исходного кода. Он файл
генерируется из вашего файла control
и используется при
распаковке пакета с исходным кодом с помощью dpkg-source(1).
gentoo_0.9.12-1.debian.tar.gz
В этом сжатом архиве tar находится содержимое вашего каталога
debian
. Все дополнения, вносимые вами в исходный код,
хранятся в виде заплат quilt в каталоге
debian/patches
.
Если кто-либо захочет пересоздать ваш пакет с нуля, они легко смогут сделать
это, используя перечисленные выше три файла. Процедура извлечения
тривиальна: просто скопируйте куда-нибудь три файла и выполните
dpkg-source -x gentoo_0.9.12-1.dsc
[65].
gentoo_0.9.12-1_i386.deb
Это ваш собранный двоичный пакет. Вы можете использовать dpkg для его установки и удаления, как любой другой пакет.
gentoo_0.9.12-1_i386.changes
В этом файле описываются все изменения, сделанные в данной редакции пакета,
и он используется программами поддержки FTP-архива Debian для внесения
пакетов (как двоичных, так и с исходным кодом) в архив. Он частично
генерируется из файлов changelog
и
.dsc
.
По мере того, как вы будете работать над пакетом, будет меняться его поведение и будет добавляться новая функциональность. Люди, загружающие ваш пакет, могут посмотреть этот файл и сразу понять, что было изменено. Программы поддержки архива Debian будут также отправлять содержимое этого файла в список рассылки debian-devel-changes@lists.debian.org.
Файлы gentoo_0.9.12-1.dsc
и
gentoo_0.9.12-1_i386.changes
должны быть подписаны с
помощью команды debsign вашим закрытым ключом GPG из
каталога ~/.gnupg/
до отправки их в архив Debian FTP. С
помощью вашего открытого ключа GPG можно проверить, что эти файлы подписали
действительно вы.
Команде debsign можно указать ID секретного ключа GPG,
которым нужно подписывать (удобно для спонсирования) в
~/.devscripts
:
DEBSIGN_KEYID=ID_ключа_GPG
Длинные строки цифр в файлах .dsc
и
.changes
— это контрольные суммы SHA1/SHA256 упомянутых
файлов. Человек, загружающий ваши файлы, может проверить их с помощью
sha1sum(1) или sha256sum(1) и, если числа не совпадают, он поймёт, что файл был
повреждён или подделан.
Debian поддерживает много переносов с помощью сети autobuilder, в которой работает служба buildd на компьютерах различных архитектур. Хотя вам и не придётся этим заниматься, но всё же следует узнать, что будет происходить с вашими пакетами. Рассмотрим в общих чертах как ваш пакет пересобирается для различных архитектур [66].
Для пакетов с Architecture: any
система autobuilder
выполняет пересборку. Она убеждается, что установлен
пакет build-essential
и
пакеты, перечисленные в поле Build-Depends
(смотрите
Раздел 4.1, «Файл control
»).
Затем в каталоге с исходным кодом вызывается команда
$ dpkg-buildpackage -B
Она делает всё необходимое для сборки пакетов для данной архитектуры. А именно:
очистку дерева исходного кода (debian/rules clean
)
сборку программы (debian/rules build
)
сборку архитектурно-зависимых двоичных пакетов (fakeroot
debian/rules binary-arch
)
подпись файла исходного кода .dsc
с помощью
gpg
создание и подпись загружаемого файла .changes
с
помощью dpkg-genchanges и gpg
Так ваш пакет собирается для различных архитектур.
Хотя пакеты, перечисленные в поле Build-Depends-indep
,
должны быть установлены при ручном пакетировании (смотрите Раздел 6.1, «Полная (пере)сборка»), их не нужно устанавливать при использовании
системы autobuilder, так как она занимается исключительно
архитектурно-зависимыми двоичными пакетами [67]. Это различие между обычным пакетированием и использованием
autobuilder определяет, где должны быть перечислены необходимые пакеты: в
поле Build-Depends
или
Build-Depends-indep
файла
debian/control
(смотрите Раздел 4.1, «Файл control
»).
Для автоматизации действий по сборки с помощью dpkg-buildpackage можно использовать команду debuild. Смотрите debuild(1).
Команда dbuild запускает команду
lintian для выполнения статической проверки после сборки
пакета Debian. Команда lintian можно настроить через файл
~/.devscripts
:
DEBUILD_DPKG_BUILDPACKAGE_OPTS="-us -uc -I -i" DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"
Для очистки каталога исходного кода и пересборки пакета выполните:
$ debuild
Для очистки древа исходного кода выполните:
$ debuild clean
В чистой среде сборки (chroot) для проверки пакетных
зависимостей очень полезен пакет pbuilder
[68]. Он поможет убедиться в чистоте сборки под управлением auto-builder
из sid
для различных архитектур и избежать опасной ошибки
FTBFS (ошибка сборки из исходного кода), которая всегда относится к
категории RC (критична для данного выпуска) [69].
Давайте настроим пакет pbuilder
следующим образом:
дадим пользователю право записи в каталог
/var/cache/pbuilder/result
создадим каталог для размещения сценариев, например,
,
доступный пользователю для записи.
/var/cache/pbuilder/hooks
добавим в файл ~/.pbuilderrc
или в
/etc/pbuilderrc
следующие строки:
AUTO_DEBSIGN=${AUTO_DEBSIGN:-no}
HOOKDIR=/var/cache/pbuilder/hooks
Для начальной инициализации локальной системы chroot
пакета pbuilder
выполним:
$ sudo pbuilder create
Если у вас имеется готовый пакет исходного кода, то в каталоге, где
расположены файлы
,
foo
.orig.tar.gz
и
foo
.debian.tar.gz
, для обновления
локальной системы chroot пакета foo
.dscpbuilder
и сборки соответствующих двоичных
пакетов выполните следующие команды:
$ sudo pbuilder --update
$ sudo pbuilder --build foo_версия
.dsc
Только что собранные пакеты без подписи GPG будут помещены в каталог
/var/cache/pbuilder/result/
, их владельцем будет
обычный пользователь (не суперпользователь).
Подписи GPG для файлов .dsc
и
.changes
можно сгенерировать следующим образом:
$ cd /var/cache/pbuilder/result/
$ debsign foo_версия_архитектура
.changes
Если у вас есть обновлённое древо исходного кода, но нет собранных пакетов с
исходным кодом, выполните в каталоге, где размещён подкаталог
debian
, другие команды:
$ sudo pbuilder --update $ pdebuild
Вы можете войти внутрь окружения chroot и настроить его
командой pbuilder --login --save-after-login
. Изменения
будут сохранены, когда вы покинете оболочку, нажав ^D
(Control-D).
Последняя версия команды lintian может быть вызвана в
окружении chroot
, используя сценарий
,
настроенный следующим образом [70]:
/var/cache/pbuilder/hooks/
/B90lintian
#!/bin/sh set -e install_packages() { apt-get -y --force-yes install "$@" } install_packages lintian echo "+++ lintian output +++" su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes" - pbuilder # use this version if you don't want lintian to fail the build #su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder echo "+++ end of lintian output +++"
Для правильной сборки пакета для sid
вам потребуется
самое свежее окружение этой ветви, однако миграция на sid
всей системы может быть нежелательна. Пакет pbuilder
поможет вам в этой ситуации.
Возможно, вам потребуется обновить ваши пакеты из ветви
stable
их версиями из архивов
stable-proposed-updates
,
stable/updates
и других [71]. В таких случаях утверждения «Я использовал окружение
sid
» недостаточно, если обновление не было проведено
своевременно. Пакет pbuilder
поможет
вам получить доступ к окружению практически любого производного от Debian
дистрибутива той же архитектуры.
Смотрите http://www.netfort.gr.jp/~dancer/software/pbuilder.html, pdebuild(1), pbuilderrc(5) и pbuilder(8).
Если автор программы применяет систему управления кодом [72], то и вы можете использовать её возможности. Это упрощает слияние и выборку заплат для исходного кода. Для каждой VCS существуют специализированные инструменты, позволяющие производить сборку пакетов Debian:
git-buildpackage
: инструменты для
пакетирования в репозиториях Git.
svn-buildpackage
: вспомогательные
программы для сопровождения пакетов Debian в Subversion.
cvs-buildpackage
: набор сценариев
для пакетирования в CVS.
Среди разработчиков Debian становится популярным использовать git-buildpackage
для управления пакетами Debian
на сервере Git alioth.debian.org. [73] В этот пакет включено много команд для
автоматизации процесса упаковки:
git-import-dsc(1): импорт существующего пакета Debian в репозитории Git.
git-import-orig(1): импорт нового tar с исходным кодом в репозиторий Git.
git-dch(1): генерация changelog Debian на основе сообщений о записи в Git.
git-buildpackage(1): сборка пакетов Debian из репозитория Git.
git-pbuilder(1): сборка пакетов Debian из репозитория Git с помощью pbuilder/cowbuilder.
Для ведения пакетирования в этих командах используются 3 ветви:
main
— дерево родных пакетов Debian.
upstream
— дерево авторского исходного кода.
pristine-tar
для авторского tar, создаваемый при
использовании параметра --pristine-tar
.[74]
Для настройки git-buildpackage
используйте файл ~/.gbp.conf
. Смотрите gbp.conf(5). [75]
При работе над большим пакетом, возможно, вы не захотите каждый раз
полностью пересобирать его из исходного кода при изменении настроек в файле
debian/rules
. Исключительно для тестовых целей вы
можете создать deb-файл без пересборки кода следующим образом [76]:
$ fakeroot debian/rules binary
Или просто выполните для выяснения возможна ли сборка пакета:
$ fakeroot debian/rules build
После выбора оптимальных настроек не забудьте пересобрать пакет стандартными
средствами. Полученные таким способом файлы .deb
могут
быть загружены в архив некорректно, если вы попытаетесь это сделать.
Вот краткая сводка команд, которые объединяются в единую систему для сборки пакетов. Есть много способов сделать одно и тоже.
debian/rules
= сценарий сопровождающего для сборки
пакета
dpkg-buildpackage = ключевой инструмент сборки пакета
debuild = dpkg-buildpackage + lintian (сборка при проверенных переменных окружение)
pbuilder = ключевой инструмент chroot-окружения Debian
pdebuild = pbuilder + dpkg-buildpackage (сборка в chroot)
cowbuilder = ускорение выполнения pbuilder
git-pbuilder = простой синтаксис командной строки для pdebuild (используется в gbp buildpackge)
gbp = управление исходным кодом Debian в репозитории git
gbp buildpackge = pbuilder + dpkg-buildpackage + gbp
Хотя высокоуровневые команды, такие как gbp buildpackge и
pbuilder, предоставляют замечательную среду сборки
пакета, необходимо понимать какие нижележащие команды, такие как
debian/rules
и dpkg-buildpackage, в
них используются.
[64] Для подключения к доверенному веб (web of trust) этот ключ GPG должен быть подписан разработчиком Debian и должен быть зарегистрирован в связке ключей Debian. Это позволяет закачивать пакеты для приёма в архивы Debian. Смотрите Создание нового ключа GPG и вики Debian по подписыванию ключами.
[65] Вы можете избежать наложения заплат quilt в формате
исходного кода 3.0 (quilt)
в конце извлечения, указав
параметр --skip-patches
. Или же вы можете выполнить
quilt pop -a
после обычной распаковки.
[66] На самом деле, работа системы autobuilder гораздо сложнее, однако её детальное описание не для этого документа.
[67] В отличие от пакета pbuilder
,окружение chroot из
пакета sbuild
, который используется
системой autobuilder, не требует минимальной системы и допускает наличие
установленных пакетов, не являющихся необходимыми.
[68] Так как пакет pbuilder
всё ещё
развивается, за подробностями настройки обратитесь к его официальной
документации.
[69] Более полная информация по автоматической сборке пакетов Debian приведена в http://buildd.debian.org/.
[70] Здесь предполагается, что
HOOKDIR=/var/cache/pbuilder/hooks
. Примеры вызываемых
(hook) сценариев можно найти в каталоге
/usr/share/doc/pbuilder/examples
.
[71] Есть некоторые ограничения для такого обновления пакета из
stable
.
[72] Смотрите Системы управления версиями.
[73] В вики Debian Alioth описано как использовать службу alioth.debian.org.
[74] При указании параметра --pristine-tar
вызывается команда
pristine-tar, которая может регенерировать точную копию
первоначального авторского файла tar на основе только маленького двоичного
файла различий и содержимого tar, который обычно хранится в ветви
upstream
в VCS.
[75] Несколько веб-ресурсов для опытных пользователей:
Сборка пакетов Debian с помощью git-buildpackage
(/usr/share/doc/git-buildpackage/manual-html/gbp.html
)
Использование TopGit для генерации заплат quilt при пакетировании Debian
[76] В данном случае не выполняется настройка переменных окружения, как это происходит при обычной сборке. Никогда не загружайте в архив пакеты, собранные таким быстрым способом.