Installing Wine on Fedora Core 5 x86_64
Here's a fun Fedora Core RPM dependency problem that I just fixed. (Since I've jumped on Ubuntu for similar things, I feel that equal time is only fair.)
I have been trying to install Wine on my Fedora Core 5 machine for
a while, without success. The visible manifestation of the problem
was that '
yum install wine' would download everything and then
bomb out during the install complaining about two things:
- 'package sane-backends-1.0.18-2.fc5 (which is newer than sane-backends-1.0.17-4) is already installed'
- 'file <various> from install of sane-backends-1.0.17-4 conflicts with file from package sane-backends-1.0.18-2.fc5'; the files were all architecture-independent things like manpages.
My machine is an x86_64 one, but Wine is an i386 program and thus requires requires i386 libraries, which was clearly where the requirement for 'sane-backends' was coming in; it was trying to install an i386 version, which was conflicting with the x86_64 version I already had installed.
Installing the same package for multiple architectures is a hard problem. In order to make it work in RPM, you have to insure that each package supplies absolutely identical versions of common files like manpages and so on. Knowing this, I wrote the Wine installation problems off to the Fedora Extras Wine people having goofed up on this, and just retried periodically hoping that they'd fixed it.
(I flirted briefly with removing the x86_64 version of sane-backends, but it turns out to be required by a number of things that I wanted to keep.)
After I did a successful install of Wine on my FC6 test machine, I took a deeper look into the problem to try to figure out what was different between the two environments.
- first, I
yum installed all of the other Wine dependencies, just to simplify things. This let me see that FC5 Wine was pulling in the i386 sane-backends because it wanted 'libsane.so.1' (an i386 library; an x86_64 one would have had a '(64bit)' tacked on the end).
rpm -q --requires wine-coreon the FC6 machine showed that the FC6 Wine still needed this library.
rpm -q --whatprovides libsane.so.1on FC6 said that it was coming from the i386 sane-backends-libs.
yum list sane-backends-libs*on FC5 said that there was indeed an i386 version of this RPM.
yum installed the RPM by hand, then retried the Wine install
and it went through.
What happened is that Red Hat ran into the multiarch issues and split
the libraries off into the sane-backends-libs RPM to fix it, but only
after Fedora Core 5 was released. The old, pre-split version of the
sane-backends RPM stayed around in the 'core' RPM repository (which is
what was shipped with the initial release); when
yum went looking to
satisfy the dependency it found that first and used it. Fedora Core 6
avoided the problem by having the post-split RPM from the start.
(You can see this live with '
yum whatprovides libsane.so.1' on a FC5
machine, which will report both sources.)
While I could call this a yum bug, I think a fairer assessment is
that yum is missing a feature: it should have some way of ordering
the repositories when it tries to satisfy dependencies (I suspect
that at the moment it effectively uses alphabetical order in
/etc/yum.repos.d). Alternately, it should just default to
preferring the newest RPM that will satisfy the dependency.