my $ignorerelease = 1;
my @newrpms;
+# Words cannot describe how gross this is. Yum no longer provides usable
+# output, so we need to call the python interface. At some point this
+# probably means this script should be entirely rewritten in python,
+# but this is not that point.
+
+sub findKernelModules {
+ my ($root, $uname, @modules) = @_;
+
+ my $modlist = join(",",map { "'".$_."'" } @modules);
+ my $python = <<EOS;
+import yum;
+import sys;
+base = yum.YumBase();
+base.doConfigSetup('$root/etc/yum.conf', '$root');
+base.doRepoSetup();
+base.doSackSetup();
+EOS
+
+ if ($uname) {
+ $python.= <<EOS;
+
+for pkg, values in base.searchPackageProvides(['kernel-devel-uname-r']).items():
+ if values[0].find('kernel-devel-uname-r = ') != -1:
+ print '%s.%s %s' % (pkg.name, pkg.arch, values[0].replace('kernel-devel-uname-r = ',''));
+
+EOS
+ } else {
+ $python.= <<EOS;
+
+print '\\n'.join(['%s.%s %s' % (x.name, x.arch, x.printVer()) for x in base.searchPackageProvides([$modlist]).keys()]);
+
+EOS
+ }
+
+# my $output = `$suser -c "python -c \\\"$python\\\"" `;
+ my $output = `python -c "$python"`;
+
+ die "Python script to figure out available kernels failed : $output"
+ if $?;
+
+ return $output;
+}
+
+
my %platconf = ( "fedora-5-i386" => { osver => "fc5",
kmod => '1',
basearch => 'i386',
basearch => 'x86_64',
updaterepo => 'update',
results => "el5/x86_64" },
-# "fedora-development-i386" => { osver => "fcd",
-# kmod => '1',
-# basearch => 'i386',
-# results => 'fedora-devel/i386'},
-# "fedora-development-x86_64" => { osver => "fcd",
-# kmod => '1',
-# basearch => 'x86_64',
-# results => 'fedora-devel/x86_64'}
+ "fedora-development-i386" => { osver => "fcd",
+ kmod => '1',
+ basearch => 'i386',
+ results => 'fedora-devel/i386'},
+ "fedora-development-x86_64" => { osver => "fcd",
+ kmod => '1',
+ basearch => 'x86_64',
+ results => 'fedora-devel/x86_64'}
);
# The following are kernels that we can't successfully build modules against
# due to issues in the packaged kernel-devel RPM.
my %badkernels = (
- "2.6.21-2950.fc8" => { "xen" => 1} # Missing build ID
+ "2.6.21-2950.fc8" => { "xen" => 1}, # Missing build ID
);
my $help;
print "Finding available kernel modules\n";
my $arbitraryversion = "";
- my $modules=`$suser -c 'yum --installroot $root provides kernel-devel'`;
- if ($modules eq "") {
- $modules=`$suser -c 'yum -d 2 --installroot $root provides kernel-devel'`;
- my $modulen;
- my %modulel;
- foreach $modulen (split(/\n/, $modules)) {
- my ($pk, $colon, $comment)=split(/\s+/, $modulen);
- if ($pk =~ /^kernel/) {
- $modulel{$pk} = "$pk";
- }
- }
- $modulen=join(" ", keys(%modulel));
- $modules=`$suser -c 'yum --installroot $root list $modulen'`;
+
+ my $modules;
+ if ($platform=~/fedora-development/) {
+ $modules = findKernelModules($root, 0, "kernel-devel");
+ } elsif ($platform=~/centos-4/) {
+ $modules = findKernelModules($root, 0, "kernel-devel", "kernel-smp-devel",
+ "kernel-hugemem-devel", "kernel-xenU-devel");
+ } else {
+ $modules = findKernelModules($root, 0, 'kernel-devel');
}
+
foreach my $module (split(/\n/, $modules)) {
+ chomp $module;
my ($package, $version, $repo)=split(/\s+/, $module);
my ($arch) = ($package=~/\.(.*)$/);
my ($variant) = ($package=~/kernel-(.*)-devel/);
next if ($variant eq "xen0"); # Fedora 5 has some bad xen0 kernel-devels
next if ($variant eq "smp");
}
- if ($platform=~/fedora-8/) {
+ if ($platform=~/fedora-8/ || $platform=~/fedora-9/ || $platform=~/fedora-development/) {
next if ($variant =~/debug$/); # Fedora 8 debug kernels are bad
}
print "$arch : $variant : $version\n";
*.EL*) kdep="kernel${dashvariant}-%{_target_cpu} = ${verrel}" ;;
*) kdep="kernel-%{_target_cpu} = ${verrel}${variant}" ;;
esac
+ case "$verrel" in
+ *.fc9*) kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;;
+ *) kname="${verrel}${variant}" ;;
+ esac
+
cat <<EOF
%package -n kmod-${kmod_name}${dashvariant}
Summary: ${kmod_name} kernel module(s)
Group: System Environment/Kernel
-Provides: kernel-modules = ${verrel}${variant}
+Provides: kernel-modules = ${kname}
Provides: ${kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: openafs-kernel = %{PACKAGE_VERSION}
Requires: ${kdep}
BuildRequires: kernel${dashvariant}-devel-%{_target_cpu} = ${verrel}
%description -n kmod-${kmod_name}${dashvariant}
This package provides the ${kmod_name} kernel modules built for the Linux
-kernel ${verrel}${variant} for the %{_target_cpu} family of processors.
+kernel ${kname} for the %{_target_cpu} family of processors.
%post -n kmod-${kmod_name}${dashvariant}
-/sbin/depmod -aeF /boot/System.map-${verrel}${variant} ${verrel}${variant} > /dev/null || :
+/sbin/depmod -aeF /boot/System.map-${kname} ${kname} > /dev/null || :
%postun -n kmod-${kmod_name}${dashvariant}
-/sbin/depmod -aF /boot/System.map-${verrel}${variant} ${verrel}${variant} &> /dev/null || :
+/sbin/depmod -aF /boot/System.map-${kname} ${kname} &> /dev/null || :
%files -n kmod-${kmod_name}${dashvariant}
%defattr(644,root,root,755)
-/lib/modules/${verrel}${variant}/extra/${kmod_name}/
+/lib/modules/${kname}/extra/${kmod_name}/
EOF
}
%define upvar ""
%{!?kvariants: %define kvariants %{?upvar}}
-%{!?ksrcdir: %define ksrcdir %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}}
+%if %{?ksrcdir:1}%{!?ksrcdir:0}
+ if ( -d %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}) ; then
+ %define ksrcdir %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}}
+ else
+ %define ksrcdir %{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}}
+ fi
+%endif
%else # Legacy kernel build stuff
%if %{fedorakmod}
for kvariant in %{kvariants} ; do
if [ -z "${kvariant}" -o -z "$ksrc" ] ; then
- ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+ if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
+ ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+ else
+ ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
+ fi
fi
done
%endif
%if %{fedorakmod} && %{build_modules}
for kvariant in %{kvariants} ; do
if [ -n "${kvariant}" ] ; then
+ if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
+ ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+ else
+ ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
+ fi
+
cp -R libafs_tree _kmod_build_${kvariant}
pushd _kmod_build_${kvariant}
./configure --with-afs-sysname=${sysname} \
--libdir=%{_libdir} \
--bindir=%{_bindir} \
--sbindir=%{_sbindir} \
- --with-linux-kernel-headers=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} \
+ --with-linux-kernel-headers=${ksrc} \
%if %{krb5support}
--with-krb5-conf=/usr/kerberos/bin/krb5-config \
%endif
for kvariant in %{kvariants}
do
if [ -n "$kvariant" ] ; then
- srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP
+ if [ -d _kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP ] ; then
+ srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP
+ else
+ srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}.%{_target_cpu}.${kvariant}-SP
+ fi
else
srcdir=${sysname}/dest/root.client%{_prefix}/vice/etc/modload
fi
- dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}${kvariant}/extra/openafs
+ if [ -f ${srcdir}/libafs-%{kverrel}${kvariant}.ko ] ; then
+ srcmod=${srcdir}/libafs-%{kverrel}${kvariant}.ko
+ dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}${kvariant}/extra/openafs
+ else
+ srcmod=${srcdir}/libafs-%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}.ko
+ dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}/extra/openafs
+ fi
+
mkdir -p ${dstdir}
- install -m 755 ${srcdir}/libafs-%{kverrel}${kvariant}.ko $dstdir/openafs.ko
+ install -m 755 ${srcmod} ${dstdir}/openafs.ko
done
%else
# Install the kernel modules