Глава 8. More on packaging

Содержание

8.1. Package customization
8.2. Customized debian/rules
8.3. Variables for debian/rules
8.4. Новый выпуск основной ветки
8.5. Manage patch queue with dquilt
8.6. Build commands
8.7. Note on sbuild
8.8. Special build cases
8.9. Загрузите orig.tar.gz
8.10. Пропущенные загрузки
8.11. Bug reports

Let’s describe more basics on Debian packaging.

All customization data for the Debian source package resides in the debian/ directory as presented in «Раздел 5.7, «Шаг 3: изменение шаблонных файлов»»:

When these are not sufficient to make a good Debian package, -p1 patches of debian/patches/* files are deployed to modify the upstream source. These are applied in the sequence defined in the debian/patches/series file before building the package as presented in «Раздел 5.9, «Step 3 (alternatives): Modification to the upstream source»».

You should address the root cause of the Debian packaging problem by the least invasive way. The generated package shall be more robust for future upgrades in this way.

[Примечание]Примечание

Send the patch addressing the root cause to the upstream maintainer if it is useful to the upstream.

Flexible customization of the Раздел 6.5, «debian/rules file» is realized by adding appropriate override_dh_* targets and their rules.

Всякий раз как требуется выполнить какую-то специальную операцию для определённой команды dh_foo, вызываемой командой dh, всякое автоматическое выполнение её может быть отменено путём добавления Makefile-цели override_dh_foo в файл debian/rules.

The build process may be customized via the upstream provided interface such as arguments to the standard source build system commands, such as:

  • configure,
  • Makefile,
  • «python -m build», or
  • Build.PL.

If this is the case, you should add the override_dh_auto_build target with «dh_auto_build -- arguments». This ensures passing arguments to the build system after the default parameters that dh_auto_build usually passes.

[Подсказка]Подсказка

Please try not to execute the bare build system commands directly if they are supported by the dh_auto_build command.

См.:

Некоторые определения переменных, которые могут оказаться полезными для debian/rules, можно найти в файлах в каталоге /usr/share/dpkg/. В частности:

pkg-info.mk
Set DEB_SOURCE, DEB_VERSION, DEB_VERSION_EPOCH_UPSTREAM, DEB_VERSION_UPSTREAM_REVISION, DEB_VERSION_UPSTREAM, and DEB_DISTRIBUTION variables obtained from dpkg-parsechangelog(1). (useful for backport support etc..)
vendor.mk
Set DEB_VENDOR and DEB_PARENT_VENDOR variables; and dpkg_vendor_derives_from macro obtained from dpkg-vendor(1). (useful for vendor support (Debian, Ubuntu, …​).)
architecture.mk
Set DEB_HOST_* and DEB_BUILD_* variables obtained from dpkg-architecture(1).
buildflags.mk
Set CFLAGS, CPPFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, FFLAGS, FCFLAGS, and LDFLAGS build flags obtained from dpkg-buildflags(1).

Например, можно добавить дополнительную опцию в CONFIGURE_FLAGS для архитектур linux-any, добавляя следующее в файл debian/rules:

DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
 ...
ifeq ($(DEB_HOST_ARCH_OS),linux)
CONFIGURE_FLAGS += --enable-wayland
endif

См. «Раздел 9.10, «Multiarch»», dpkg-architecture(1) и dpkg-buildflags(1).

When a new upstream release tarball foo-newvwesion.tar.gz is released, the Debian source package can be updated by invoking commands in the old source tree as:

$ uscan
 ... foo-newversion.tar.gz downloaded
$ uupdate -v newversion ../foo-newversion.tar.gz
  • The debian/watch file in the old source tree must be a valid one.
  • This make symlink ../foo_newvwesion.orig.tar.gz pointing to ../foo-newvwesion.tar.gz.
  • Files are extracted from ../foo-newvwesion.tar.gz to ../foo-newversion/
  • Files are copied from ../foo-oldversion/debian/ to ../foo-newvesion/debian/ .

After the above, you should refresh debian/patches/* files (see «Раздел 8.5, «Manage patch queue with dquilt»») and update debian/changelog with the dch(1) command.

When «debian uupdate» is specified at the end of line in the debian/watch file, uscan automatically executes uupdate(1) after downloading the tarball.

You can add, drop, and refresh debian/patches/* files with dquilt to manage patch queue.

  • Add a new patch debian/patches/bugname.patch recording the upstream source modification on the file buggy_file as:

    $ dquilt push -a
    $ dquilt new bugname.patch
    $ dquilt add buggy_file
    $ vim buggy_file
      ...
    $ dquilt refresh
    $ dquilt header -e
    $ dquilt pop -a
  • Drop (== disable) an existing patch

    • Comment out pertinent line in debian/patches/series
    • Erase the patch itself (optional)
  • Refresh debian/patches/* files to make «dpkg-source -b» work as expected after updating a Debian package to the new upstream release.

     $ uscan; uupdate  # updating to the new upstream release
     $ while dquilt push; do dquilt refresh ; done
     $ dquilt pop -a
    • If conflicts are encountered with «dquilt push» in the above, resolve them and run «dquilt refresh» manually for each of them.

Here is a recap of popular low level package build commands. There are many ways to do the same thing.

  • dpkg-buildpackage = ядро инструмента для сборки пакета
  • debuild = dpkg-buildpackage + lintian (сборка с очищенными переменными окружения)
  • schroot = core of the Debian chroot environment tool
  • sbuild = dpkg-buildpackage on custom schroot (build in the chroot)

The sbuild(1) command is a wrapper script of dpkg-buildpackage which builds Debian binary packages in a chroot environment managed by the schroot(1) command. For example, building for Debian unstable suite can be done as:

 $ sudo sbuild -d unstable

In schroot(1) terminology, this builds a Debian package in a clean ephemeral chroot «chroot:unstable-amd64-sbuild» started as a copy of the clean minimal persistent chroot «source:unstable-amd64-sbuild».

This build environment was set up as described in «Раздел 4.6, «sbuild setup»» with «sbuild-debian-developer-setup -s unstable» which essentially did the following:

 $ sudo mkdir -p /srv/chroot/dist-amd64-sbuild
 $ sudo sbuild-createchroot unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian
 $ sudo usermod -a -G sbuild <your_user_name>
 $ sudo newgrp -

The schroot(1) configuration for unstable-amd64-sbuild was generated at /etc/schroot/chroot.d/unstable-amd64-sbuild.$suffix :

[unstable-amd64-sbuild]
description=Debian sid/amd64 autobuilder
groups=root,sbuild
root-groups=root,sbuild
profile=sbuild
type=directory
directory=/srv/chroot/unstable-amd64-sbuild
union-type=overlay

Где:

  • The profile defined in the /etc/schroot/sbuild/ directory is used to setup the chroot environment.
  • /srv/chroot/unstable-amd64-sbuild directory holds the chroot filesystem.
  • /etc/sbuild/unstable-amd64-sbuild is symlinked to /srv/chroot/unstable-amd64-sbuild .

You can update this source chroot «source:unstable-amd64-sbuild» by:

 $ sudo sbuild-update -udcar unstable

You can log into this source chroot «source:unstable-amd64-sbuild» by:

 $ sudo sbuild-shell unstable
[Подсказка]Подсказка

If your source chroot filesystem is missing packages such as libeatmydata1, ccache, and lintian for your needs, you may want to install these by logging into it.

The orig.tar.gz file may need to be uploaded for a Debian revision other than 0 or 1 under some exceptional cases (e.g., for a security upload).

When an essential package becomes a non-essential one (e.g., adduser), you need to remove it manually from the existing chroot environment for its use by piuparts.

При первой загрузке пакета в архив вам следует включить в загрузку также и архив с оригинальным исходным кодом, orig.tar.gz.

Если номер редакции Debian вашего пакета не является 1 или 0, то это происходит по умолчанию. В противном случае, вам следует передать опцию -sa команде dpkg-buildpackage.

  • dpkg-buildpackage -sa
  • debuild -sa
  • sbuild
  • For «gbp buildpackage», edit the ~/.gbp.conf file.
[Подсказка]Подсказка

С другой стороны использование опции -sd приведёт к тому, что архив с оригинальным исходным кодом, orig.tar.gz, будет включён в загрузку.

[Подсказка]Подсказка

Security uploads require including the orig.tar.gz file.

Если вы создаёте несколько записей в файле debian/changelog и пропускаете загрузки, то вам следует создать соответствующий файл *_.changes, включающий все изменения с последней загрузки. Это можно сделать, передав dpkg-buildpackage опцию -v с указанием последней загруженной версии, например, 1.2.

  • dpkg-buildpackage -v1.2
  • debuild -v1.2
  • sbuild --debbuildopts -v1.2
  • При использовании gbp buildpackage отредактируйте файл ~/.gbp.conf.

The reportbug(1) command used for the bug report of binarypackage can be customized by the files in usr/share/bug/binarypackage/.

Команда dh_bugfiles устанавливает эти файлы из шаблонных файлов в каталоге debian/.

  • debian/двоичныйпакет.bug-controlusr/share/bug/двоичныйпакет/control

    • Этот файл содержит некоторые указания, такие как перенаправления отчёта об ошибке другому пакету.
  • debian/двоичныйпакет.bug-presubjusr/share/bug/двоичныйпакет/presubj

    • Этот файл отображается пользователю с помощью команды reportbug.
  • debian/двоичныйпакет.bug-scriptusr/share/bug/двоичныйпакет или usr/share/bug/двоичныйпакет/script

    • Команда reportbug запускает этот сценарий для создания шаблонного файла для отчёта об ошибке.

See dh_bugfiles(1) and «reportbug’s Features for Developers (README.developers

[Подсказка]Подсказка

If you always remind the bug reporter of something or ask them about their situation, use these files to automate it.