Since I reviewed Fedora Core 5 back in April I’ve become increasingly frustrated with one aspect of what is otherwise a very well done distribution: package management and keeping my system secure and up to date. I’ve run into repeated instances of yum deciding I needed a lot of new packages and promptly failing over just one. pup, which is really just a pretty but somewhat crippled front end to yum, also fails in the same way. What I’ve discovered is that pup and yum aren’t broken at all. The code is doing precisely what it was designed to do.
Let’s look at today’s failure as an example. I had been on vacation and my system was probably 10 days behind on updates. yum decided I needed to upgrade some 166 packages and add 2 more for dependencies. Fine, go do it. No chance. Here is the error message:
Error: Missing Dependency: libecal-1.2.so.3 is needed by package gnome-panel
That seems clear enough but it really isn’t. gnome-panel wasn’t being upgraded. Rather the package that contained libecal-1.2.so.3 was and doing the upgrade would break gnome-panel. Typing in:
yum whatprovides libecal-1.2.so.3
reveals that it is part of the evolution-data-server package. A new version of that package was rolled out without checking to see if any other package had a dependency on the old version. That is just plain sloppy package and repository management on the part of the Fedora Project people at Red Hat. If this happened just once it would be forgivable but this sort of failure has happened repeatedly over the past two months. To their credit the Fedora Project has, in each case, rolled out a new package for whatever they’ve broken in a day or two. Still, it shouldn’t happen in the first place.
Even worse, for Joe or Jane average desktop user who wants to click on the pretty pup icon and not think about what lies beneath this likely means that their system will remain unpatched and/or they will conclude that Fedora, or worse, Linux in general. is broken and unreliable despite the lack of any bug in the code. Remember that pup, unlike the up2date program it replaced, has no provision for choosing what to update and what to skip. To fix this you have to work at the command line, period.
Oh, yeah, the workaround is to run your yum update or upgrade as follows:
yum --exclude=<package name> update
In the example above you’d replace <package name> with evolution-data-server and the rest of the updates would work provided there are no dependencies on the new package. Yes, you can have conflicting and truly unresolvable dependencies, much like the bad old days of rpm hell circa 1998 or so.
Some of you people who have been reading my articles know that I’ve given up on Gnome for now. Why not simply uninstall gnome-panel? Well… while I clearly don’t need the panel itself the package gnome-panel contains a library needed by gtk-sharp2. Yep, removing the panel breaks mono. If I try and remove the gtk-sharp2 package as well I break other apps, such as f-spot. This is why I generally end up with lots of extra cruft on a Fedora or Red Hat installation: lots of interlinking dependencies.
This truly is reminiscent of rpm hell except that this time rpm really and truly isn’t to blame. rpm really works well nowadays and yum is a decent tool for automating package management. The good folks at Red Hat need to realize that while Fedora doesn’t generate revenue in and of itself it is the test bed for Red Hat Enterprise Linux (RHEL) and they really need a large user base pounding on it. If basic functionality is managed so poorly as to make the distribution a pain to administer people will choose to run something else. Getting Fedora Core packages that work together out at the same time is an absolute must.