Blob Blame History Raw
%global pkg wireguard

%global kernel_version 4.18.0-348.el8

%global _use_internal_dependency_generator 0
%global __find_requires /usr/lib/rpm/redhat/find-requires
%global __find_provides /usr/lib/rpm/redhat/find-provides

%global debug_package %{nil}

%global __spec_install_post \
  %{?__debug_package:%{__debug_install_post}} \
  %{__arch_install_post} \
  %{__os_install_post} \
  %{__mod_compress_install_post}

%global __mod_compress_install_post find %{buildroot}/lib/modules -type f -name \*.ko -exec xz \{\} \\;


Name:             kmod-%{pkg}
Version:          1.0.20211208
Release:          3%{?dist}
Summary:          Fast, modern, secure VPN tunnel

License:          GPLv2
URL:              https://www.wireguard.com/

Source0:          https://git.zx2c4.com/%{pkg}-linux-compat/snapshot/%{pkg}-linux-compat-%{version}.tar.xz

ExclusiveArch:    x86_64 aarch64 ppc64le

BuildRequires:    elfutils-libelf-devel
BuildRequires:    gcc
BuildRequires:    kernel-rpm-macros
BuildRequires:    kmod
BuildRequires:    make
BuildRequires:    redhat-rpm-config
BuildRequires:    xz

BuildRequires:    kernel-abi-stablelists = %{kernel_version}
BuildRequires:    kernel-devel = %{kernel_version}
BuildRequires:    kernel-devel-uname-r = %{kernel_version}.%{_arch}

Requires:         kernel >= %{kernel_version}
Requires:         kernel-uname-r >= %{kernel_version}.%{_arch}
Requires:         kernel-modules >= %{kernel_version}
Requires:         kernel-modules-uname-r >= %{kernel_version}.%{_arch}

Provides:         installonlypkg(kernel-module)
Provides:         kernel-modules >= %{kernel_version}.%{_arch}

Requires(post):   %{_sbindir}/depmod
Requires(postun): %{_sbindir}/depmod

Requires(post):   %{_sbindir}/weak-modules
Requires(postun): %{_sbindir}/weak-modules

Supplements:      wireguard-tools
Recommends:       wireguard-tools


%if "%{version}" == "1.0.20211208" && "%{release}" == "1%{?dist}"
Obsoletes:        kmod-%{pkg} = %{?epoch:%{epoch}:}1.0.20210606-7%{?dist}
%endif

%if "%{version}" == "1.0.20211208" && "%{release}" == "2%{?dist}"
Obsoletes:        kmod-%{pkg} = %{?epoch:%{epoch}:}1.0.20210606-7%{?dist}
Obsoletes:        kmod-%{pkg} = %{?epoch:%{epoch}:}%{version}-1%{?dist}
%endif

%if "%{version}" == "1.0.20211208" && "%{release}" == "3%{?dist}"
Obsoletes:        kmod-%{pkg} = %{?epoch:%{epoch}:}1.0.20210606-7%{?dist}
Obsoletes:        kmod-%{pkg} = %{?epoch:%{epoch}:}%{version}-1%{?dist}
Obsoletes:        kmod-%{pkg} = %{?epoch:%{epoch}:}%{version}-2%{?dist}
%endif


%description
WireGuard is an extremely simple yet fast and modern VPN that utilizes
state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more
useful than IPsec, while avoiding the massive headache. It intends to be
considerably more performant than OpenVPN. WireGuard is designed as a general
purpose VPN for running on embedded interfaces and super computers alike, fit
for many different circumstances.


%prep
%autosetup -p1 -n %{pkg}-linux-compat-%{version}


%build
pushd src
%{__make} -C /usr/src/kernels/%{kernel_version}.%{_arch} %{?_smp_mflags} M=$PWD modules
popd


%install
%{__install} -D -t %{buildroot}/lib/modules/%{kernel_version}.%{_arch}/extra/drivers/net/%{pkg} src/%{pkg}.ko

# Make .ko objects temporarily executable for automatic stripping
find %{buildroot}/lib/modules -type f -name \*.ko -exec chmod u+x \{\} \+


%clean
%{__rm} -rf %{buildroot}


%post
mkdir -p %{_localstatedir}/lib/rpm-state/sig-kmods
printf '%s\n' "/lib/modules/%{kernel_version}.%{_arch}/extra/drivers/net/%{pkg}/%{pkg}.ko.xz" >> %{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-add


%preun
mkdir -p %{_localstatedir}/lib/rpm-state/sig-kmods
rpm -ql kmod-%{pkg}-%{?epoch:%{epoch}:}%{version}-%{release}.%{_arch} | grep '/lib/modules/%{kernel_version}.%{_arch}/.*\.ko\.xz$' >> %{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-remove


%postun
if [ -f %{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-remove ]
then
    modules=( $(cat %{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-remove) )
    rm -f %{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-remove
    rmdir --ignore-fail-on-non-empty %{_localstatedir}/lib/rpm-state/sig-kmods
    printf '%s\n' "${modules[@]}" | %{_sbindir}/weak-modules --remove-modules
fi


%pretrans -p <lua>
posix.unlink("%{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-add")
posix.unlink("%{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-remove")


%posttrans
if [ -f %{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-add ]
then
    modules=( $(cat %{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-add) )
    rm -f %{_localstatedir}/lib/rpm-state/sig-kmods/weak-modules-add
    rmdir --ignore-fail-on-non-empty %{_localstatedir}/lib/rpm-state/sig-kmods
    printf '%s\n' "${modules[@]}" | %{_sbindir}/weak-modules --add-modules
fi


%files
%defattr(644,root,root,755)
/lib/modules/%{kernel_version}.%{_arch}
%license COPYING
%doc README.md


%changelog
* Thu Jan 27 2022 Peter Georg <peter.georg@physik.uni-regensburg.de> - 1.0.20211208-3
- Add obsoletes for update path

* Sun Jan 23 2022 Peter Georg <peter.georg@physik.uni-regensburg.de> - 1.0.20211208-2
- Enable ppc64le

* Wed Dec 08 2021 Peter Georg <peter.georg@physik.uni-regensburg.de> - 1.0.20211208-1
- Update to v1.0.20211208

* Wed Oct 27 2021 Peter Georg <peter.georg@physik.uni-regensburg.de> - 1.0.20210606-7
- Rebuild for 4.18.0-348.el8

* Wed Sep 29 2021 Peter Georg <peter.georg@physik.uni-regensburg.de> - 1.0.20210606-6
- Rebuild for 4.18.0-331.el8

* Wed Sep 29 2021 Peter Georg <peter.georg@physik.uni-regensburg.de> - 1.0.20210606-5.1
- Rebuild for 4.18.0-326.el8

* Wed Sep 29 2021 Peter Georg <peter.georg@physik.uni-regensburg.de> - 1.0.20210606-5
- Convert to kABI tracking kmod package (kernel >= 4.18.0-315.el8)