Table of Contents
Let’s describe more basics on Debian packaging.
All customization data for the Debian source package resides in the debian/ directory as presented in “Section 5.7, “第三步:编辑模板文件””:
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 “Section 5.9, “Step 3 (alternatives): Modification to the upstream source””.
您应当以引入最少修改的方式解决打包中出现的根本问题。所生成的软件包应当考虑到未来的更新需求并有一定的健壮性。
Note | |
---|---|
如果补丁对上游有所帮助的话,也请将解决根本问题的补丁反馈给上游作者和维护者。 |
Flexible customization of the Section 6.5, “debian/rules file” is realized by adding appropriate override_dh_* targets and their rules.
如果需要在 dh 命令调用某些特定的 dh_foo 命令时采取某些特别的操作,则任何自动执行的操作均可以被 debian/rules 中额外添加的 override_dh_foo 这样的 Makefile 目标所覆写。
构建的过程可以使用某些上游提供的接口进行定制化,如使用传递给标准的源代码构建系统的参数。这些构建系统包括但不限于:
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.
Tip | |
---|---|
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/ 目录下的文件中找到。比较重要的包括:
例如,您按如下的方法在 debian/rules 文件中添加内容,从而为 linux-any 目标架构添加额外的 CONFIGURE_FLAGS:
DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) ... ifeq ($(DEB_HOST_ARCH_OS),linux) CONFIGURE_FLAGS += --enable-wayland endif
参见 “Section 9.10, “多体系结构””、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
After the above, you should refresh debian/patches/* files (see “Section 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
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
Here is a recap of popular low level package build commands. There are many ways to do the same thing.
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 “Section 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
其中:
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
Tip | |
---|---|
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 命令。
Tip | |
---|---|
另一方面,-sd 选项将会强制排除原始的 orig.tar.gz 源码。 |
Tip | |
---|---|
添加至 ~/.bashrc 文件。 |
如果当跳过上传时,你在 debian/changelog 中创建了多个条目,你必须创建一个包含自上次上传以来所有变更的 debian/changelog 文件。这可以通过指定 dpkg-buildpackage 选项 -v 以及上次上传的版本号,比如 1.2 来完成。
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/binarypackage.bug-control → usr/share/bug/binarypackage/control
debian/binarypackage.bug-presubj → usr/share/bug/binarypackage/presubj
debian/binarypackage.bug-script → usr/share/bug/binarypackage or usr/share/bug/binarypackage/script
See dh_bugfiles(1) and “reportbug’s Features for Developers (README.developers)”
Tip | |
---|---|
如果您总是需要提醒提交报告的用户某些注意事项或询问他们某些问题,使用这些文件可以将这个过程自动化。 |