2
0
mirror of https://github.com/openvswitch/ovs synced 2025-09-01 23:05:29 +00:00

rhel: support kmod build against mulitple kernel versions, fedora

This patch ports changes from kmod rhel6 spec file to fedora spec file,
to support packaging kernel modules built against multiple versions of
kernel sources.

RHEL 7.4 introduced backward incompatible changes in the kernel. As
a result, prebuilt PRM packages against kernels newer than 693.17.1
will cannot be used on systems with older kernels, vice versa.

Intended to work only on RHEL 7.4 (kernel version 3.10.0-693.yy.zz).
This patch allows multiple kernel version numbers delimited by
whitespace to be passed as variable "kversion". The result RPM packages
the kernel module .ko files from all specified kernel versions. For
example,

make rpm-fedora-kmod \
    RPMBUILD_OPT='-D "kversion 3.10.0-693.1.1.el7.x86_64 \
    3.10.0-693.17.1.el7.x86_64"'

By default, make tries to build against the current running kernel.

This patch also includes a script to update the weak-update symlinks
if the system kernel version is upgraded or downgraded after
openvswitch-kmod is installed.

Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com>
CC: Greg Rose <gvrose8192@gmail.com>
CC: Flavio Leitner <fbl@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Flavio Leitner <fbl@redhat.com>
This commit is contained in:
Martin Xu
2018-08-20 14:24:05 -07:00
committed by Ben Pfaff
parent b068454082
commit 22c33c3039

View File

@@ -1,6 +1,6 @@
# Spec file for Open vSwitch. # Spec file for Open vSwitch.
# Copyright (C) 2009, 2010, 2015 Nicira Networks, Inc. # Copyright (C) 2009, 2010, 2015, 2018 Nicira Networks, Inc.
# #
# Copying and distribution of this file, with or without modification, # Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright # are permitted in any medium without royalty provided the copyright
@@ -9,6 +9,12 @@
%global debug_package %{nil} %global debug_package %{nil}
# Use the kversion macro such as
# RPMBUILD_OPT='-D "kversion 3.10.0-693.1.1.el7.x86_64 3.10.0-693.17.1.el7.x86_64"'
# to build package for mulitple kernel versions in the same package
# This only works for kernel 3.10.0 major revision 693 (RHEL 7.4)
# and major revision 327 (RHEL 7.2)
# By default, build against the current running kernel version
#%define kernel 3.1.5-1.fc16.x86_64 #%define kernel 3.1.5-1.fc16.x86_64
#define kernel %{kernel_source} #define kernel %{kernel_source}
%{?kversion:%define kernel %kversion} %{?kversion:%define kernel %kversion}
@@ -26,6 +32,8 @@ Release: 1%{?dist}
Source: openvswitch-%{version}.tar.gz Source: openvswitch-%{version}.tar.gz
#Source1: openvswitch-init #Source1: openvswitch-init
Buildroot: /tmp/openvswitch-xen-rpm Buildroot: /tmp/openvswitch-xen-rpm
Provides: kmod-openvswitch
Conflicts: kmod-openvswitch
%description %description
Open vSwitch provides standard network bridging functions augmented with Open vSwitch provides standard network bridging functions augmented with
@@ -36,55 +44,78 @@ traffic. This package contains the kernel modules.
%setup -q -n openvswitch-%{version} %setup -q -n openvswitch-%{version}
%build %build
%configure --with-linux=/lib/modules/%{kernel}/build --enable-ssl for kv in %{kversion}; do
make %{_smp_mflags} -C datapath/linux mkdir -p _$kv
(cd _$kv && /bin/cp -f ../configure . && %configure --srcdir=.. \
--with-linux=/usr/src/kernels/${kv}/ --enable-ssl)
make %{_smp_mflags} -C _$kv/datapath/linux
done
%install %install
export INSTALL_MOD_DIR=extra/openvswitch
rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_ROOT
make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C datapath/linux modules_install for kv in %{kversion}; do
mkdir -p $RPM_BUILD_ROOT/etc/depmod.d make INSTALL_MOD_PATH=$RPM_BUILD_ROOT -C _$kv/datapath/linux modules_install
for module in $RPM_BUILD_ROOT/lib/modules/%{kernel}/extra/*.ko
do
modname="$(basename ${module})"
echo "override ${modname%.ko} * extra" >> \
$RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf
echo "override ${modname%.ko} * weak-updates" >> \
$RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf
done done
mkdir -p $RPM_BUILD_ROOT/etc/depmod.d
for kv in %{kversion}; do
for module in $RPM_BUILD_ROOT/lib/modules/${kv}/extra/openvswitch/*.ko
do
modname="$(basename ${module})"
grep -qsPo "^\s*override ${modname%.ko} \* extra\/openvwitch" \
$RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \
echo "override ${modname%.ko} * extra/openvswitch" >> \
$RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf
grep -qsPo "^\s*override ${modname%.ko} \* weak-updates\/openvwitch" \
$RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf || \
echo "override ${modname%.ko} * weak-updates/openvswitch" >> \
$RPM_BUILD_ROOT/etc/depmod.d/kmod-openvswitch.conf
done
done
install -d -m 0755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts
install -p -m 0755 rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh \
$RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovs-kmod-manage.sh
%clean %clean
rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_ROOT
%post %post
# Ensure that modprobe will find our modules. current_kernel=$(uname -r)
for k in $(cd /lib/modules && /bin/ls); do IFS=. read installed_major installed_minor installed_micro installed_arch \
[ -d "/lib/modules/$k/kernel/" ] && depmod -a "$k" installed_build <<<"${current_kernel##*-}"
done if [ "$installed_major" = "327" ] || [ "$installed_major" = "693" ]; then
if [ -x "/sbin/weak-modules" ]; then # Workaround for RHEL 7.2 and 7.4
for m in openvswitch vport-gre vport-stt vport-geneve \ if [ -x "/usr/share/openvswitch/scripts/ovs-kmod-manage.sh" ]; then
vport-lisp vport-vxlan; do /usr/share/openvswitch/scripts/ovs-kmod-manage.sh
echo "/lib/modules/%{kernel}/extra/$m.ko" fi
done | /sbin/weak-modules --add-modules else
fi # Ensure that modprobe will find our modules.
for k in $(cd /lib/modules && /bin/ls); do
%postun [ -d "/lib/modules/$k/kernel/" ] && depmod -a "$k"
for k in $(cd /lib/modules && /bin/ls); do done
[ -d "/lib/modules/$k/kernel/" ] && depmod -a "$k"
done
if [ "$1" = 0 ]; then # Erase, not upgrade
if [ -x "/sbin/weak-modules" ]; then if [ -x "/sbin/weak-modules" ]; then
for m in openvswitch vport-gre vport-stt vport-geneve \ for m in openvswitch vport-gre vport-stt vport-geneve \
vport-lisp vport-vxlan; do vport-lisp vport-vxlan; do
echo "/lib/modules/%{kernel}/extra/$m.ko" echo "/lib/modules/%{kernel}/extra/openvswitch/$m.ko"
done | /sbin/weak-modules --remove-modules done | /sbin/weak-modules --add-modules
fi fi
fi fi
%postun
if [ "$1" = 0 ]; then # Erase, not upgrade
for kname in `ls -d /lib/modules/*`
do
rm -rf $kname/weak-updates/openvswitch
done
fi
/sbin/depmod -a
%files %files
%defattr(0644,root,root) %defattr(0644,root,root)
/lib/modules/%{kernel}/extra/*.ko /lib/modules/*/extra/openvswitch/*.ko
/etc/depmod.d/kmod-openvswitch.conf /etc/depmod.d/kmod-openvswitch.conf
%exclude /lib/modules/%{kernel}/modules.* %exclude /lib/modules/*/modules.*
%attr(755,root,root) /usr/share/openvswitch/scripts/ovs-kmod-manage.sh
%changelog %changelog
* Wed Sep 21 2011 Kyle Mestery <kmestery@cisco.com> * Wed Sep 21 2011 Kyle Mestery <kmestery@cisco.com>