Debian Bug report logs - #430958
dpkg should call fsync() before rename()

version graph

Package: dpkg; Maintainer for dpkg is Dpkg Developers <debian-dpkg@lists.debian.org>; Source for dpkg is src:dpkg.

Reported by: Russell Coker <russell@coker.com.au>

Date: Thu, 28 Jun 2007 13:45:04 UTC

Severity: normal

Tags: patch

Merged with 567089

Found in versions dpkg/1.13.25, dpkg/1.15.5.6

Fixed in version dpkg/1.15.6

Done: Guillem Jover <guillem@debian.org>

Bug is archived. No further changes may be made.

Toggle useless messages

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to debian-bugs-dist@lists.debian.org, Dpkg Developers <team@dpkg.org>:
Bug#430958; Package dpkg. Full text and rfc822 format available.

Acknowledgement sent to Russell Coker <russell@coker.com.au>:
New Bug report received and forwarded. Copy sent to Dpkg Developers <team@dpkg.org>. Full text and rfc822 format available.

Message #5 received at submit@bugs.debian.org (full text, mbox):

From: Russell Coker <russell@coker.com.au>
To: Debian Bug Tracking System <submit@bugs.debian.org>
Subject: dpkg should call fsync() before rename()
Date: Thu, 28 Jun 2007 20:43:58 +1000
Package: dpkg
Version: 1.13.25
Severity: normal

Below is part of the output of stracing dpkg when installing a package.  As
you can see it opens the file without O_SYNC and renames it without calling
fsync() first.  This means that a reboot during the period for which write-
back caching is active (which depends on the load of the machine, the amount
of free RAM, and the filesystem in use) will cause loss of file data.

open("/usr/bin/whiptail.dpkg-new", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0) = 9
read(8, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\2\0\3\0\1\0\0\0\220\226"..., 20636) = 2
0636
write(9, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\2\0\3\0\1\0\0\0\220\226"..., 20636) =
20636
read(8, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 356) = 356
fchown32(9, 0, 0)                       = 0
fchmod(9, 0755)                         = 0
close(9)                                = 0
utime("/usr/bin/whiptail.dpkg-new", [2007/06/28-16:35:29, 2007/01/23-03:58:38])
= 0
link("/usr/bin/whiptail", "/usr/bin/whiptail.dpkg-tmp") = 0
gettid()                                = 1722
open("/proc/self/task/1722/attr/fscreate", O_RDWR|O_LARGEFILE) = 9
write(9, "system_u:object_r:bin_t:s0\0", 27) = 27
close(9)                                = 0
rename("/usr/bin/whiptail.dpkg-new", "/usr/bin/whiptail") = 0



Information forwarded to debian-bugs-dist@lists.debian.org, Dpkg Developers <team@dpkg.org>:
Bug#430958; Package dpkg. Full text and rfc822 format available.

Acknowledgement sent to Raphael Hertzog <hertzog@debian.org>:
Extra info received and forwarded to list. Copy sent to Dpkg Developers <team@dpkg.org>. Full text and rfc822 format available.

Message #10 received at 430958@bugs.debian.org (full text, mbox):

From: Raphael Hertzog <hertzog@debian.org>
To: Russell Coker <russell@coker.com.au>, 430958@bugs.debian.org
Subject: Re: Bug#430958: dpkg should call fsync() before rename()
Date: Thu, 28 Jun 2007 19:15:40 +0200
On Thu, 28 Jun 2007, Russell Coker wrote:
> Package: dpkg
> Version: 1.13.25
> Severity: normal
> 
> Below is part of the output of stracing dpkg when installing a package.  As
> you can see it opens the file without O_SYNC and renames it without calling
> fsync() first.  This means that a reboot during the period for which write-
> back caching is active (which depends on the load of the machine, the amount
> of free RAM, and the filesystem in use) will cause loss of file data.

If the machine reboots while dpkg unpacks a package, dpkg will know that
the package is not cleanly unpacked/updated and this will simply get fixed
later after the reboot when the user finishes his update.

I fail to see a scenario where this behaviour leads to a problem. 

If the .dpkg-new file is not written on disk, I don't see why the
directory content would be updated on disk.

Cheers,
-- 
Raphaël Hertzog

Premier livre français sur Debian GNU/Linux :
http://www.ouaza.com/livre/admin-debian/



Information forwarded to debian-bugs-dist@lists.debian.org, Dpkg Developers <team@dpkg.org>:
Bug#430958; Package dpkg. Full text and rfc822 format available.

Acknowledgement sent to russell@coker.com.au:
Extra info received and forwarded to list. Copy sent to Dpkg Developers <team@dpkg.org>. Full text and rfc822 format available.

Message #15 received at 430958@bugs.debian.org (full text, mbox):

From: Russell Coker <russell@coker.com.au>
To: Raphael Hertzog <hertzog@debian.org>
Cc: 430958@bugs.debian.org
Subject: Re: Bug#430958: dpkg should call fsync() before rename()
Date: Fri, 29 Jun 2007 21:04:54 +1000
On Friday 29 June 2007 03:15, Raphael Hertzog <hertzog@debian.org> wrote:
> > Below is part of the output of stracing dpkg when installing a package. 
> > As you can see it opens the file without O_SYNC and renames it without
> > calling fsync() first.  This means that a reboot during the period for
> > which write- back caching is active (which depends on the load of the
> > machine, the amount of free RAM, and the filesystem in use) will cause
> > loss of file data.
>
> If the machine reboots while dpkg unpacks a package, dpkg will know that
> the package is not cleanly unpacked/updated and this will simply get fixed
> later after the reboot when the user finishes his update.

You are assuming that the dpkg status files are always committed to disk AFTER 
the various package files that dpkg writes.  There is no guarantee that it 
will happen that way.  The fact that fsync() is called on files 
under /var/lib/dpkg after the package files have been written means nothing.  
The best behaviour for a filesystem that is designed for performance is to 
have fsync() not give the same result as sync().

> I fail to see a scenario where this behaviour leads to a problem.
>
> If the .dpkg-new file is not written on disk, I don't see why the
> directory content would be updated on disk.

Directory contents may be updated before file data, and often are.  It seems 
that most filesystems nowadays in a default configuration will journal 
meta-data but not file data.  The journal is generally written much faster 
than the rest of the disk (it's a small contiguous area in a fast part of the 
disk) so the condition of having meta-data updated before file data is not 
uncommon.


I've just spent some time debugging a SUSE system that was hit by this bug.  
Please explain why you think that the practice of writing files without 
calling fsync() (the defined API for ensuring that data is written to disk) 
would work for dpkg when it has been observed to fail for rpm.


Also what reason is there for not calling fsync()?  Performance will be lower, 
but is such performance really such a problem for modern systems that it's 
worth decreasing reliability to gain performance?



Information forwarded to debian-bugs-dist@lists.debian.org, Dpkg Developers <debian-dpkg@lists.debian.org>:
Bug#430958; Package dpkg. (Mon, 27 Jul 2009 07:36:14 GMT) Full text and rfc822 format available.

Acknowledgement sent to Marius Vollmer <marius.vollmer@nokia.com>:
Extra info received and forwarded to list. Copy sent to Dpkg Developers <debian-dpkg@lists.debian.org>. (Mon, 27 Jul 2009 07:36:14 GMT) Full text and rfc822 format available.

Message #20 received at 430958@bugs.debian.org (full text, mbox):

From: Marius Vollmer <marius.vollmer@nokia.com>
To: 430958@bugs.debian.org
Subject: Re: Bug#430958: dpkg should call fsync() before rename()
Date: Mon, 27 Jul 2009 10:25:46 +0300
I want to draw attention to this bug again.

We are now running into this problem on Maemo 5, which is using ubifs as
its root filesystem.  Not syncing 'properly' on ubifs leads to
zero-length files, etc, very much like on ext4.

While the discussions rage about how fsync is not what applications want
(I agree, we just want a write barrier), and while filesystems are being
changed (hopefully in a way that doesn't need changes in almost all
applications anyway to make them robust again), we need to get back
robustness for dpkg.

Basically, I think we need to put a write barrier into the code so that
all filesystem operations done by dpkg are guaranteed to be committed
before the update to the status db is committed.  This includes all file
writes done by maintainer scripts, so it will not be enough to just put
fsyncs into dpkg itself.

I propose to just put a big "sync" into modstatdb_note_core:

diff --git a/lib/dbmodify.c b/lib/dbmodify.c
index 87400f1..f4fc586 100644
--- a/lib/dbmodify.c
+++ b/lib/dbmodify.c
@@ -247,6 +247,8 @@ modstatdb_note_core(struct pkginfo *pkg)
 {
   assert(cstatus >= msdbrw_write);
 
+  sync();
+
   varbufreset(&uvb);
   varbufrecord(&uvb, pkg, &pkg->installed);
 

I hope this is enough and not much too much.  We will apply this patch
for Maemo 5.




Forcibly Merged 430958 567089. Request was from Guillem Jover <guillem@debian.org> to control@bugs.debian.org. (Wed, 17 Feb 2010 20:12:04 GMT) Full text and rfc822 format available.

Added tag(s) pending. Request was from Guillem Jover <guillem@debian.org> to control@bugs.debian.org. (Sat, 06 Mar 2010 09:54:03 GMT) Full text and rfc822 format available.

Message sent on to Russell Coker <russell@coker.com.au>:
Bug#430958. (Sat, 06 Mar 2010 09:54:09 GMT) Full text and rfc822 format available.

Message #27 received at 430958-submitter@bugs.debian.org (full text, mbox):

From: Guillem Jover <guillem@debian.org>
To: 430958-submitter@bugs.debian.org
Subject: Bug#430958 marked as pending
Date: Sat, 06 Mar 2010 09:50:40 +0000
tag 430958 pending
thanks

Hello,

Bug #430958 reported by you has been fixed in the Git repository. You can
see the changelog below, and you can check the diff of the fix at:

    http://git.debian.org/?p=dpkg/dpkg.git;a=commitdiff;h=62668eb

---
commit 62668eb422853854976560949f95a5afcc6a8677
Author: Guillem Jover <guillem@debian.org>
Date:   Sat Feb 27 19:55:25 2010 +0100

    Do an fsync on files written to disk
    
    This guarantees the file contents will be there in case of abrupt
    program termination (due to crashes for example, or user intervention).
    This also guarantees the atomicity of rename(2) calls.
    
    Closes: #430958
    
    Based-on-patch-by: Jean-Baptiste Lallement <jeanbaptiste.lallement@gmail.com>

diff --git a/debian/changelog b/debian/changelog
index f4a58f0..aa19047 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -154,6 +154,10 @@ dpkg (1.15.6) UNRELEASED; urgency=low
   * When FIEMAP is not available use posix_fadvise() to start preloading the
     .list files before loading them. With a cold cache it improves up to 40%.
     Thanks to Stefan Fritsch <sf@sfritsch.de>. Closes: #557560
+  * Call fsync(2) after writting files on disk, to get the atomicity
+    guarantees when doing rename(2). Based on a patch by
+    Jean-Baptiste Lallement <jeanbaptiste.lallement@gmail.com>.
+    Closes: #430958
 
   [ Modestas Vainius ]
   * Implement symbol patterns (Closes: #563752). From now on, it is possible to




Information stored :
Bug#430958; Package dpkg. (Sat, 06 Mar 2010 10:36:09 GMT) Full text and rfc822 format available.

Acknowledgement sent to russell@coker.com.au:
Extra info received and filed, but not forwarded. (Sat, 06 Mar 2010 10:36:09 GMT) Full text and rfc822 format available.

Message #32 received at 430958-quiet@bugs.debian.org (full text, mbox):

From: Russell Coker <russell@coker.com.au>
To: Guillem Jover <guillem@debian.org>, 430958-quiet@bugs.debian.org
Subject: Re: Bug#430958: marked as pending
Date: Sat, 6 Mar 2010 21:35:04 +1100
On Sat, 6 Mar 2010, Guillem Jover <guillem@debian.org> wrote:
>     This guarantees the file contents will be there in case of abrupt
>     program termination (due to crashes for example, or user intervention).
>     This also guarantees the atomicity of rename(2) calls.

This description is incorrect.

fsync() has no bearing on what will happen if the program crashes.  If a 
program crashes immediately after a write() system call has succeeded then 
the kernel will take care of flushing the cache to disk afterwards.

fsync() is used specifically to deal with the case of abrupt OS termination 
due to a kernel crash or hardware failure.  The only user intervention which 
is relevant is that which involves the reset button, the power switch, 
or "shutdown -nf".  This is particularly difficult in the case of a cluster 
where a "reboot -nf" or IPMI reboot is a rare but normal part of the 
operation of the system.




Information stored :
Bug#430958; Package dpkg. (Fri, 12 Mar 2010 04:12:08 GMT) Full text and rfc822 format available.

Acknowledgement sent to Guillem Jover <guillem@debian.org>:
Extra info received and filed, but not forwarded. (Fri, 12 Mar 2010 04:12:08 GMT) Full text and rfc822 format available.

Message #37 received at 430958-quiet@bugs.debian.org (full text, mbox):

From: Guillem Jover <guillem@debian.org>
To: Russell Coker <russell@coker.com.au>
Cc: 430958-quiet@bugs.debian.org
Subject: Re: Bug#430958: marked as pending
Date: Fri, 12 Mar 2010 05:08:48 +0100
Hi!

On Sat, 2010-03-06 at 21:35:04 +1100, Russell Coker wrote:
> On Sat, 6 Mar 2010, Guillem Jover <guillem@debian.org> wrote:
> >     This guarantees the file contents will be there in case of abrupt
> >     program termination (due to crashes for example, or user intervention).
> >     This also guarantees the atomicity of rename(2) calls.
> 
> This description is incorrect.

Well I'd say pretty unfortunate or inaccurate more than incorrect. But,
yeah I meant to amend it before the push but it seems I forgot. :/

Thanks for the notice, though!

> fsync() has no bearing on what will happen if the program crashes.  If a 
> program crashes immediately after a write() system call has succeeded then 
> the kernel will take care of flushing the cache to disk afterwards.

> fsync() is used specifically to deal with the case of abrupt OS termination 
> due to a kernel crash or hardware failure.  The only user intervention which 
> is relevant is that which involves the reset button, the power switch, 
> or "shutdown -nf".  This is particularly difficult in the case of a cluster 
> where a "reboot -nf" or IPMI reboot is a rare but normal part of the 
> operation of the system.

Right, with crash and user intervention I was specifically referring to
those kind of cases, and program termination due to those external
causes. In addition fsync() cannot “guarantee the contents will be there
in case of abrupt ...”, it can only guarantee they will be there for the
next operation that might get performed.

Probably the worst commit message I've ever pushed. :) Anyway, not much
that can be done now, as the commit log cannot be modified, and I'm not
sure I can push a git note to a remote repo.

Regardless, the bug should be mostly fixed now, as fsync()s are done
on all extracted files, and on the database directories, the remaining
part is fsync()ing dirty dirs from the file system, but I'll leave
this for later.

regards,
guillem




Reply sent to Guillem Jover <guillem@debian.org>:
You have taken responsibility. (Mon, 15 Mar 2010 11:06:16 GMT) Full text and rfc822 format available.

Notification sent to Russell Coker <russell@coker.com.au>:
Bug acknowledged by developer. (Mon, 15 Mar 2010 11:06:16 GMT) Full text and rfc822 format available.

Message #42 received at 430958-close@bugs.debian.org (full text, mbox):

From: Guillem Jover <guillem@debian.org>
To: 430958-close@bugs.debian.org
Subject: Bug#430958: fixed in dpkg 1.15.6
Date: Mon, 15 Mar 2010 11:03:09 +0000
Source: dpkg
Source-Version: 1.15.6

We believe that the bug you reported is fixed in the latest version of
dpkg, which is due to be installed in the Debian FTP archive:

dpkg-dev_1.15.6_all.deb
  to main/d/dpkg/dpkg-dev_1.15.6_all.deb
dpkg_1.15.6.dsc
  to main/d/dpkg/dpkg_1.15.6.dsc
dpkg_1.15.6.tar.bz2
  to main/d/dpkg/dpkg_1.15.6.tar.bz2
dpkg_1.15.6_amd64.deb
  to main/d/dpkg/dpkg_1.15.6_amd64.deb
dselect_1.15.6_amd64.deb
  to main/d/dpkg/dselect_1.15.6_amd64.deb
libdpkg-dev_1.15.6_amd64.deb
  to main/d/dpkg/libdpkg-dev_1.15.6_amd64.deb
libdpkg-perl_1.15.6_all.deb
  to main/d/dpkg/libdpkg-perl_1.15.6_all.deb



A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 430958@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Guillem Jover <guillem@debian.org> (supplier of updated dpkg package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.8
Date: Fri, 12 Mar 2010 00:15:31 +0100
Source: dpkg
Binary: libdpkg-dev dpkg dpkg-dev libdpkg-perl dselect
Architecture: source amd64 all
Version: 1.15.6
Distribution: experimental
Urgency: low
Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
Changed-By: Guillem Jover <guillem@debian.org>
Description: 
 dpkg       - Debian package management system
 dpkg-dev   - Debian package development tools
 dselect    - Debian package management front-end
 libdpkg-dev - Debian package management static library
 libdpkg-perl - Dpkg perl modules
Closes: 38334 60329 312206 363323 383869 403211 408525 430958 465256 498438 541464 542160 549167 551118 554488 557133 557459 557560 557619 558794 559269 560010 560071 563752 565712 566230 566406 566837 567531 568228 569618 570008 571798 572030 572836 572861
Changes: 
 dpkg (1.15.6) experimental; urgency=low
 .
   [ Raphaël Hertzog ]
   * debian/control: Add the accent on my first name.
   * Perl API cleanup:
     - rename Dpkg::Deps dump() methods into output([$fh]), overload string
       representation ("$dep") to provide the result of $dep->output()
     - prefix public functions in Dpkg::Deps with deps_ and export them
       by default
     - rename Dpkg::Source::Compressor in Dpkg::Compression::Process
     - rename Dpkg::Source::CompressedFile in Dpkg::Compression::FileHandle
       and completely redesign its API
     - update Dpkg::Compression's API to use compression_* functions
       instead of granting direct access to variables, integrate
       there management of default compression
     - introduce Dpkg::Interface::Storable and update many modules
       to make use of it
     - update Dpkg::BuildOptions to provide an object-oriented interface
     - update Dpkg::Checksums to provide an object-oriented interface
   * Drop debian-maintainers from Suggests since it's obsolete, the
     corresponding keyring is in debian-keyring.
   * Merge support of symbol patterns in dpkg-gensymbols. Thanks to
     Modestas Vainius for his work (see further for more details).
   * Accept filename with spaces and colon in the output of objdump.
     Required so that dpkg-shlibdeps support such files properly.
     Thanks to Raphaël Geissert for the patch. Closes: #565712
   * When unpacking a "3.0 (quilt)" source package, tell quilt where
     patches are (to be) stored. Requires quilt >= 0.48-5 to work.
     Closes: #557619
   * Fix update-alternatives to not try to reinstall an unknown alternative
     when the link group is broken, instead switch to the best choice in
     automatic mode. Closes: #566406
   * Don't return duplicate bug numbers in Launchpad-Bugs-Fixed:.
     Thanks to Brian Murray <brian@ubuntu.com> for the report
     and the patch. Closes: #569618
   * Add $VERSION numbers to all perl modules. Closes: #465256
     1.00 and higher means that the API should be stable
   * While parsing diff's output, accept any sentence that contains the word
     differ (as specified by POSIX) to identify that binary files could not be
     compared. Closes: #570008
   * dpkg-gencontrol does no longer accept arch-specific dependencies in
     arch: all packages. Closes: #560071
   * dpkg-gencontrol no longer warns if a substitution variable provided by -V
     is not used (the warning is meant to catch unused substitutions coming
     from the file, those are package specific with debhelper). Closes: #557133
   * dpkg-gencontrol now indicates which package is concerned by the substvars
     warning that it displays. Closes: #566837
   * dpkg-buildpackage now supports options --source-option=<opt> and
     --changes-option=<opt> to forward arbitrary options to dpkg-source and
     dpkg-genchanges respectively. Closes: #566230
   * The -T option of dpkg-{source,gencontrol,genchanges} can now be used
     multiple times to read substitution variables from multiple files.
     Closes: #363323
   * dpkg-source now supports an option --create-empty-orig in formats
     "2.0" and "3.0 (quilt)" to auto-create the main original tarball when
     there are supplementary tarballs. This makes it easier to bundle
     multiple software together. Closes: #554488
   * dpkg-source supports long option names --diff-ignore and --tar-ignore for
     -i and -I. A new option --extend-diff-ignore is introduced. Those options
     can thus now be used in debian/source/options.
   * Generate manual pages for perl modules.
   * Introduce the libdpkg-perl package and clarify its status in README.api.
   * Update Standards-Version to 3.8.4 (no changes needed).
   * Drop unused lintian override for arch-dep-package-has-big-usr-share on
     dselect.
   * The rewritten Dpkg::Checksums deals properly with filenames with
     spaces. Closes: #572030
   * dpkg-source does no longer fallback to other source formats if the
     requested one is not usable. Closes: #557459
   * Modify dpkg-source to error out when it would apply patches containing
     insecure paths (with "/../") and also error out when it would apply a
     patch through a symlink. Those checks are required as patch will happily
     modify files outside of the target directory and unpacking a source package
     should not be able to have any side-effect outside of the target
     directory. Fixes CVE-2010-0396.
   * Also error out when the quilt series contains a path with "/../" as this
     can cause patch to create files outside of the source package due
     to the -B .pc/$path option that it gets.
 .
   [ Guillem Jover ]
   * Handle argument parsing in dpkg-checkbuilddeps and dpkg-scanpackages
     in a way consistent with the rest of the tools.
   * Recognize --help in addition to -h in dpkg-checkbuilddeps.
   * Add a --version option to dpkg-checkbuilddeps.
   * Improve and mark more messages in writedb() to make translators lifes
     easier. Closes: #408525
   * Improve update-alternatives --display output to use two leading spaces
     for current link and slave information. Use single quotes for both “best”
     and the alternative it's pointing to. Closes: #549167
   * Refer to “half configured” instead of “failed config” in «dpkg-query -l»
     header and dselect package status printing for consistency.
   * Make “dpkg-statoverride --quiet” actually do something, and quiesce
     most of the inoquous warning messages. Closes: #403211
   * Make “dpkg-statoverride --update --add” fail if it cannot update the
     mode and owner of the file. This would fail later on when dpkg itself
     applies the overrides, so better to signal this earlier.
   * Add sparc64 to cputable. Thanks to Aurelien Jarno <aurel32@debian.org>.
     Closes: #560010
   * Do not allow diverting a file to itself, which makes the file to get
     removed. Closes: #312206
   * Make the check for duplicate fields in a stanza in libdpkg actually work,
     which now makes it fatal, as was intended originally. This should not
     cause problems for anything using dpkg-dev to build packages as those
     are already fatal on that case.
   * Add new deb-split(5) man page.
   * Fix misspellings of “explicitly” all over the place.
   * Normalize ar member names when reading (removing trailing spaces and
     slash), this allows deb-split packages be created with GNU ar.
   * Validate compression level on dpkg-deb argument parsing.
   * Fix error handling, clean up and refactor compression code.
     Thanks to Jonathan Nieder for several of the patches.
   * Do not print unambiguous epoch on dpkg file overwrite error.
   * Rename Dpkg::IPC::fork_and_exec() to Dpkg::IPC::spawn().
   * Change dpkg-dev to Depend on perl instead of perl5 and perl-modules.
   * Fix small memory leaks related to scandir() in dpkg-deb and libdpkg.
   * Fix dpkg-query and dpkg-trigger to actually print a version on --version.
   * Always spawn a new shell on conffile prompt, instead of supporting
     self backgrounding, remove DPKG_NO_TSTP environment variable support.
     Closes: #38334
   * Set DPKG_SHELL_REASON, DPKG_CONFFILE_OLD and DPKG_CONFFILE_NEW environment
     variables when spawning a shell for conffile examination. Closes: #60329
     Thanks to Daniel Martin <Daniel.Martin@jhu.edu> for the idea.
   * Add support for disabling update-alternatives at configure time using
     --withouth-update-alternatives.
   * Add support for disabling install-info at configure time using
     --withouth-install-info.
   * Update debian/copyright.
   * Use Debian instead of ‘Debian GNU/Linux’ when referring to the
     distribution.
   * On dpkg --no-act with --install, --unpack or --record-avail, and
     dpkg-deb --info or --field use mkdtemp() to create a temporary directory
     instead of insecure tempnam() or tmpnam() functions.
   * Remove --license and --licence options from tools.
   * Securely remove newly installed files when rolling-back a failed unpack.
   * Change default lzma compression level from 9 to 6.
     Thanks to Jonathan Nieder for the initial patch.
   * Add support for xz compressed data.tar member of binary packages. Add
     xz-utils to dpkg's Pre-Depends. Closes: #542160
     Thanks to Jonathan Nieder for the initial patch.
   * Use xz command to handle lzma compressed files in dpkg and dpkg-dev.
     This removes the lzma package from both dpkg and dpkg-dev dependencies.
   * Do not set PKG_CONFIG_LIBDIR in dpkg-buildpackage when cross-building.
     The proper solution to this is to let the build system choose the
     appropriate pkg-config binary for the build or host system in the same
     way pkg.m4 is handling it now. Closes: #551118
   * Dynamically link against all external libraries. This includes libbz2
     and zlib for dpkg-deb and and libselinux for dpkg on GNU/Linux.
   * Mark the libdpkg.a API as volatile and require any possible users to set
     LIBDPKG_VOLATILE_API to acknowledge that fact.
   * Add a new libdpkg-dev package with the headers and the static library,
     although its API should be considered volatile.
   * Reorganize the doc contents that goes into each package:
     - README.multicd only in dselect.
     - README.api only in development packages, dpkg-dev and libdpkg-dev.
     - triggers.txt only in dpkg-dev.
   * Move source.lintian-overrides to debian/source/lintian-overrides.
   * Switch SE Linux support to explicitly set path context. This fixes the
     mislabeling of files under <admindir> on conffile extraction or on unpack
     errors, due to improper default context restoration. Closes: #498438
   * Use FIEMAP when available (on Linux based systems) to sort the .list
     files loading order. With a cold cache it improves up to a 70%.
     Thanks to Morten Hustveit <morten@debian.org>.
   * When FIEMAP is not available use posix_fadvise() to start preloading the
     .list files before loading them. With a cold cache it improves up to 40%.
     Thanks to Stefan Fritsch <sf@sfritsch.de>. Closes: #557560
   * Call fsync(2) after writting files on disk, to get the atomicity
     guarantees when doing rename(2). Based on a patch by
     Jean-Baptiste Lallement <jeanbaptiste.lallement@gmail.com>.
     Closes: #430958
   * Call fsync(2) on database directories after creating, renaming or
     unlinking files, to guarantee the new file entry is correctly listed
     in the directory. Base on a patch by
     Jean-Baptiste Lallement <jeanbaptiste.lallement@gmail.com>.
   * Document in the man page the effects of setting TMPDIR for dpkg and
     dpkg-deb, HOME for dselect and dpkg and PAGER for dpkg. Closes: #572836
   * Document the exit codes for dpkg-query. Closes: #571798
   * Document “dpkg-query -l” abbreviated state information in the man page.
     Based on a patch by Marc-Jano Knopp <pub_br_debian.org@marc-jano.de>.
     Closes: #383869
   * Honour LINGUAS environment variable when installing translated man pages.
   * Allow disabling at configure time Unicode ncurses support for dselect.
     Based on a patch by Yuri Vasilevski <yvasilev@gentoo.org>.
 .
   [ Modestas Vainius ]
   * Implement symbol patterns (Closes: #563752). From now on, it is possible to
     match multiple symbols with a single entry in the symbol file template.
     While the concept is not new (wildcards also match multiple symbols),
     patterns cover much more ground and are a lot more flexible. Together with
     the framework, 3 basic pattern types are supported:
     - c++ - matching C++ symbols by their demangled name (as emitted by
       c++filt);
     - symver - matching by symbol version. It replaces the wildcards feature
       which is still supported for backwards compatibility but is reimplemented
       on top of the new framework;
     - regex - matching symbol names with perl regular expression.
     Basic patterns may be combined where it makes sense.
   * As a positive side effect of the new symbol patterns implementation,
     patterns are now treated like normal symbols whenever possible, e.g. a
     pattern is MISSING if it does not match anything. As a result,
     dpkg-gensymbols is now able to detect NEW/MISSING symbols when patterns are
     present in the symbol file (Closes: #541464). Please note, however, that
     there is no way to detect symbol changes in the pattern match sets.
   * Add source version to the dpkg-gensymbols diff label, reformat it according
     to the rules of dpkg-name.
   * Add -a<arch> option to dpkg-gensymbols.
   * Add -q option to dpkg-gensymbols. -c0 will never fail but still generate a
     diff. Use -c0 -q to keep dpkg-gensymbols completely quiet as before
     (Closes: #568228).
 .
   [ Jonathan Nieder ]
   * Fix a file handle leak in “dpkg-deb --info”. Thanks to Raphael Geissert
     for the report and patch.
 .
   [ Helge Kreutzmann ]
   * Add dpkg-gensymbols.1 to the translatable man page set.
 .
   [ Updated dpkg translations ]
   * Catalan (Guillem Jover).
   * French (Christian PERRIER).
   * German (Sven Joachim).
   * Italian 'Milo Casagrande). Closes: #567531
   * Simplified Chinese (Aron Xua). Closes: #558794
   * Slovak (Ivan Masár). Closes: #559269
   * Swedish (Peter Krefting).
 .
   [ Updated dselect translations ]
   * Catalan (Guillem Jover).
   * German (Sven Joachim).
   * Spanish (Javier Fernández-Sanguino). Closes: #572861
   * Swedish (Peter Krefting).
 .
   [ Updated man page translations ]
   * French (Christian Perrier): correcting inconsistencies for the translation
     of "original" here and there. Thanks to Julien Valroff for pointing this.
   * German (Helge Kreutzmann).
   * Swedish (Peter Krefting).
 .
   [ Updated scripts translations ]
   * Catalan (Guillem Jover).
   * French (Christian PERRIER).
   * German (Helge Kreutzmann).
   * Swedish (Peter Krefting).
Checksums-Sha1: 
 abb709759fd109efb9f644bd48590caf1a2a6b2b 1213 dpkg_1.15.6.dsc
 8eeac057c2f86768c941fb49d8148bff46b3390a 4845122 dpkg_1.15.6.tar.bz2
 7a6cc95b1e84e471203ef1586c3cea42e04902e6 359058 libdpkg-dev_1.15.6_amd64.deb
 379de54f120c129aec0d093ea11a608464b14286 2047990 dpkg_1.15.6_amd64.deb
 b7011693da0d3a4b31fba7dce74e5822ebf792d4 815156 dselect_1.15.6_amd64.deb
 516a94fdb2cf196eabee58ff9b182a8dea9281c8 636454 dpkg-dev_1.15.6_all.deb
 49882bd2c628e3fb98b850ebe073d8da64e53032 561102 libdpkg-perl_1.15.6_all.deb
Checksums-Sha256: 
 9e4d5c7fe0fa25c943468f8f056370f275061b67b010eff498682149eda62ebb 1213 dpkg_1.15.6.dsc
 0c942d4b556aea1517761ae937518d2de19692b494987653eca9c3316e3d2304 4845122 dpkg_1.15.6.tar.bz2
 ed3f5059ea5698f335cd5379352e3cd5741bbfc8dc963cbd815ec3465bfc3811 359058 libdpkg-dev_1.15.6_amd64.deb
 55958b6bd781bdf7f39db24699cb619430fd51e580345fbd9fe878b892f54a93 2047990 dpkg_1.15.6_amd64.deb
 7dcfde4c0da126d26d9f5210c3ec728e1c45219ff56187e14ce7923a015af15d 815156 dselect_1.15.6_amd64.deb
 4959c42d5a4406332813fa29e1718eaa689f7d7906fdebae5631e9754a828b04 636454 dpkg-dev_1.15.6_all.deb
 5e4fc9fe95935e6bf358ec76413e02e89ec93cf4cdf9ae636ecf23960e57c437 561102 libdpkg-perl_1.15.6_all.deb
Files: 
 ee502aafef4f0acebf2fee2ae3be95fb 1213 admin required dpkg_1.15.6.dsc
 6642d6725b5c1ba293fd30e7ae661be2 4845122 admin required dpkg_1.15.6.tar.bz2
 b1f38bfe7ea5e9102a7d84e70d9d1c91 359058 libdevel optional libdpkg-dev_1.15.6_amd64.deb
 cad0deec4cc82b8d8385580613c35c29 2047990 admin required dpkg_1.15.6_amd64.deb
 be5fabecbc1fac9207d86259b8657e00 815156 admin optional dselect_1.15.6_amd64.deb
 4143a0e559a4223dc298f46797a26895 636454 utils optional dpkg-dev_1.15.6_all.deb
 b26ea0b2526061f6b7954e9afe9de5bf 561102 perl optional libdpkg-perl_1.15.6_all.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAkuZoNsACgkQuW9ciZ2SjJsOjwCglNOqYyPa/ijiDaH9oHv6AhKW
dl0AoK1+DiRE2w6ihOHZCbLp9xeEhPzk
=RgXv
-----END PGP SIGNATURE-----





Reply sent to Guillem Jover <guillem@debian.org>:
You have taken responsibility. (Mon, 15 Mar 2010 11:06:18 GMT) Full text and rfc822 format available.

Notification sent to Raphaël Hertzog <hertzog@debian.org>:
Bug acknowledged by developer. (Mon, 15 Mar 2010 11:06:18 GMT) Full text and rfc822 format available.

Bug archived. Request was from Debbugs Internal Request <owner@bugs.debian.org> to internal_control@bugs.debian.org. (Thu, 20 May 2010 07:37:49 GMT) Full text and rfc822 format available.

Send a report that this bug log contains spam.


Debian bug tracking system administrator <owner@bugs.debian.org>. Last modified: Thu Apr 17 04:33:23 2014; Machine Name: beach.debian.org

Debian Bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.