Debian-news is about one simple thing - news about Debian GNU/Linux and the top free distributions based on Debian GNU/Linux.


Bits from the dpkg team

Hi! There’s been no general information about dpkg since Scott handed over dpkg maintenance to the new team. There’s been several announcements about specific features during this period though, the contents of which will be skipped here.

Call for testers

The current version in experimental ( contains lots of changes
since the previous micro version (1.15.5), among those there’s few that
might have wide reaching unsuspected effects:

* Changes to dpkg Pre-Depends. We are now linking dynamically [L]
against libbz2, zlib and libselinux, which promotes libbz2 to
pseudo-essential. We’ve also switched from lzma to xz-utils
package, also changing the current pseudo-essential set.

* dpkg and several of the companion tools now fsync() all [S] files
prior to their atomic replace, and fsync() database directories on
content changes. The directories are still not fsync()ed for package
installation or removal, we might be implementing this in the future.
Latest changes in should fix the massive I/O degradation and
give times similar to a dpkg w/o the fsync() patches.

* Refactoring and fixes to the SELinux handling code.

So it would be nice if people could give it a try and report any
regressions, specially installation tests on ext4 filesystems using
packages containing lots of small files, which have been reported to
suffer from maddening slow downs with 1.15.6, which should have
addressed. We are planning to upload the next release to unstable by
the end of the weekend, if we don’t hear about any major regression.

[L] See
for the rationale.
[S] dpkg has always done fsync() on several of the database files, but
not on files from packages or on directories.

Team Status and News


Frank Lichtenheld recently stepped down from the team, many thanks for
his past contributions!

We are always looking for new contributors, be it for one time changes,
or a longer involvement. Trying to tackle specific bug reports or items
from our roadmap might be a good starting point, depending on its
complexity. To be taken into account though, is that lots, if not most
development in dpkg involve design work, the need to consider backward
compatibility and the implications of the changes on the wider project
and the needed interactions with different parts of the project (be it
people or other programs). So it requires patience, as changes might not
get deployed as fast as one might want or as fast as other changes might
happen in other areas of the distribution, also because thinking them
through and getting things right takes time. More information about the
team can be found on the wiki [W].

We are planning to split dselect from the dpkg source tree in the
nearish future, once libdpkg API has stabilized a bit. It’s currently
in maintenance mode and needs someone who cares and actually use the

If you are interested in getting involved please get in contact [C]
with us!


Plans and roadmap

As part of our future plans we have a roadmap [R], although some of
those might get postponed for the 1.16.x series, depending on the
Debian release date. The main theme of that roadmap is to try to merge
back features and functionality that has been duplicated or developed
anew outside dpkg, but which make more sense to have it supported
natively by the dpkg suite, or by providing a public interface for it.

We ship two files that list features that are scheduled for removal [F],
and the current status of the provided APIs [A] by the tools.


Tracking development

We’ll keep posting general announcements from time to time, but if you’d
like to keep track of changes happening in dpkg, the Debian changelog
only includes significant or user visible changes, so it should be easy
for people to follow what’s going on in dpkg development by mostly
reading just that, for a detailed list of changes on each release please
check the upstream ChangeLog file (a dump of git log). Or an even more
detailed option could be to subscribe to the debian-dpkg-cvs mailing list
which receives all commits from git. Code reviews are always welcome!


There’s few more downstreams shipping [D] dpkg now. We’d be glad to make
it easier for them by trying to integrate patches they might be carrying,
thus trying to reduce their delta as much as possible. Of particular
interest are distributions using dpkg as their native package manager.
If we don’t get approached (several of which have already done so) we’ll
be getting in contact with them at some point in the future.


Global changes

Initially most of our attention focused on fixing bug reports and
cleanup, mainly on the documentation and perl parts. Raphaël is now
focused mostly on the perl parts which are contained in libdpkg-perl
and dpkg-dev, while I’ve now switched mostly to cleanup, refactor and
fix the C parts contained in libdpkg-dev and dpkg.


Major cleanup and unification of style and form on man pages.

Split dpkg-source(1) into independent man pages, namely:
dpkg-buildpackage(1), dpkg-distaddfile(1), dpkg-genchanges(1),
dpkg-gencontrol(1), dpkg-parsechangelog(1), dpkg-shlibdeps(1),
deb-shlibs(5) and deb-substvars(5).

New man pages: deb-version(5), deb-symbols(5), deb-triggers(5),
deb-override(5), deb-extra-override(5), deb-split(5).

All programs and scripts now support –help and –version.
Remove useless and sometimes non-functional –license and –licence.

Lots of code refactoring and cleanup

Modularization, cleanup and modernization of the perl code (to the
point of being able to use strict and warnings). The result of this is
the new libdpkg-perl package, which provides modules used by dpkg-dev,
several of which are already to be considered public and can be used
to replace ad-hoc code in other external tools.

The ongoing cleanup of the C code base, with the objective to provide
a sane shared library interface so that external applications can make
use of it too. Right now there’s already available a libdpkg-dev package
providing a static library and the header files, although the API is
still to be considered volatile, use at your own risk!

As part of the refactoring work, we have also started adding unit test
suites for the libdpkg-perl and libdpkg code. We also have the
beginnings of a functional test suite for dpkg itself [T]. Addition of
more tests are always welcome.


Other changes

Transition from dpkg’s original install-info to now more widely used
GNU install-info.
Transition from dpkg’s 822-date to “date -R”.
Removed obsolete cleanup-info.

Summary of changes

Here’s a summary of most of the user visible changes (mostly interface
additions) since (2006-01-12) to (2010-03-24), for
more details, please check the man pages:

Changes in dpkg.deb

* dpkg:

Support for Breaks field (there’s still lots of packages unneedingly
using Conflicts fields which could be using Breaks instead,
making upgrades less painful for the resolvers).
Several fixes for proper handling of the Replaces field.
Recognize Tag field (used by debtags, although the bulk of tags
currently come from the archive overrides).

New option: –clear-selections.
Remove obsolete options: –force-auto-select/–refuse-auto-select.

Add support for /etc/dpkg/dpkg.d/ config fragment loading.
Add support for invokation hooks (–pre-invoke and –post-invoke).
Set the environment variable DPKG_HOOK_ACTION in the invoked hooks.
Some apt hooks could get switched to dpkg hooks, if they need the
guarantee of being run whenever dpkg is invoked, regardless of
frontend usage.

Backgrounding during conffile prompt is not explicitly supported
anymore, thus environment variable DPKG_NO_TSTP not honoured.
New environment variables set during conffile prompt shell spawning

New environment variables set for maintainer scripts

Add new –status-fd action when disappearing a package.

Remove obsolete ‘hold’ and ‘hold-reinstreq’ internal error status
flags, due to upgrades no current system should have those in
their status file, programs parsing the status file [P] can stop
recognizing those.


* dpkg-deb:

Add support for lzma and xz compressed data.tar member in deb archives.
Accept ustar long file names inside tar files in deb archives.

* dpkg-split:

Accept slash-terminated ar member names in deb-split archives.

* dpkg-query:

New option: -c, –control-path (to be used by programs which must
access the internal database package control files, instead of
hard coding its paths, needed for multiarch among others, but
please check the man page first for usage details).

* dpkg-statoveride:

Rewritten in C.

* dpkg-divert:

New option: –listpackage.

* update-alternatives:

Make more robust against bogus user input and bogus database states.

New options: –get-selections and –set-selections.
New option: –query.
New option: –skip-auto.
New option: –log.

* start-stop-daemon:

Fixes to the –exec option, it should be safe to use it now even on
package upgrades when the executable gets replaced, etc.
New option: –umask.
New option: -P, –procsched (change the process schedule).
New option: -I, –iosched (change the I/O schedule).

Changes in dpkg-dev.deb

* dpkg-source:

Support multiple -T options.

* dpkg-buildpackage:

Rewritten in perl (from shell script).

New option: –admindir.
New default for -r option is fakeroot (no need to specify it anymore).
New option: -j (parallel builds).
New option: -T (call the rules file with a specified target).
New option: –as-root (requires the -T target to be run with root
New option: -R (specify rules file).
New options: –source-option and –changes-option (pass options to
dpkg-source and dpkg-genchanges respectively).

* dpkg-checkbuilddeps:

New option: –admindir.
New option: -d (to specify Build-Depends).
New option: -c (to specify Build-Conflicts).

* dpkg-architecture:

Add support for architecture wildcards.
New option: -e (architecture equality).
New option: -i (architecture identity).

* dpkg-shlibdeps:

Dependency fields contents reordering for each substvar substitution.

New option: –admindir.

* dpkg-gencontrol:

Dependency fields contents duplication stripping and reduction.

Support multiple -T options.

* dpkg-parsechangelog:

New options: –format, –since, –until, –from, –to, –count,
–offset, –all.

* dpkg-genchanges:

Support multiple -T options.

* dpkg-name:

Rewritten in perl (from shell script).

* dpkg-scansources & dpkg-scanpackages:

The override-file argument in dpkg-scanpackages is now optional (no
need to pass /dev/null any longer).
Support for compressed override files.

New option: -m (for multiple version) in dpkg-scanpackages.
New option: -e, –extra-override (in both tools).
New option: –medium in dpkg-scanpackages.

Changes in dselect.deb

Add support for /etc/dpkg/dselect.d/ config fragment loading.

New keybinding (‘C’) to restore all selections to what’s currently

Merge back dpkg-ftp and dpkg-multicd into dselect.

Guillem, on behalf of the dpkg team.

2 Responses to “Bits from the dpkg team” »

  1. Pingback by Tweets that mention Bits from the dpkg team | - Your one stop for news about Debian -- — March 27, 2010 @ 9:10 pm

    […] This post was mentioned on Twitter by David Mora, Linux News. Linux News said: Bits from the dpkg team #Debian […]

  2. Pingback by Bits from the dpkg team | – Your one stop for news … | Perl WebDev Insider — March 28, 2010 @ 7:29 am

    […] Read the original here: Bits from the dpkg team | – Your one stop for news … […]

RSS feed for comments on this post.

Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *


Debian-News is not related to the Debian Project.
All logos and trademarks on this site are property of their respective owners.