On Friday, I posted a list of provides-obsoletes conflicts in the current
Cooker. And, while there seemed to be lots of interest in the script I wrote
to generate the list, there seems to be much less in the results. But many of
the conflicts that arose need to be fixed.
The symptom is this: If two packages both provide and obsolete the same
virtual package name, then they can only coexist as long as you install both
together, and always upgrade the two together.
If you install one first, then the other, the first gets uninstalled. And if
you have both installed, then try to upgrade just one, the other gets
uninstalled. (If there's are dependencies involved, things get more
complicated--e.g., installing libfnlib0-devel will try to uninstall
libfnlib0, which it requires, so the whole operation will fail--but it never
works out.)
To test this yourself:
1. Take a clean, minimal cooker install (or 9.1, but then you have to go
through the whole rpm/urpmi upgrade, which is a hassle in itself).
2. urpmi gimp gimp1_3. This should work.
3. Remove all gimp packages.
4. urpmi gimp. This should work.
5. urpmi gimp1_3. It works, and now gimp is uninstalled.
6. urpmi gimp. It works, and now gimp1_3 is uninstalled.
For real fun, try this with a whole chain of dependencies (e.g., urpmi ggv).
Or try installing older versions of gimp and gimp1_3 and then upgrading one
or the other vs. upgrading both at the same time.
The three conflicts that triggered this whole discussion (gimp vs. gimp1_3,
libsigc++1.0 vs. libsigc++1.2, and libmysql12 vs. libmysql10) seem to be on
the way to a solution. But there are at least a dozen more that need to be
investigated.
If nobody else is willing to look these over, I'll be happy to do the research
and experimentation and talking with the relevant package maintainers and
come up with fixed specfiles.
But I have the feeling that something this pervasive should probably have the
input of more than a single outsider. Especially because, in a few cases, I'm
not sure I know the right solution.
1. libfnlib0-0.5-3mdk vs. libfnlib0-devel-0.5-3mdk
Both provide and obsolete Fnlib. If you install both together, it's fine--but
if you have libfnlib0 installed, and try to install libfnlib0-devel later, it
tries to uninstall libfnlib0, so the install fails.
Solution: libfnlib0-devel should neither provide nor obsolete Fnlib.
2. xine-lib-compat-plugins-0.9.13-11mdk vs. xine-plugins-1-0.beta12.5mdk
These both provide and obsolete xine-xv, xine-gl, and xine-oss. The result is
that, if you have both installed, upgrading to a new version of xine-plugins
via rpm fails, while upgrading it via urpmi removes xine-lib-compat-plugins
and all codecs that haven't been ported to 1.0 yet (which includes divx4).
Solution: xine-lib-compat-plugins should neither provide nor obsolete xine-xv,
xine-gl, and xine-oss (any package that requires those should be pulling in
the current xine-plugins, right?).
3. apache-conf-2.0.46-2mdk vs. apache2-common-2.0.46-5mdk
apache-conf obsoletes apache-common, which is provided by apache2-common.
Is this right? The whole apache/apache2-coexistence thing gives me headaches;
all I know that it that it works on my installed 9.1 servers, and for that
I'm eternally grateful and amazed....
Solution: ??? (may not be a problem)
4. php-cgi-4.3.2-6mdk vs. php-cli-4.3.2-6mdk vs.
apache2-mod_php-2.0.46_4.3.2-3mdk vs. mod_php-4.3.2-1mdk
All four provide and obsolete php430 (there are also conflicts with php and
php3). This seems odd conceptually. And, while they all have to be upgraded
in sync (since they all require an exact version of libphp_common432), if you
have some of these installed and want to add another one, it fails. (For
example, let's say you have a standard server setup, without php-cli, and
decide you want php-cli too. You can't install it.)
Solution: None of these should provide php430 or php3; they can all obsolete
php430 and php3. Those that provide php can continue to do so, but they
should only obsolete "php < %version".
5. linuxdoc-tools-0.9.20-4mdk vs. docbook-utils-0.6.13-3mdk vs.
openjade-1.3.1-16mdk
All three packages provide sgml-tools. The first two also obsolete sgml-tools.
I don't know how these are all supposed to interact, or what the virtual
package name sgml-tools represents (it seems to be required only by
kdevelop). I suspect there's a problem here, but I don't know.
Solution: ??? (may not be a problem?)
6. openssh-askpass-3.6.1p2-4mdk vs. openssh-askpass-gnome-3.6.1p2-4mdk
Both provide and obsolete ssh-extras. While these have to be upgraded in sync
if you have them both, there's a problem if you only have openssh-askpass and
try to add openssh-askpass-gnome. I'm not sure what ssh-extras is supposed to
represent, but it probably belongs in only one of these two packages.
Solution: openssh-askpass-gnome should not provide or obsolete ssh-extras? Or
maybe it should not provide ssh-extras, but should obsolete "ssh-extras <
%version" (or freeze it at "<= 3.6.1p2-4mdk" with the exact same practical
result, since both packages require "openssh = %version")?
7. yp-tools-2.8-1mdk vs. ypserv-2.8-1mdk
Both provide and obsolete yppasswd. I've never set up yp on a recent linux
box. But given that yp-tools contains the yppasswd binary, and ypserv does
not, I'd say that it belongs only to yp-tools. Maybe this is a typo, and
ypserv should provide yppasswdd instead (since it provides the daemon with
that name)?
Solution: ypserv should provide (and obsolete) yppasswdd rather than yppasswd.
8. libalsa-oss0-devel-0.9.0-0.5rc1mdk vs. libalsa2-devel-0.9.2-5mdk
Both provide and obsolete alsa-lib-devel. I suspect problems can easily arise
here, but I can't get libalsa-oss0-devel installed in the first place,
because it seems to drag in all kinds of crazy requirements (the
manifestation is that it asks me to install scribus-i18n-de or
scribus-i18n-fr--see the arts issue below for the reason). I think I know the
solution here, but I haven't been able to test it.
Solution: libalsa-oss0-devel should not provide alsa-lib-devel.
9. gnome-tiles-1-6mdk vs. space-1.0.0-7mdk
Both provide and obsolete gnome-imglib and desktop-backgrounds. But I think
they're both completely independent packages that should be able to exist
separately or together with no problems.
Solution: neither package should obsolete either name.
10. glibc-2.3.2-4mdk vs. uClibc-static-devel-0.9.9-2mdk
glibc obsoletes libc-static, which uClibc-static-devel provides. This may be
correct; I don't use uClibc, so I don't know.
Solution: ??? (may not be a problem?)
11. kernel-* vs. kernel-*
They all provide and obsolete alsa, but I don't think this is a problem, since
you never rpm -U a kernel.
Solution: Not a problem.
12. arts-1.1.2-2mdk vs. kde*-3.1.2-*mdk (and scribus, xdrawchem, komba, etc.)
arts obsoletes just about everything in kde, which may not be a problem,
because you can't install most of kde without arts, and you have to upgrade
them in sync.
But arts also obsoletes packages that aren't directly part of kde--like
scribus and xdrawchem. Basically, anything that provides a name of the form
"kde*3*-*" seems to be obsoleted by arts. If you have any of these packages
installed, they'll be uninstalled when you upgrade kde and arts.
While arts obsoleting core kde packages doesn't have any practical
consequences, and conceptually it seems wrong. Besides, it's harder to guess
which kde packages are core essentials than to just remove all of the extra
obsoletes tags in arts, whether they cause a problem or not.
Solution: arts should not obsolete kde*3*-*.
12.5. scribus-1.0-0.rc1.1mdk, scribus-i18n-de-1.0-0.rc1.1mdk,
scribus-i18n-fr-1.0-0.rc1.1mdk, libscribus0, libscribus0-devel
A side-effect of the arts/scribus problem pointed me toward a completely
separate problem, which may be an isolated issue, or it may be the tip of a
whole new iceberg.
Both scribus-i18n-de and scribus-i18n-fr provide scribus. Meanwhile,
libscribus0 depends on scribus.
So, imagine what happens when you try to upgrade arts through urpmi. Since it
obsoletes kde3-scribus, it tries to uninstall scribus. But then it sees that
libscribus0 depends on scribus. Is there any way to keep that dependency?
Sure, install scribus-i18n-de or scribus-i18n-fr, and you'll have scribus
without that troublesome kde3-scribus.
This is obviously not right.
Solution: scribus-i18n-de and scribus-i18n-fr should not provide scribus.
Maybe libscribus0 shouldn't require scribus (usn't the other way around much
more common?), but I'm not sure about this part.
13. MySQL-4.0.13-2mdk vs. MySQL-Max-4.0.13-2mdk
Both provide and obsolete mysql. Which is fine, because the packages
conflict--in fact, it's desirable to have these packages obsolete each other,
so you can upgrade one over the other.
Solution: perfect as-is.
So, I think that takes care of everything in Cooker as of last Friday.