Create openvswitch-dpdk subpackage, install it by default (weak dependency),

but enable it only if the CPU is new enough

Resolves: 
f38
Timothy Redaelli 3 years ago
parent 32fce950ec
commit 63ef724755

@ -45,7 +45,7 @@ Name: openvswitch
Summary: Open vSwitch daemon/database/utilities
URL: https://www.openvswitch.org/
Version: 2.17.0
Release: 3%{?dist}
Release: 4%{?dist}
# Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the
# lib/sflow*.[ch] files are SISSL
@ -111,6 +111,8 @@ Requires: openssl iproute module-init-tools
%{?sysusers_requires_compat}
Requires(post): /bin/sed
Requires(post): %{_sbindir}/update-alternatives
Requires(postun): %{_sbindir}/update-alternatives
Obsoletes: openvswitch-controller <= 0:2.1.0-1
%description
@ -178,6 +180,18 @@ Requires: python3-openvswitch = %{?epoch:%{epoch}:}%{version}-%{release}
%description ipsec
This package provides IPsec tunneling support for OVS tunnels.
%if %{with dpdk}
%ifarch %{dpdkarches}
%package dpdk
Summary: Open vSwitch OpenFlow development package (switch, linked with DPDK)
License: ASL 2.0
Supplements: %{name}
%description dpdk
This provides ovs-vswitchd linked with DPDK library.
%endif
%endif
%prep
%if 0%{?commit0:1}
%autosetup -n ovs-%{commit0} -p 1
@ -195,6 +209,9 @@ sed -i.old -e "s/^AC_INIT(openvswitch,.*,/AC_INIT(openvswitch, %{version},/" con
rm -f python/ovs/dirs.py
./boot.sh
mkdir build build-dpdk
pushd build
ln -s ../configure
%configure \
%if %{with libcapng}
--enable-libcapng \
@ -204,22 +221,53 @@ rm -f python/ovs/dirs.py
--disable-static \
--enable-shared \
--enable-ssl \
--with-pkidir=%{_sharedstatedir}/openvswitch/pki
make %{?_smp_mflags}
popd
%if %{with dpdk}
%ifarch %{dpdkarches}
--with-dpdk=shared \
pushd build-dpdk
ln -s ../configure
%configure \
%if %{with libcapng}
--enable-libcapng \
%else
--disable-libcapng \
%endif
--disable-static \
--enable-shared \
--enable-ssl \
--with-dpdk=shared \
--with-pkidir=%{_sharedstatedir}/openvswitch/pki \
--libdir=%{_libdir}/openvswitch-dpdk \
--program-suffix=.dpdk
make %{?_smp_mflags}
popd
%endif
%endif
--with-pkidir=%{_sharedstatedir}/openvswitch/pki
/usr/bin/python3 build-aux/dpdkstrip.py \
--dpdk \
< rhel/usr_lib_systemd_system_ovs-vswitchd.service.in \
> rhel/usr_lib_systemd_system_ovs-vswitchd.service
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
%if %{with dpdk}
%ifarch %{dpdkarches}
make -C build-dpdk install-exec DESTDIR=$RPM_BUILD_ROOT
# We only need ovs-vswitchd-dpdk and some libraries for dpdk subpackage
rm -rf $RPM_BUILD_ROOT%{_bindir}
find $RPM_BUILD_ROOT%{_sbindir} -mindepth 1 -maxdepth 1 -not -name ovs-vswitchd.dpdk -delete
find $RPM_BUILD_ROOT%{_libdir}/openvswitch-dpdk -mindepth 1 -maxdepth 1 -not -name "libofproto*.so.*" -not -name "libopenvswitch*.so.*" -delete
%endif
%endif
make -C build install DESTDIR=$RPM_BUILD_ROOT
mv $RPM_BUILD_ROOT%{_sbindir}/ovs-vswitchd $RPM_BUILD_ROOT%{_sbindir}/ovs-vswitchd.nodpdk
touch $RPM_BUILD_ROOT%{_sbindir}/ovs-vswitchd
install -d -m 0755 $RPM_BUILD_ROOT%{_rundir}/openvswitch
install -d -m 0750 $RPM_BUILD_ROOT%{_localstatedir}/log/openvswitch
@ -306,6 +354,14 @@ rm -f $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovn*
rm -f $RPM_BUILD_ROOT%{_includedir}/ovn/*
%check
for dir in build \
%if %{with dpdk}
%ifarch %{dpdkarches}
build-dpdk \
%endif
%endif
; do
pushd $dir
%if %{with check}
touch resolv.conf
export OVS_RESOLV_CONF=$(pwd)/resolv.conf
@ -324,6 +380,8 @@ rm -f $RPM_BUILD_ROOT%{_includedir}/ovn/*
exit 1
fi
%endif
popd
done
%preun
%if 0%{?systemd_preun:1}
@ -340,6 +398,8 @@ rm -f $RPM_BUILD_ROOT%{_includedir}/ovn/*
%sysusers_create_compat %{SOURCE1}
%post
%{_sbindir}/update-alternatives --install %{_sbindir}/ovs-vswitchd \
ovs-vswitchd %{_sbindir}/ovs-vswitchd.nodpdk 10
if [ $1 -eq 1 ]; then
sed -i 's:^#OVS_USER_ID=:OVS_USER_ID=:' /etc/sysconfig/openvswitch
@ -359,12 +419,29 @@ chown -R openvswitch:openvswitch /etc/openvswitch
%endif
%postun
if [ $1 -eq 0 ] ; then
%{_sbindir}/update-alternatives --remove ovs-vswitchd %{_sbindir}/ovs-vswitchd.nodpdk
fi
%if 0%{?systemd_postun:1}
%systemd_postun %{name}.service
%else
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
%endif
%post dpdk
if fgrep -qw sse4_1 /proc/cpuinfo; then
priority=20
else
echo "Warning: the CPU doesn't support SSE 4.1, dpdk support is not enabled." >&2
priority=5
fi
%{_sbindir}/update-alternatives --install %{_sbindir}/ovs-vswitchd \
ovs-vswitchd %{_sbindir}/ovs-vswitchd.dpdk $priority
%postun dpdk
if [ $1 -eq 0 ] ; then
%{_sbindir}/update-alternatives --remove ovs-vswitchd %{_sbindir}/ovs-vswitchd.dpdk
fi
%files -n python3-openvswitch
%{python3_sitearch}/ovs
@ -416,6 +493,15 @@ chown -R openvswitch:openvswitch /etc/openvswitch
%{_datadir}/openvswitch/scripts/ovs-monitor-ipsec
%{_unitdir}/openvswitch-ipsec.service
%if %{with dpdk}
%ifarch %{dpdkarches}
%files dpdk
%{_libdir}/openvswitch-dpdk/
%ghost %{_sbindir}/ovs-vswitchd
%{_sbindir}/ovs-vswitchd.dpdk
%endif
%endif
%files
%defattr(-,openvswitch,openvswitch)
%dir %{_sysconfdir}/openvswitch
@ -449,7 +535,8 @@ chown -R openvswitch:openvswitch /etc/openvswitch
%{_bindir}/ovs-pki
%{_bindir}/vtep-ctl
%{_libdir}/*.so.*
%{_sbindir}/ovs-vswitchd
%ghost %{_sbindir}/ovs-vswitchd
%{_sbindir}/ovs-vswitchd.nodpdk
%{_sbindir}/ovsdb-server
%{_mandir}/man1/ovsdb-client.1*
%{_mandir}/man1/ovsdb-server.1*
@ -484,6 +571,10 @@ chown -R openvswitch:openvswitch /etc/openvswitch
%{_sysusersdir}/openvswitch.conf
%changelog
* Tue May 24 2022 Timothy Redaelli <tredaelli@redhat.com> - 2.17.0-4
- Create openvswitch-dpdk subpackage, install it by default (weak dependency),
but enable it only if the CPU is new enough (#2081665)
* Mon Mar 28 2022 Timothy Redaelli <tredaelli@redhat.com> - 2.17.0-3
- Be sure dirs.py is updated (#2055576)

Loading…
Cancel
Save