Содержание
The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.
Теперь мы готовы собрать пакет.
Для полной (пере)сборки пакета, необходимо убедиться в установке следующего:
пакета 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
If the build result is satisfactory, sign the .dsc
and
.changes
files with your private GPG key using the
debsign command. You need to enter your secret pass
phrase, twice. [62]
Для неродного пакета Debian, например, gentoo
, после сборки пакетов вы увидите
следующие файлы в родительском каталоге (~/gentoo
):
gentoo_0.9.12.orig.tar.gz
This is the original upstream source code tarball, merely renamed to the
above so that it adheres to the Debian standard. Note that this was created
initially by the command 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
[63].
gentoo_0.9.12-1_i386.deb
Это ваш собранный двоичный пакет. Вы можете использовать dpkg для его установки и удаления, как любой другой пакет.
gentoo_0.9.12-1_i386.changes
В этом файле описываются все изменения, сделанные в данной редакции пакета,
и он используется программами поддержки FTP-архива Debian для внесения
пакетов (как двоичных, так и с исходным кодом) в архив. Он частично
генерируется из файлов changelog
и
.dsc
.
По мере того, как вы будете работать над пакетом, будет меняться его поведение и будет добавляться новая функциональность. Люди, загружающие ваш пакет, могут посмотреть этот файл и сразу понять, что было изменено. Программы поддержки архива Debian будут также отправлять содержимое этого файла в список рассылки [email protected].
The gentoo_0.9.12-1.dsc
and
gentoo_0.9.12-1_i386.changes
files must be signed using
the debsign command with your private GPG key in the
~/.gnupg/
directory, before uploading them to the
Debian FTP archive. The GPG signature provides the proof that these files
are really yours, using your public GPG key.
The debsign command can be made to sign with your
specified secret GPG key ID (good for sponsoring packages) with the
following in the ~/.devscripts
file:
DEBSIGN_KEYID=ID_ключа_GPG
Длинные строки цифр в файлах .dsc
и
.changes
— это контрольные суммы SHA1/SHA256 упомянутых
файлов. Человек, загружающий ваши файлы, может проверить их с помощью
sha1sum(1) или sha256sum(1) и, если числа не совпадают, он поймёт, что файл был
повреждён или подделан.
Debian поддерживает много переносов с помощью сети autobuilder, в которой работает служба buildd на компьютерах различных архитектур. Хотя вам и не придётся этим заниматься, но всё же следует узнать, что будет происходить с вашими пакетами. Рассмотрим в общих чертах как ваш пакет пересобирается для различных архитектур [64].
Для пакетов с 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, так как она занимается исключительно
архитектурно-зависимыми двоичными пакетами [65]. Это различие между обычным пакетированием и использованием
autobuilder определяет, где должны быть перечислены необходимые пакеты: в
поле Build-Depends
или
Build-Depends-indep
файла
debian/control
(смотрите Раздел 4.1, «Файл control
»).
Для автоматизации действий по сборки с помощью dpkg-buildpackage можно использовать команду debuild. Смотрите debuild(1).
The debuild command executes the
lintian command to make a static check after building the
Debian package. The lintian command can be customized
with the following in the ~/.devscripts
file:
DEBUILD_DPKG_BUILDPACKAGE_OPTS="-us -uc -I -i" DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"
Для очистки каталога исходного кода и пересборки пакета выполните:
$ debuild
Для очистки древа исходного кода выполните:
$ debuild -- clean
В чистой среде сборки (chroot) для проверки пакетных
зависимостей очень полезен пакет pbuilder
[66]. Он поможет убедиться в чистоте сборки под управлением auto-builder
из sid
для различных архитектур и избежать опасной ошибки
FTBFS (ошибка сборки из исходного кода), которая всегда относится к
категории RC (критична для данного выпуска) [67].
Давайте настроим пакет 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
, используя сценарий
,
настроенный следующим образом [68]:
/var/cache/pbuilder/hooks/
/B90lintian
#!/bin/sh set -e install_packages() { apt-get -y --allow-downgrades 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
поможет вам в этой ситуации.
You may need to update your stable
packages after their
release for stable-proposed-updates
,
stable/updates
, etc. [69] For such occasions, the fact that you may be running a
sid
system is not a good enough excuse for failing to
update them promptly. The pbuilder
package can help you to access environments of almost any Debian derivative
distribution of the same architecture.
Смотрите http://www.netfort.gr.jp/~dancer/software/pbuilder.html, pdebuild(1), pbuilderrc(5) и pbuilder(8).
Если автор программы применяет систему управления кодом [70], то и вы можете использовать её возможности. Это упрощает слияние и выборку заплат для исходного кода. Для каждой VCS существуют специализированные инструменты, позволяющие производить сборку пакетов Debian:
git-buildpackage
: инструменты для
пакетирования в репозиториях Git.
svn-buildpackage
: вспомогательные
программы для сопровождения пакетов Debian в Subversion.
cvs-buildpackage
: набор сценариев
для пакетирования в CVS.
Среди разработчиков Debian становится популярным использовать git-buildpackage
для управления пакетами Debian
на сервере Git alioth.debian.org. [71] В этот пакет включено много команд для
автоматизации процесса упаковки:
gbp-import-dsc(1): import a previous Debian package to a Git repository.
gbp-import-orig(1): import a new upstream tar to a Git repository.
gbp-dch(1): generate the Debian changelog from Git commit messages.
git-buildpackage(1): сборка пакетов Debian из репозитория Git.
git-pbuilder(1): сборка пакетов Debian из репозитория Git с помощью pbuilder/cowbuilder.
Для ведения пакетирования в этих командах используются 3 ветви:
main
— дерево родных пакетов Debian.
upstream
— дерево авторского исходного кода.
pristine-tar
для авторского tar, создаваемый при
использовании параметра --pristine-tar
.[72]
Для настройки git-buildpackage
используйте файл ~/.gbp.conf
. Смотрите gbp.conf(5). [73]
При работе над большим пакетом, возможно, вы не захотите каждый раз
полностью пересобирать его из исходного кода при изменении настроек в файле
debian/rules
. Исключительно для тестовых целей вы
можете создать deb-файл без пересборки кода следующим образом [74]:
$ 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, в
них используются.
[62] Для подключения к доверенному веб (web of trust) этот ключ GPG должен быть подписан разработчиком Debian и должен быть зарегистрирован в связке ключей Debian. Это позволяет закачивать пакеты для приёма в архивы Debian. Смотрите Создание нового ключа GPG и вики Debian по подписыванию ключами.
[63] Вы можете избежать наложения заплат quilt в формате
исходного кода 3.0 (quilt)
в конце извлечения, указав
параметр --skip-patches
. Или же вы можете выполнить
quilt pop -a
после обычной распаковки.
[64] На самом деле, работа системы autobuilder гораздо сложнее, однако её детальное описание не для этого документа.
[65] В отличие от пакета pbuilder
,окружение chroot из
пакета sbuild
, который используется
системой autobuilder, не требует минимальной системы и допускает наличие
установленных пакетов, не являющихся необходимыми.
[66] Так как пакет pbuilder
всё ещё
развивается, за подробностями настройки обратитесь к его официальной
документации.
[67] Более полная информация по автоматической сборке пакетов Debian приведена в http://buildd.debian.org/.
[68] Здесь предполагается, что
HOOKDIR=/var/cache/pbuilder/hooks
. Примеры вызываемых
(hook) сценариев можно найти в каталоге
/usr/share/doc/pbuilder/examples
.
[69] Есть некоторые ограничения для такого обновления пакета из
stable
.
[70] Смотрите Системы управления версиями.
[71] В вики Debian Alioth описано как использовать службу alioth.debian.org.
[72] The --pristine-tar
option invokes the
pristine-tar command, which can regenerate an exact copy
of a pristine upstream tarball using only a small binary delta file and the
contents of the tarball that are typically kept in an
upstream
branch in the VCS.
[73] Несколько веб-ресурсов для опытных пользователей:
Сборка пакетов Debian с помощью git-buildpackage
(/usr/share/doc/git-buildpackage/manual-html/gbp.html
)
[74] Environment variables that are normally configured to proper values are not set by this method. Never create real packages to be uploaded using this quick method.