[Fedora-packaging] Kernel modules (was: Re: tpctl in extras missing dependancy for kernel-module-thinkpad)

Jack Neely jjneely at pams.ncsu.edu
Wed Jun 29 01:42:48 UTC 2005

> Actually, no. I'm not going to standardize kernel module packaging
> _UNTIL_ at least yum is fixed.
> Let me reiterate some points that I have made in the past:

Good, gets us all back on track.  :-)

> - I do not plan to overload the %{name} value for kernel module
> packages. This means that we will NOT be shoving the kernel version in
> %{name}. Its ugly, it screws up bugzilla, breaks existing packaging
> guidelines, and is altogether wrong.
> - Given that, we WILL need to put the kernel version (in some part) in
> either %{version} or %{release}. Let me explain why:

I can tolerate %{release}

> On SMP systems, at a bare minimum, there will be two kernels installed:
> kernel-smp-2.6.12-1.1400_FC5
> kernel-2.6.12-1.1400_FC5
> If we do not use kernel version in either %{version} or %{release},
> we'll have no way to generate two packages with unique
> %{name}-%{version}-%{release} values.
> We have to assume that each installed kernel will want to have a
> matching module addon installed for it.
> I originally proposed (back in March) that we put the kernel version in
> Release. This is a slightly revised proposal.
> Name: kernel-module-openafs
> (where the value in the Name field is the name of the module, prepended
> with "kernel-module-")
> Version: 1.1
> (where the value in the Version field is equivalent to the kernel module
> version, NOT the kernel version we're building against (in this example,
> "1", followed by the build revision, in this example ".1")

So %{version} ends up having the upstream version number and the release
number combined.  I think this is the worst part as its confusing to the
packager.  Why I advocate requiring %{kver}.  However, I did not propose
a solution for a unique NVR for eatch kernel type (smp, xen, etc).

> Release: %{kver}
> (Where %{kver} is the kernel we're building against)
> Requires: kernel-%{_target_cpu} = %{kver}
> BuildRequires: kernel-devel-%{_target_cpu} = %{kver}
> %{kver} gets passed by the buildsystem, for each kernel found in the
> branch for which that package is being built. So, for our example
> kernels, %{kver} would be 2.6.12-1.1400_FC5 and 2.6.12-1.1400_FC5smp,
> respectively. FC4 and newer kernels have this value in the provides for
> "kernel-%{arch}", so it should not be too difficult for the build system
> to figure out the correct value for %{kver} from the target kernel
> package.
> There is no need to use dist tags here, since %{kver} includes the dist
> name.
> If a bugfix needs to be made to the package, then the .1 (build
> revision) is incremented. If a new version of the kernel driver is
> released, then the first part of the Version is incremented, and the
> build revision is reset to .1 (if it is not .1).
> So, after the buildsystem does its thing, we've generated two new binary
> rpms:
> kernel-module-openafs-1.1-2.6.12-1.1400_FC5.i686.rpm
> kernel-module-openafs-1.1-2.6.12-1.1400_FC5smp.i686.rpm
> Since no previous packages with those n-v-r's exist, yum installs them,
> just as it would kernels, doing the equivalent of an rpm -i action.
> Now, on the system we have all four packages installed:
> kernel-2.6.12-1.1400_FC5
> kernel-module-openafs-1.1-2.6.12-1.1400_FC5
> kernel-smp-2.6.12-1.1400_FC5
> kernel-module-openafs-1.1-2.6.12-1.1400_FC5smp
> But wait, I've found a bug in kernel-module-openafs. Easy enough to fix,
> I patch it away, increment my build revision to .2, and we now have
> these new packages available:
> kernel-module-openafs-1.2-2.6.12-1.1400_FC5.i686.rpm
> kernel-module-openafs-1.2-2.6.12-1.1400_FC5smp.i686.rpm
> But, here yum doesn't know what to do. We can't do a -i, those packages
> would conflict with the existing kernel-module-openafs packages. We
> can't do a -U, because then we'd only end up with one
> kernel-module-openafs package on the system. What we need yum to do is a
> special operation that does the following (only for kernel-module
> packages):
> - Does any kernel-module-openafs package exist on the system with the
> same %{release}?
> - If yes, remove it (rpm -e). If no, continue.
> - Install new package (rpm -i).

I have a patch for yum that does exactly this except it keys off of the
kernel requires.  (Does kernel-module-openafs-1.1-2.6.12-1.1400_FC5
require the same kernel as kernel-module-openafs-1.2-2.6.12-1.1400_FC5?)
So in a day or two I could probably have it edited to do the above.

> After this process, the system has:
> kernel-2.6.12-1.1400_FC5
> kernel-module-openafs-1.2-2.6.12-1.1400_FC5
> kernel-smp-2.6.12-1.1400_FC5
> kernel-module-openafs-1.2-2.6.12-1.1400_FC5smp
> Now, if someone is willing and able to write the exception case needed
> for yum in kernel-module-* packages, then I think we can document the
> remaining standard bits, duct tape the necessary logic into the
> buildsystem, and start doing kernel-module-* packages for FC4 and devel.

Since I already have a good bit of the code done...

Spot, the only change I would like in this is to have the build number
not in %{version} but as part of %{release}.  So using your example,


Where the %{release} == build#.%{kver}

This doesn't add or subtract any complexity from the code in Yum.  It
does make the versioning a little easier to grok.

Reading the new mail I got as I wrote this it looks like Matthew and I
agree.  Cool.


> ~spot
> -- 
> Tom "spot" Callaway: Red Hat Sales Engineer || GPG Fingerprint: 93054260
> Fedora Extras Steering Committee Member (RPM Standards and Practices)
> Aurora Linux Project Leader: http://auroralinux.org
> Lemurs, llamas, and sparcs, oh my!
> --
> Fedora-packaging mailing list
> Fedora-packaging at redhat.com
> https://www.redhat.com/mailman/listinfo/fedora-packaging

Jack Neely <slack at quackmaster.net>
Realm Linux Administration and Development
PAMS Computer Operations at NC State University
GPG Fingerprint: 1917 5AC1 E828 9337 7AA4  EA6B 213B 765F 3B6A 5B89

More information about the Fedora-packaging mailing list