Package: gconf
Version: 3.2.3-4.1
Severity: important
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu precise ubuntu-patch

Hi again,

Another upgrade issue has been reported related to the gconf multiarch
split.  This time, a known bug in the version of apt in Ubuntu 11.10 has
been seen causing gconf-service:i386 to be installed on an amd64 machine
together with gconf2:amd64:

  https://bugs.launchpad.net/ubuntu/+source/gconf/+bug/962854

While apt should not have chosen the :i386 package when the :amd64 package
would have worked, the fact that the :i386 package satisfies the dependency
of gconf2 is a bug.  This means that Multi-Arch: foreign is the wrong tag to
use for gconf2, which needs to be able to load the backend plugins contained
in gconf-service.

Per the multiarch spec, the intended label for a package such as
gconf-service that exposes both arch-dependent and arch-independent
interfaces is Multi-Arch: allowed.  However, to take advantage of M-A:
allowed, packages would need to depend on gconf-service:any, which won't
work with the apt in squeeze.  I've therefore uploaded the attached
workaround to Ubuntu, which further splits the package into a M-A: foreign
gconf-service, listed in the shlibs and used as the dependency for all
packages other than gconf2; and a M-A: none gconf-service-backend, containing
the actual files and used as the dependency of gconf2 and gconf-service.

>From the Ubuntu changelog:

  * Split gconf-service further into gconf-service and gconf-service-backend,
    one package being Multi-Arch: foreign and the other Multi-Arch: none, so
    that we correctly handle the fact that gconf2 needs backend modules of
    the same arch whereas other reverse-dependencies just need a working
    daemon.  LP: #962854.

This isn't pretty, but it's the best way to ensure clean upgrades from
pre-multiarch toolchains; so I think that's the best solution for Debian as
well.

-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
Ubuntu Developer                                    http://www.debian.org/
slanga...@ubuntu.com                                     vor...@debian.org
diff -Nru gconf-3.2.3/debian/changelog gconf-3.2.3/debian/changelog
diff -Nru gconf-3.2.3/debian/control gconf-3.2.3/debian/control
--- gconf-3.2.3/debian/control	2012-03-17 09:24:11.000000000 -0700
+++ gconf-3.2.3/debian/control	2012-03-23 15:47:02.000000000 -0700
@@ -38,7 +38,7 @@
 Multi-Arch: foreign
 Depends: ${shlibs:Depends},
          ${misc:Depends},
-         gconf-service (= ${binary:Version}),
+         gconf-service-backend (= ${binary:Version}),
          psmisc,
          dbus-x11,
          ${python:Depends}
@@ -56,12 +56,27 @@
 Package: gconf-service
 Architecture: any
 Multi-Arch: foreign
+Depends: gconf-service-backend (= ${binary:Version}),
+         ${shlibs:Depends},
+         ${misc:Depends}
+Description: GNOME configuration database system (D-Bus service)
+ GConf is a configuration database system for storing application
+ preferences. It supports default or mandatory settings set by the
+ administrator, and changes to the database are instantly applied to all
+ running applications. It is written for the GNOME desktop but doesn't
+ require it.
+ .
+ This package provides the D-Bus enabled daemon that is used internally 
+ by the GConf library to access configuration data.
+
+Package: gconf-service-backend
+Architecture: any
 Depends: ${shlibs:Depends},
          ${misc:Depends},
          libgconf-2-4 (= ${binary:Version}),
          gconf2-common (= ${source:Version})
 Breaks: gconf2-common (<< 3.2.3-2)
-Replaces: gconf2-common (<< 3.2.3-2)
+Replaces: gconf2-common (<< 3.2.3-2), gconf-service (<< 3.2.3-4.1)
 Description: GNOME configuration database system (D-Bus service)
  GConf is a configuration database system for storing application
  preferences. It supports default or mandatory settings set by the
@@ -70,7 +85,9 @@
  require it.
  .
  This package contains the D-Bus enabled daemon that is used internally 
- by the GConf library to access configuration data.
+ by the GConf library to access configuration data.  It is an internal
+ implementation of gconf used to work around multiarch-related upgrade
+ problems, and will eventually be merged back into gconf-service.
 
 Package: gconf2-common
 Architecture: all
diff -Nru gconf-3.2.3/debian/control.in gconf-3.2.3/debian/control.in
--- gconf-3.2.3/debian/control.in	2012-03-12 09:26:38.000000000 -0700
+++ gconf-3.2.3/debian/control.in	2012-03-23 15:44:10.000000000 -0700
@@ -33,7 +33,7 @@
 Multi-Arch: foreign
 Depends: ${shlibs:Depends},
          ${misc:Depends},
-         gconf-service (= ${binary:Version}),
+         gconf-service-backend (= ${binary:Version}),
          psmisc,
          dbus-x11,
          ${python:Depends}
@@ -51,12 +51,27 @@
 Package: gconf-service
 Architecture: any
 Multi-Arch: foreign
+Depends: gconf-service-backend (= ${binary:Version}),
+         ${shlibs:Depends},
+         ${misc:Depends}
+Description: GNOME configuration database system (D-Bus service)
+ GConf is a configuration database system for storing application
+ preferences. It supports default or mandatory settings set by the
+ administrator, and changes to the database are instantly applied to all
+ running applications. It is written for the GNOME desktop but doesn't
+ require it.
+ .
+ This package provides the D-Bus enabled daemon that is used internally 
+ by the GConf library to access configuration data.
+
+Package: gconf-service-backend
+Architecture: any
 Depends: ${shlibs:Depends},
          ${misc:Depends},
          libgconf-2-4 (= ${binary:Version}),
          gconf2-common (= ${source:Version})
 Breaks: gconf2-common (<< 3.2.3-2)
-Replaces: gconf2-common (<< 3.2.3-2)
+Replaces: gconf2-common (<< 3.2.3-2), gconf-service (<< 3.2.3-4.1)
 Description: GNOME configuration database system (D-Bus service)
  GConf is a configuration database system for storing application
  preferences. It supports default or mandatory settings set by the
@@ -65,7 +80,9 @@
  require it.
  .
  This package contains the D-Bus enabled daemon that is used internally 
- by the GConf library to access configuration data.
+ by the GConf library to access configuration data.  It is an internal
+ implementation of gconf used to work around multiarch-related upgrade
+ problems, and will eventually be merged back into gconf-service.
 
 Package: gconf2-common
 Architecture: all
diff -Nru gconf-3.2.3/debian/gconf-service-backend.install gconf-3.2.3/debian/gconf-service-backend.install
--- gconf-3.2.3/debian/gconf-service-backend.install	1969-12-31 16:00:00.000000000 -0800
+++ gconf-3.2.3/debian/gconf-service-backend.install	2012-02-23 12:56:44.000000000 -0800
@@ -0,0 +1,3 @@
+usr/lib/*/gconf/gconfd-2
+usr/lib/*/gconf/2/*.so
+usr/share/dbus-1/services
diff -Nru gconf-3.2.3/debian/gconf-service.install gconf-3.2.3/debian/gconf-service.install
--- gconf-3.2.3/debian/gconf-service.install	2012-02-23 12:56:44.000000000 -0800
+++ gconf-3.2.3/debian/gconf-service.install	1969-12-31 16:00:00.000000000 -0800
@@ -1,3 +0,0 @@
-usr/lib/*/gconf/gconfd-2
-usr/lib/*/gconf/2/*.so
-usr/share/dbus-1/services
diff -Nru gconf-3.2.3/debian/rules gconf-3.2.3/debian/rules
--- gconf-3.2.3/debian/rules	2012-02-23 12:56:44.000000000 -0800
+++ gconf-3.2.3/debian/rules	2012-03-23 15:43:34.000000000 -0700
@@ -30,7 +30,7 @@
 
 LDFLAGS += -Wl,-z,defs -Wl,--as-needed
 
-DEB_DH_MAKESHLIBS_ARGS_gconf-service += -Xbackend
+DEB_DH_MAKESHLIBS_ARGS_gconf-service-backend += -Xbackend
 DEB_DH_MAKESHLIBS_ARGS_libgconf-2-4 += -V"libgconf-2-4 (>= 2.31.1), gconf-service"
 
 DEB_COMPRESS_EXCLUDE += usr/share/doc/gconf2/html

Reply via email to