apt resolver doesn't do sensible things when satisfying a cross-dependency on a virtual package (steam, wine)
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
apt (Ubuntu) |
Fix Released
|
High
|
Unassigned | ||
Precise |
Fix Released
|
Critical
|
Unassigned | ||
Raring |
Fix Released
|
High
|
Unassigned |
Bug Description
[Test Case]
* Install precise 12.04.2 from the amd64 LTS cd
* Attempt to install steam, or wine1.4
* Good behavior: libgl1-
* Broken behavior: Fails to find a correct resolution because it tries to pull in libgl1-
[Regression Potential]
* I don't expect new bugs to pop up, since this is really a multiarch issue that only pops up because of the enablement stack. The conflict resolution is adjusted to prefer installing packages that we already have for other architectures when Multiarch: same is specified.
[Original bug report]
As a result of the LTS enablement work in 12.04.2, we now have a situation where for the first time, a library dependency of a substantial number of packages in main is satisfied by two different real packages (libgl1-
This interacts quite badly with apt's resolver when cross-installing a multiarch-capable package that also has a dependency on one of these libraries. For example, the steam:i386 package has the following dependencies:
Depends: libc6, libgl1-mesa-dri, libgl1-mesa-glx, xterm | gnome-terminal, zenity
Since libgl1-mesa-dri and libgl1-mesa-glx are both real packages, apt tries to pull these in by name. However, the libgl1-
It's reported that when installing via software-center, this conflict may even result in removal of the X server. I can't reproduce this myself (since steam64 has now been withdrawn from the software center until the problem can be addressed), but apt is certainly not able to find a solution to this problem on its own:
sudo apt-get -o Debug::
Reading package lists... Done
Building dependency tree
Reading state information... Done
Starting
Starting 2
Investigating (0) libgl1-
Broken libgl1-
Considering libgl1-
Added libgl1-
Conflicts//Breaks against version 8.0.4-0ubuntu0.2 for libgl1-mesa-dri but that is not InstVer, ignoring
Conflicts//Breaks against version 8.0.2-0ubuntu3 for libgl1-mesa-dri but that is not InstVer, ignoring
Fixing libgl1-
Investigating (0) libgnome-
Broken libgnome-
Considering libgl1-
Added libgl1-
Broken libgnome-
Considering libgl1-
Added libgl1-
Fixing libgnome-
Fixing libgnome-
Investigating (0) gnome-session-bin [ amd64 ] < 3.2.1-0ubuntu8 > ( gnome )
Broken gnome-session-
Considering libgl1-
Added libgl1-
Broken gnome-session-
Considering libgl1-
Added libgl1-
Fixing gnome-session-
Fixing gnome-session-
Investigating (0) x11-utils [ amd64 ] < 7.6+4ubuntu0.1 > ( x11 )
Broken x11-utils:amd64 Depends on libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Added libgl1-
Broken x11-utils:amd64 Depends on libgl1 [ amd64 ] < none > ( none )
Considering libgl1-
Added libgl1-
Fixing x11-utils:amd64 via keep of libgl1-
Fixing x11-utils:amd64 via keep of libgl1-
Investigating (0) libnux-2.0-0 [ amd64 ] < 2.14.1-0ubuntu1 > ( libs )
Broken libnux-2.0-0:amd64 Depends on libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Try Installing libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs ) before changing libnux-2.0-0:amd64
Investigating (0) libglapi-
Broken libglapi-
Considering libglapi-mesa:amd64 0 as a solution to libglapi-
Added libglapi-mesa:amd64 to the remove list
Conflicts//Breaks against version 8.0.4-0ubuntu0.2 for libglapi-mesa but that is not InstVer, ignoring
Conflicts//Breaks against version 8.0.2-0ubuntu3 for libglapi-mesa but that is not InstVer, ignoring
Broken libglapi-
Considering libglapi-mesa:i386 0 as a solution to libglapi-
Added libglapi-mesa:i386 to the remove list
Conflicts//Breaks against version 8.0.4-0ubuntu0.2 for libglapi-mesa but that is not InstVer, ignoring
Conflicts//Breaks against version 8.0.2-0ubuntu3 for libglapi-mesa but that is not InstVer, ignoring
Fixing libglapi-
Fixing libglapi-
Investigating (0) libqt4-opengl [ amd64 ] < 4:4.8.1-0ubuntu4.3 -> 4:4.8.1-0ubuntu4.4 > ( libs )
Broken libqt4-opengl:amd64 Depends on libqtcore4 [ amd64 ] < 4:4.8.1-0ubuntu4.3 -> 4:4.8.1-0ubuntu4.4 > ( libs ) (= 4:4.8.1-0ubuntu4.4)
Considering libqtcore4:amd64 93 as a solution to libqt4-opengl:amd64 4
Holding Back libqt4-opengl:amd64 rather than change libqtcore4:amd64
Investigating (0) libgl1-mesa-glx [ i386 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Broken libgl1-
Considering libglapi-mesa:i386 0 as a solution to libgl1-
Holding Back libgl1-
Investigating (0) xserver-
Broken xserver-
Considering libgl1-
Removing xserver-
Investigating (1) steam [ i386 ] < none -> 1.0.0.27ubuntu1 > ( games )
Broken steam:i386 Depends on libgl1-mesa-dri [ i386 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Re-Instated libgl1-
Broken steam:i386 Depends on libgl1-mesa-glx [ i386 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Re-Instated libglapi-mesa:i386
Re-Instated libgl1-
Investigating (1) libgl1-
Broken libgl1-
Considering libgl1-
Added libgl1-
Conflicts//Breaks against version 8.0.4-0ubuntu0.2 for libgl1-mesa-dri but that is not InstVer, ignoring
Conflicts//Breaks against version 8.0.2-0ubuntu3 for libgl1-mesa-dri but that is not InstVer, ignoring
Broken libgl1-
Considering libgl1-
Added libgl1-
Conflicts//Breaks against version 8.0.4-0ubuntu0.2 for libgl1-mesa-dri but that is not InstVer, ignoring
Conflicts//Breaks against version 8.0.2-0ubuntu3 for libgl1-mesa-dri but that is not InstVer, ignoring
Fixing libgl1-
Fixing libgl1-
Investigating (1) libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Broken libgl1-
Considering libglapi-mesa:amd64 0 as a solution to libgl1-
Holding Back libgl1-
Investigating (1) libnux-2.0-0 [ amd64 ] < 2.14.1-0ubuntu1 > ( libs )
Broken libnux-2.0-0:amd64 Depends on libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Try Installing libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs ) before changing libnux-2.0-0:amd64
Investigating (1) libglapi-
Broken libglapi-
Considering libglapi-mesa:amd64 0 as a solution to libglapi-
Added libglapi-mesa:amd64 to the remove list
Conflicts//Breaks against version 8.0.4-0ubuntu0.2 for libglapi-mesa but that is not InstVer, ignoring
Conflicts//Breaks against version 8.0.2-0ubuntu3 for libglapi-mesa but that is not InstVer, ignoring
Broken libglapi-
Considering libglapi-mesa:i386 0 as a solution to libglapi-
Added libglapi-mesa:i386 to the remove list
Conflicts//Breaks against version 8.0.4-0ubuntu0.2 for libglapi-mesa but that is not InstVer, ignoring
Conflicts//Breaks against version 8.0.2-0ubuntu3 for libglapi-mesa but that is not InstVer, ignoring
Fixing libglapi-
Fixing libglapi-
Try to Re-Instate (1) libqt4-opengl:amd64
Investigating (1) libgl1-mesa-glx [ i386 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Broken libgl1-
Considering libglapi-mesa:i386 0 as a solution to libgl1-
Holding Back libgl1-
Investigating (1) xorg [ amd64 ] < 1:7.6+12ubuntu2 > ( x11 )
Broken xorg:amd64 Depends on xserver-xorg [ amd64 ] < none -> 1:7.6+12ubuntu2 > ( x11 ) (>= 1:7.6+12ubuntu2)
Considering xserver-xorg:amd64 3 as a solution to xorg:amd64 1
Try Installing xserver-xorg [ amd64 ] < none -> 1:7.6+12ubuntu2 > ( x11 ) before changing xorg:amd64
Broken xorg:amd64 Depends on xserver-
Considering xserver-
Added xserver-
Fixing xorg:amd64 via keep of xserver-
Investigating (1) xserver-
Broken xserver-
Considering xserver-
Removing xserver-
Investigating (2) steam [ i386 ] < none -> 1.0.0.27ubuntu1 > ( games )
Broken steam:i386 Depends on libgl1-mesa-dri [ i386 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Considering libgl1-
Considering libgl1-
Considering libgl1-
Re-Instated libdrm-
Re-Instated libglapi-
Re-Instated libllvm3.1:i386
Re-Instated libgl1-
Broken steam:i386 Depends on libgl1-mesa-glx [ i386 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Considering libgl1-
Considering libgl1-
Considering libgl1-
Re-Instated libgl1-
Investigating (2) libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Broken libgl1-
Considering libglapi-mesa:amd64 0 as a solution to libgl1-
Holding Back libgl1-
Investigating (2) libnux-2.0-0 [ amd64 ] < 2.14.1-0ubuntu1 > ( libs )
Broken libnux-2.0-0:amd64 Depends on libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Try Installing libgl1-mesa-glx [ amd64 ] < none -> 8.0.4-0ubuntu0.3 > ( libs ) before changing libnux-2.0-0:amd64
Investigating (2) xorg [ amd64 ] < 1:7.6+12ubuntu2 > ( x11 )
Broken xorg:amd64 Depends on xserver-xorg [ amd64 ] < none -> 1:7.6+12ubuntu2 > ( x11 ) (>= 1:7.6+12ubuntu2)
Considering xserver-xorg:amd64 3 as a solution to xorg:amd64 1
Try Installing xserver-xorg [ amd64 ] < none -> 1:7.6+12ubuntu2 > ( x11 ) before changing xorg:amd64
Investigating (3) steam [ i386 ] < none -> 1.0.0.27ubuntu1 > ( games )
Broken steam:i386 Depends on libgl1-mesa-dri [ i386 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Considering libgl1-
Considering libgl1-
Considering libgl1-
Broken steam:i386 Depends on libgl1-mesa-glx [ i386 ] < none -> 8.0.4-0ubuntu0.3 > ( libs )
Considering libgl1-
Considering libgl1-
Considering libgl1-
Considering libgl1-
Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
steam:i386 : Depends: libgl1-
E: Unable to correct problems, you have held broken packages.
Getting a correct result requires the following:
$ sudo apt-get install libgl1-
Since we don't have enough information to say with certainty that all Conflicts from packages of a different architecture can be ignored, it seems we need apt's resolver to be smarter, and possibly give priority to implementors of virtual packages that are already installed for a different architecture when trying to satisfy dependencies.
Changed in apt (Ubuntu Precise): | |
importance: | Undecided → Critical |
Changed in apt (Ubuntu Quantal): | |
importance: | Undecided → Critical |
importance: | Critical → High |
Changed in apt (Ubuntu Raring): | |
importance: | Undecided → High |
status: | New → Confirmed |
status: | Confirmed → Triaged |
Changed in apt (Ubuntu Quantal): | |
status: | New → Triaged |
Changed in apt (Ubuntu Precise): | |
status: | New → Triaged |
tags: | added: ca-escalated |
description: | updated |
tags: | added: u1-on-production |
tags: | removed: ca-escalated |
no longer affects: | apt (Ubuntu Quantal) |
(*-quantal sounds like a hack rather than a good solution, but so it be …)
Attached patch should prefer installing an other architecture of a M-A: same package (for the lake of a sensible term, lets call it sibling) if at least one architecture- sibling is already installed over everything else. As I haven't really tested it and I am not really active currently, it might kill your pet instead though.