Merge lp:~vorlon/ubuntu/natty/eglibc/multiarch-support into lp:ubuntu/natty/eglibc

Proposed by Steve Langasek
Status: Merged
Merged at revision: 134
Proposed branch: lp:~vorlon/ubuntu/natty/eglibc/multiarch-support
Merge into: lp:ubuntu/natty/eglibc
Diff against target: 129 lines (+44/-6)
5 files modified
debian/changelog (+10/-0)
debian/control (+18/-4)
debian/control.in/libc (+1/-1)
debian/control.in/main (+14/-0)
debian/rules (+1/-1)
To merge this branch: bzr merge lp:~vorlon/ubuntu/natty/eglibc/multiarch-support
Reviewer Review Type Date Requested Status
Colin Watson Approve
Martin Pitt Approve
Ubuntu Release Team Pending
Review via email: mp+54135@code.launchpad.net

Description of the change

Currently, trying to install any foreign arch libraries with apt will fail with this error:

  E: Couldn't configure pre-depend multiarch-support for libgcc1, probably a dependency cycle.

This is correct behavior on the part of apt. libc6 Provides: multiarch-support, libgcc1 Pre-Depends: multiarch-support, libc6 Depends: libgcc1.

The proposed branch will break this dependency loop for foreign arch packages by making 'multiarch-support' a real, Multi-Arch: foreign package depending on the native libc to satisfy these dependencies. I believe this should have no effect on the native system, which avoids this dependency loop by having the necessary libraries installed before apt is ever called; and I believe it's safe for foreign architectures because a) there's no way you're getting a foreign libc unpacked, *period*, unless it's already Multi-Arch: same, and there should be no libc package that's Multi-Arch: same that doesn't also support the multiarch paths; and b) it's the foreign arch, so if I'm wrong about this there's no danger to the package manager's integrity (you can't cross-grade the base system yet).

But it's late in the cycle and this is a new (if contentless) binary package being added to the base system, so I'm requesting the release team's review before landing this change.

To post a comment you must log in.
Revision history for this message
Steve Langasek (vorlon) wrote :

Hmm, just noticed that requesting review from 'ubuntu-release' didn't seem to actually generate any useful mails. Requesting review from Colin and/or Martin explicitly.

Revision history for this message
Steve Langasek (vorlon) wrote :

BTW, have upgrade-tested this in ppa and maverick->natty and natty->natty both go fine.

Revision history for this message
Martin Pitt (pitti) wrote :

The reasoning makes sense to me. However, what I don't understand why the new "multiarch-support" real package is described as being transitional? As far as I understood, the reason for existing won't go away after an upgrade?

Revision history for this message
Steve Langasek (vorlon) wrote :

It's transitional because after a full release cycle or so, there will be no libc6 that doesn't provide this support, so we can drop the pre-depends.

Revision history for this message
Martin Pitt (pitti) wrote :

Ah, thanks for the clarification. Seems fine to me then.

Revision history for this message
Martin Pitt (pitti) :
review: Approve
Revision history for this message
Colin Watson (cjwatson) wrote :

Makes sense to me too, for the record.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2011-03-19 21:22:50 +0000
+++ debian/changelog 2011-03-20 21:42:49 +0000
@@ -5,6 +5,16 @@
5 * debian/sysdeps/armhf.mk: use /lib/$(DEB_HOST_MULTIARCH) for rtlddir, so5 * debian/sysdeps/armhf.mk: use /lib/$(DEB_HOST_MULTIARCH) for rtlddir, so
6 that we avoid a file conflict with the armel libc and armel+armhf can6 that we avoid a file conflict with the armel libc and armel+armhf can
7 be multiarch-coinstallable.7 be multiarch-coinstallable.
8 * debian/control.in/libc, debian/control.in/main: make multiarch-support a
9 real package depending on the native libc; this eliminates the problem
10 of a circular depends/pre-depends loop never permitting apt to install
11 the base libraries for any foreign architecture. We still have the
12 dependency loop for the native architecture, which is safe (and needs to
13 be enforced!), but whenever a package is installed non-native, it's ok
14 to bypass this requirement (which is effectively what we're doing by
15 making multiarch-support Multi-Arch: foreign), because none of the
16 concerned library packages are installable at all unless a Multi-Arch:
17 same libc6 is available.
818
9 -- Steve Langasek <steve.langasek@ubuntu.com> Thu, 17 Mar 2011 22:49:13 -070019 -- Steve Langasek <steve.langasek@ubuntu.com> Thu, 17 Mar 2011 22:49:13 -0700
1020
1121
=== modified file 'debian/control'
--- debian/control 2011-03-15 16:44:57 +0000
+++ debian/control 2011-03-20 21:42:49 +0000
@@ -117,6 +117,20 @@
117 query. You should install this package only if you use117 query. You should install this package only if you use
118 slow Services like LDAP, NIS or NIS+118 slow Services like LDAP, NIS or NIS+
119119
120Package: multiarch-support
121Architecture: any
122Multi-Arch: foreign
123Depends: libc6 (>= 2.3.6-2) [!any-i386 !alpha !ia64 !hurd-any !kfreebsd-any],
124 libc6.1 (>= 2.3.6-2) [alpha ia64],
125 libc0.3 (>= 2.3.6-2) [hurd-any],
126 libc0.1 (>= 2.3.6-2) [kfreebsd-any],
127 libc6 (>= 2.13-0ubuntu6) [any-i386]
128Priority: standard
129Description: Transitional package to ensure multiarch compatibility
130 This is a transitional package used to ensure multiarch support is present
131 in ld.so before unpacking libraries to the multiarch directories. It can
132 be removed once nothing on the system depends on it.
133
120Package: libc6134Package: libc6
121Architecture: amd64 arm armeb armel armhf i386 lpia m32r m68k mips mipsel powerpc powerpcspe ppc64 sparc sparc64 s390 hppa sh3 sh4 sh3eb sh4eb135Architecture: amd64 arm armeb armel armhf i386 lpia m32r m68k mips mipsel powerpc powerpcspe ppc64 sparc sparc64 s390 hppa sh3 sh4 sh3eb sh4eb
122Section: libs136Section: libs
@@ -125,7 +139,7 @@
125Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata139Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
126Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]140Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
127Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]141Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
128Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support142Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
129Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]143Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
130Replaces: belocs-locales-bin,144Replaces: belocs-locales-bin,
131 libc6-amd64 [amd64],145 libc6-amd64 [amd64],
@@ -211,7 +225,7 @@
211Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata225Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
212Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]226Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
213Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]227Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
214Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support228Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
215Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]229Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
216Replaces: belocs-locales-bin,230Replaces: belocs-locales-bin,
217 libc6-amd64 [amd64],231 libc6-amd64 [amd64],
@@ -297,7 +311,7 @@
297Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata311Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
298Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]312Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
299Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]313Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
300Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support314Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
301Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]315Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
302Replaces: belocs-locales-bin,316Replaces: belocs-locales-bin,
303 libc6-amd64 [amd64],317 libc6-amd64 [amd64],
@@ -383,7 +397,7 @@
383Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata397Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
384Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]398Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
385Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]399Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
386Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support400Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
387Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]401Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
388Replaces: belocs-locales-bin,402Replaces: belocs-locales-bin,
389 libc6-amd64 [amd64],403 libc6-amd64 [amd64],
390404
=== modified file 'debian/control.in/libc'
--- debian/control.in/libc 2011-03-09 01:04:13 +0000
+++ debian/control.in/libc 2011-03-20 21:42:49 +0000
@@ -6,7 +6,7 @@
6Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata6Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
7Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]7Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
8Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]8Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
9Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support9Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
10Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]10Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
11Replaces: belocs-locales-bin,11Replaces: belocs-locales-bin,
12 libc6-amd64 [amd64],12 libc6-amd64 [amd64],
1313
=== modified file 'debian/control.in/main'
--- debian/control.in/main 2011-03-15 16:44:57 +0000
+++ debian/control.in/main 2011-03-20 21:42:49 +0000
@@ -117,3 +117,17 @@
117 query. You should install this package only if you use117 query. You should install this package only if you use
118 slow Services like LDAP, NIS or NIS+118 slow Services like LDAP, NIS or NIS+
119119
120Package: multiarch-support
121Architecture: any
122Multi-Arch: foreign
123Depends: libc6 (>= 2.3.6-2) [!any-i386 !alpha !ia64 !hurd-any !kfreebsd-any],
124 libc6.1 (>= 2.3.6-2) [alpha ia64],
125 libc0.3 (>= 2.3.6-2) [hurd-any],
126 libc0.1 (>= 2.3.6-2) [kfreebsd-any],
127 libc6 (>= 2.13-0ubuntu6) [any-i386]
128Priority: standard
129Description: Transitional package to ensure multiarch compatibility
130 This is a transitional package used to ensure multiarch support is present
131 in ld.so before unpacking libraries to the multiarch directories. It can
132 be removed once nothing on the system depends on it.
133
120134
=== modified file 'debian/rules'
--- debian/rules 2011-03-09 01:18:54 +0000
+++ debian/rules 2011-03-20 21:42:49 +0000
@@ -151,7 +151,7 @@
151 DEB_INDEP_REGULAR_PACKAGES =151 DEB_INDEP_REGULAR_PACKAGES =
152 DEB_UDEB_PACKAGES =152 DEB_UDEB_PACKAGES =
153else153else
154 DEB_ARCH_REGULAR_PACKAGES = $(libc) $(libc)-dev $(libc)-dbg $(libc)-prof $(libc)-pic libc-bin libc-dev-bin154 DEB_ARCH_REGULAR_PACKAGES = $(libc) $(libc)-dev $(libc)-dbg $(libc)-prof $(libc)-pic libc-bin libc-dev-bin multiarch-support
155 DEB_INDEP_REGULAR_PACKAGES = glibc-doc eglibc-source155 DEB_INDEP_REGULAR_PACKAGES = glibc-doc eglibc-source
156 DEB_UDEB_PACKAGES = $(libc)-udeb libnss-dns-udeb libnss-files-udeb156 DEB_UDEB_PACKAGES = $(libc)-udeb libnss-dns-udeb libnss-files-udeb
157endif157endif

Subscribers

People subscribed via source and target branches