Wandering Thoughts archives

2006-11-03

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-core on the FC6 machine showed that the FC6 Wine still needed this library.
  • rpm -q --whatprovides libsane.so.1 on 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.

So I 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.

linux/FedoraDependencyProblem written at 14:36:32; Add Comment


Page tools: See As Normal.
Search:
Login: Password:
Atom Syndication: Recent Pages, Recent Comments.

This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.