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
1=== modified file 'debian/changelog'
2--- debian/changelog 2011-03-19 21:22:50 +0000
3+++ debian/changelog 2011-03-20 21:42:49 +0000
4@@ -5,6 +5,16 @@
5 * 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 can
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.
18
19 -- Steve Langasek <steve.langasek@ubuntu.com> Thu, 17 Mar 2011 22:49:13 -0700
20
21
22=== modified file 'debian/control'
23--- debian/control 2011-03-15 16:44:57 +0000
24+++ debian/control 2011-03-20 21:42:49 +0000
25@@ -117,6 +117,20 @@
26 query. You should install this package only if you use
27 slow Services like LDAP, NIS or NIS+
28
29+Package: multiarch-support
30+Architecture: any
31+Multi-Arch: foreign
32+Depends: libc6 (>= 2.3.6-2) [!any-i386 !alpha !ia64 !hurd-any !kfreebsd-any],
33+ libc6.1 (>= 2.3.6-2) [alpha ia64],
34+ libc0.3 (>= 2.3.6-2) [hurd-any],
35+ libc0.1 (>= 2.3.6-2) [kfreebsd-any],
36+ libc6 (>= 2.13-0ubuntu6) [any-i386]
37+Priority: standard
38+Description: Transitional package to ensure multiarch compatibility
39+ This is a transitional package used to ensure multiarch support is present
40+ in ld.so before unpacking libraries to the multiarch directories. It can
41+ be removed once nothing on the system depends on it.
42+
43 Package: libc6
44 Architecture: amd64 arm armeb armel armhf i386 lpia m32r m68k mips mipsel powerpc powerpcspe ppc64 sparc sparc64 s390 hppa sh3 sh4 sh3eb sh4eb
45 Section: libs
46@@ -125,7 +139,7 @@
47 Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
48 Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
49 Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
50-Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support
51+Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
52 Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
53 Replaces: belocs-locales-bin,
54 libc6-amd64 [amd64],
55@@ -211,7 +225,7 @@
56 Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
57 Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
58 Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
59-Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support
60+Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
61 Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
62 Replaces: belocs-locales-bin,
63 libc6-amd64 [amd64],
64@@ -297,7 +311,7 @@
65 Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
66 Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
67 Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
68-Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support
69+Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
70 Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
71 Replaces: belocs-locales-bin,
72 libc6-amd64 [amd64],
73@@ -383,7 +397,7 @@
74 Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
75 Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
76 Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
77-Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support
78+Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
79 Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
80 Replaces: belocs-locales-bin,
81 libc6-amd64 [amd64],
82
83=== modified file 'debian/control.in/libc'
84--- debian/control.in/libc 2011-03-09 01:04:13 +0000
85+++ debian/control.in/libc 2011-03-20 21:42:49 +0000
86@@ -6,7 +6,7 @@
87 Depends: libc-bin (= ${binary:Version}), hurd (>= 20070606-1+SVN) [hurd-i386], libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4 [hppa], tzdata
88 Recommends: libc0.1-i686 [kfreebsd-i386], libc0.3-i686 [hurd-i386]
89 Suggests: glibc-doc, debconf | debconf-2.0, locales [!hurd-i386]
90-Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64], multiarch-support
91+Provides: ${locale-compat:Depends}, libc6-i686 [i386], libc6-sparcv9b [sparc sparc64]
92 Conflicts: tzdata-etch, tzdata (<< 2007k-1), prelink (<< 0.0.20090925), belocs-locales-bin, libc6-i686 [i386]
93 Replaces: belocs-locales-bin,
94 libc6-amd64 [amd64],
95
96=== modified file 'debian/control.in/main'
97--- debian/control.in/main 2011-03-15 16:44:57 +0000
98+++ debian/control.in/main 2011-03-20 21:42:49 +0000
99@@ -117,3 +117,17 @@
100 query. You should install this package only if you use
101 slow Services like LDAP, NIS or NIS+
102
103+Package: multiarch-support
104+Architecture: any
105+Multi-Arch: foreign
106+Depends: libc6 (>= 2.3.6-2) [!any-i386 !alpha !ia64 !hurd-any !kfreebsd-any],
107+ libc6.1 (>= 2.3.6-2) [alpha ia64],
108+ libc0.3 (>= 2.3.6-2) [hurd-any],
109+ libc0.1 (>= 2.3.6-2) [kfreebsd-any],
110+ libc6 (>= 2.13-0ubuntu6) [any-i386]
111+Priority: standard
112+Description: Transitional package to ensure multiarch compatibility
113+ This is a transitional package used to ensure multiarch support is present
114+ in ld.so before unpacking libraries to the multiarch directories. It can
115+ be removed once nothing on the system depends on it.
116+
117
118=== modified file 'debian/rules'
119--- debian/rules 2011-03-09 01:18:54 +0000
120+++ debian/rules 2011-03-20 21:42:49 +0000
121@@ -151,7 +151,7 @@
122 DEB_INDEP_REGULAR_PACKAGES =
123 DEB_UDEB_PACKAGES =
124 else
125- DEB_ARCH_REGULAR_PACKAGES = $(libc) $(libc)-dev $(libc)-dbg $(libc)-prof $(libc)-pic libc-bin libc-dev-bin
126+ DEB_ARCH_REGULAR_PACKAGES = $(libc) $(libc)-dev $(libc)-dbg $(libc)-prof $(libc)-pic libc-bin libc-dev-bin multiarch-support
127 DEB_INDEP_REGULAR_PACKAGES = glibc-doc eglibc-source
128 DEB_UDEB_PACKAGES = $(libc)-udeb libnss-dns-udeb libnss-files-udeb
129 endif

Subscribers

People subscribed via source and target branches