[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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 (1.15.6.1) 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 1.15.6.1 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 1.15.6.1 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 <http://lists.debian.org/debian-devel/2010/02/msg00511.html>
    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
~~~~~~~~~~~~~~~~~~~~

 Contributions
 ─────────────

 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
 thing.

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

 [W] <http://wiki.debian.org/Teams/Dpkg>
 [C] <mailto:debian-dpkg@lists.debian.org>

 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.

 [R] <http://wiki.debian.org/Teams/Dpkg/RoadMap>
 [F] <file:///usr/share/doc/dpkg/README.feature-removal-schedule>
 [A] <file:///usr/share/doc/dpkg-dev/README.api>

 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!

 Downstreams
 ───────────

 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.

 [D] <http://wiki.debian.org/Teams/Dpkg/Downstream>


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.

 Documentation
 ─────────────

 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.

 [T] <http://git.debian.org/?p=dpkg/pkg-tests.git>

 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 1.13.11.1 (2006-01-12) to 1.15.6.1 (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
     DPKG_SHELL_REASON, DPKG_CONFFILE_OLD, DPKG_CONFFILE_NEW.

   New environment variables set for maintainer scripts
     DPKG_RUNNING_VERSION, DPKG_MAINTSCRIPT_PACKAGE, DPKG_MAINTSCRIPT_ARCH.

   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.

   [P] <http://lists.debian.org/debian-devel/2007/05/msg01070.html>

 * 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
     privs).
   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).
   Add support for DEB_{HOST,BUILD}_ARCH_{BITS,ENDIAN}.

 * 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
   installed.

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


Regards,
Guillem, on behalf of the dpkg team.

Attachment: signature.asc
Description: Digital signature


Reply to: