On 05/16/2006 06:15 PM, Derek Atkins wrote:
Alexander Bergolth <[EMAIL PROTECTED]> writes:
The problem is that the kernel provides both "kernel = <version>" and
"kernel = <version>-<release>". On my system this is:
rpm -q --provides kernel-2.4.22-1.2199.nptl_52.rhfc1.at | grep 'kernel '
kernel = 2.4.22
kernel = 2.4.22-1.2199.nptl_52.rhfc1.at
... but the second one is redundant because as soon as it provides
kernel = 2.4.22, this will satisfy _any_ dependency on "kernel =
2.4.22-<something>", so it just doesn't matter which "Requires:
kernel"-tag you are using, any 2.4.22 kernel will fulfill this requirements.
Just to make sure we're on the same page -- what you're saying is
that even though the openafs RPM has:
Requires: kernel = 2.4.22-1.2199.nptl_52.rhfc1.at
This will match a kernel RPM that has:
Provides: kernel = 2.4.22
?? Is that what you're saying? If so, I think this is a bug in RPM.
But it would certainly explain why the FC1 packages work properly.
Yes, that's it. See
http://distro.conectiva.com.br/pipermail/apt-rpm/2003-August/001951.html
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112825
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=115954
But I think it's a wontfix. :(
That's why I suggested to use the "kernel-%{_target_cpu}" dependency,
because the (newer) kernel-rpms only provide the exact
<version>-<release> string for this capability.
Yeah.. The kernel-%{_target_cpu} issue has come up before, but I just
can't use it everywhere.
I'm fairly sure that this is fixed by your patch to openafs-kvers-is.sh
so I'm not too worried about it.
As mentioned above, any release string will be valid here.
That really just feels like a bug in RPM.
[snip]
How about a feature-test? (Use "Requires: kernel-%{_target_cpu}" only
when available?)
Something like
-------------------- snip! --------------------
if [ "$1" = "provideskernelarch" ]; then
kernelrpm=`rpm -qf "$2"`
if [ -n "$kernelrpm" ]; then
if rpm -q --provides "$kernelrpm" |grep -q "^kernel-$3 "; then
echo "kernel-$3"
fi
fi
exit 0
fi
-------------------- snip! --------------------
... for openafs-kvers-is.sh, which is feeded with arguments
provideskernelarch, %{ksrcdir} and %{_target_cpu}?
Feature tests are possible, although sometimes annoying. Keep in mind
that you need to handle the case where $2 isn't provided by an RPM.
On many platforms it isn't (e.g. FC3, except for a small handful of
kernel releases).
I agree that creating a feature test that works fine on all distros
could be painful.
Also, this check alone (for kernel-$3) doesn't work in all cases. For
example, when I build against all the kernels during an OpenAFS
release I build against /usr/src/kernels/* (see openafs-buildall.sh)
but those files are provided by the kernel-devel packages that provide
a different set of targets:
[EMAIL PROTECTED] calliope]$ rpm -qf /usr/src/kernels/2.6.12-1.1372_FC3-smp-i686
kernel-smp-devel-2.6.12-1.1372_FC3
[EMAIL PROTECTED] calliope]$ rpm -q --provides kernel-smp-devel-2.6.12-1.1372_FC
kernel-smp-devel-i686 = 2.6.12-1.1372_FC3
kernel-devel-i686 = 2.6.12-1.1372_FC3smp
kernel-devel = 2.6.12-1.1372_FC3smp
kernel-smp-devel = 2.6.12-1.1372_FC3
As you can see, the RPM that provides this doesn't provide "kernel-i686",
but rather provides "kernel-devel-i686". Now, I suppose we could run
rpm twice:
if rpm -q --provides "$kernelrpm" | grep -q "^kernel-$3 "; then
echo "kernel-$3"
elif rpm -q --provides "$kernelrpm" | greq -q "^kernel-devel-$3" ; then
echo "kernel-$3"
fi
You could check for /boot/vmlinuz-$3 but is an installed binary kernel
rpm necessary for the build process at all? Or are the corresponding
-devel packages sufficient? If they are enough, I guess we'd have to
look at the devel-rpm...
But then of couse there's the question of which target to use for SMP
kernels? Do we use:
Requires: kernel-smp-i686 = 2.6.12-1.1372_FC3
or
Requires: kernel-i686 = 2.6.12-1.1372_FC3smp
I would think that we'd want the former, not the latter, for the same
reason that a kernel providing kernel = 2.6.12 will match a package
that requires kernel = 2.6.12-1.1372_FC3.
I think the latter would be necessary as the smp kernel rpms simply do
not provide any kernel-smp-i686 capability:
rpm -qp --provides kernel-smp-2.6.16-1.2111_FC5.i686.rpm
kernel = 2.6.16
kernel-drm = 4.3.0
kernel-i686 = 2.6.16-1.2111_FC5smp
kernel-smp = 2.6.16-1.2111_FC5
Note that requiring an exact dependency match would be possible using
the kernel-i686 dependency because no kernel-rpm provides kernel-i686
without the release string.
Also, I think we would want this test to return a boolean that answers
the question: does this "kernel" provide the new-style %{_target_cpu}
name, yes or no? That would make it easier to require the proper term
in the SPEC file, no?
Yes, using a boolean will probably be better. (I thought about using the
returned-string of e.g. kernel-i686 directly in the Requires-line but I
don't know if this works and a boolean will certainly be cleaner.)
--leo
--
-----------------------------------------------------------------------
[EMAIL PROTECTED] Fax: +43-1-31336-906050
Zentrum fuer Informatikdienste - Wirtschaftsuniversitaet Wien - Austria
_______________________________________________
OpenAFS-devel mailing list
[email protected]
https://lists.openafs.org/mailman/listinfo/openafs-devel