kernel provide 2.6.9. Too bad.

Matias Féliciano feliciano.matias at free.fr
Sun Oct 31 16:58:31 UTC 2004


Le dimanche 31 octobre 2004 à 09:54 -0500, Andrew a écrit : 
> 
> Matias Féliciano wrote:
> > Le samedi 30 octobre 2004 à 23:40 -0400, Andrew a écrit :
> > 
> [snip] -- from your unicorn.spec...
> >>Release: %{release}_%{krelver}
> >>Requires: kernel = %{kversion}
> Shouldn't that be
> Requires: kernel = %{version}-%{release}
> since you are building a module for a specific release?

The SRPMS :
unicorn-0.8.7-mat.2.src.rpm
Version = 0.8.7  (not related to the version of the kernel)
Release = mat.2

The RPMS :
kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.643.i686.rpm
Version : 0.8.7
Release : mat.2_2.6.9_1.643.mat.1

The release is "special". It has two parts :
mat.2 : come from the SRPMS (or .spec file)
_2.6.9_1.643.mat.1 : come from the kernel version tree used when the
package is build. '-' is forbidden in the release number. This can be
anything but should be different for each kernel.

Unlike a classic package, there is not one binary, but one per kernel
version.

Example :
I have two kernels (fixed, that is : without the "non finite" provide
"kernel = 2.6.9") :
kernel-2.6.9-1.643.mat.1
kernel-2.6.9-1.649.mat.1

And two module packages :
kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.643.mat.1
kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.649.mat.1

These two RPMS come from the same SRPMS.
kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.643.mat.1 is build with
kernel-2.6.9-1.643.mat.1 and require "kernel = 2.6.9-1.643.mat.1" to
work when installed. 
$ rpm -q --requires kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.643.mat.1 | grep kernel
kernel = 2.6.9-1.643.mat.1

Hopefully, it is the case :-)

To build a specific kernel-module-unicorn-atm :
$ rpmbuild -bb --target i686 --define "kernel 3.2.13-1" unicorn.spec
Building target platforms: i686
Building for target i686
error: Failed build dependencies:
        kernel = 3.2.13-1 is needed by unicorn-0.8.7-mat.2.i686

Ooops. I have to install kernel-3.2.13-1.

Kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.643.mat.1 is clearly
dedicated to kernel-2.6.9-1.643.mat.1 only :
$ rpm -q -l kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.643.mat.1
/lib/modules/2.6.9-1.643.mat.1/kernel/extra/unicorn_pci_atm.ko

It is completely useless without a kernel 2.6.9-1.643.mat.1 . So it
depend on a specific version of kernel. If kernel-2.6.9-1.643.mat.1 is
removed, kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.643.mat.1 should
be removed. Like "yum remove gtk2" will remove all packages that require
gtk2 to work properly.

In my "fixed" system, this works as expected :
$ yum remove kernel-2.6.9-1.643.mat.1
[...]
Dependencies Resolved
Transaction Listing:
  Remove: kernel.i686 0:2.6.9-1.643.mat.1

Performing the following to resolve dependencies:  <=========
  Remove: kernel-module-unicorn-atm.i686 0:0.8.7-mat.2_2.6.9_1.643.mat.1
Is this ok [y/N]: n

What append if I install the """corrupted""" Fedora kernel :
$ rpm -q kernel
kernel-2.6.9-1.649.mat.1
kernel-2.6.9-1.643.mat.1
kernel-2.6.9-1.649  <=== it's here.

$ yum remove kernel-2.6.9-1.643.mat.1
Dependencies Resolved
Transaction Listing:
  Remove: kernel.i686 0:2.6.9-1.643.mat.1
Is this ok [y/N]: n

kernel-2.6.9-1.649 ("Provides: kernel = 2.6.9") provide the requirement
for kernel-module-unicorn-atm-0.8.7-mat.2_2.6.9_1.643.mat.1 (Requires:
kernel = kernel-2.6.9-1.643.mat.1). So kernel-module-unicorn-atm-0.8.7-
mat.2_2.6.9_1.643.mat.1 is not marked as a dependency that should be
removed.

NB : "Provides: kernel = 2.6.9-1.649" give the requirement of "Requires:
kernel = 2.6.9".


Another problem (with kernel-2.6.9-1.649 installed) :
rpmbuild -bb --target i686 --define "kernel 2.6.9-999999" unicorn.spec
Building target platforms: i686
Building for target i686
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.94844
+ umask 022
+ cd /home/admin/rpmbuild/BUILD
+ LANG=C
[...]
make CC=gcc -C /lib/modules/2.6.9-999999/build
SUBDIRS=/home/admin/rpmbuild/BUILD/unicorn/unicorn_pci modules
make: *** /lib/modules/2.6.9-999999/build: No such file or directory.
Stop.


Without kernel-2.6.9-1.649
rpmbuild -bb --target i686 --define "kernel 2.6.9-999999" unicorn.spec
Building target platforms: i686
Building for target i686
error: Failed build dependencies:
        kernel = 2.6.9-999999 is needed by unicorn-0.8.7-mat.2.i686


It's a dependency problem.

> >>Release: %{release}_%{krelver}

When unicorn is build (for kernel-2.6.9-1.643.mat.1) :
%{release} = mat.2
%{krelver} = 2.6.9_1.643.mat.1

> >>Requires: kernel = %{kversion}

%{kversion} = 2.6.9-1.643.mat.1

> Shouldn't that be
> Requires: kernel = %{version}-%{release}

No. This will be replaced by :
Requires: kernel = 0.8.7-mat.2 


Ooops, my package does not support smp...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Ceci est une partie de message num?riquement sign?e
URL: <http://listman.redhat.com/archives/fedora-test-list/attachments/20041031/5227c57d/attachment.sig>


More information about the fedora-test-list mailing list