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

Re: Summary: dpkg shared / reference counted files and version match

* Guillem Jover [2012-02-10 23:56 +0100]:
> * binNMUs for the same version might not be co-installable because doc
>   generators, compressors, etc, might not always produce the same output.
>   ... A possible fix, but only for the compressed files case might be to
>   ship them uncompresesd, but that counters the desire to reduce wasted
>   space.

An other fix is to reuse the compressed files from an existing binary
package (after verifying that the file's uncompressed content is the
same) as last resort solution.  Such a tool could be used on buildds and
manually by maintainers if necessary, for example for binNMUs if we do
not solve the current gzip problem or if gzip's format will change.

> * binNMUs for the same version cannot be co-installed anyway as their
>   changelogs differ.

Packages could ship /u/s/d/package/changelog:#ARCH#.{gz,Debian.gz}, and
in postinst create a symlink from the current changelog location to an
arch qualified one:

    [ -e $bn:#ARCH#.$ext ] || [ -L $bn:#ARCH#.$ext ] || ext=gz
    [ -e $bn.$ext ] || [ -L $bn.$ext ] ||
            ln -sn changelog:#ARCH#.$ext $bn.$ext 2>/dev/null || :

The prerm script would either remove or change the symlink if it points
to the package being removed.

Notes/Remarks :

 * Instead of symlinks, diversions could be used, possibly in
   combination with hardlinks if the files do not differ.
 * Line 2 and 3 could be replaced by an assignment, given that there are
   two variants of both scripts and debhelper includes the appropriate
 * The according prerm currently has 373 bytes, and used to have way
   more before I switched to a more compact code.
 * If 'changelog' and architecture would be separated by a period and
   not by a colon, it would be impossible to distinguish between, for
   example, changelog.amd64.gz and changelog.old.gz without knowing
   a complete list of all possible architectures.
 * test -ef (as shell builtin) is not allowed in maintainer scripts.


Reply to: