File dkms.spec of Package dkms
%define realname dkms
%define realver 3.0.13
%define srcext tar.gz
# Common info
Name: %{realname}
Version: %{realver}
Release: wiz%{?extraver:0.}1%{?dist}
License: GPL-2.0+
Group: System/Kernel
URL: https://github.com/dell/dkms
Summary: Dynamic Kernel Module Support
# Install-time parameters
ExclusiveOS: linux
Requires: make gcc
Requires: bash >= 3.0
Requires: coreutils sed gawk findutils tar cpio gzip grep
Requires: kmod
# Build-time parameters
BuildRequires: systemd-devel
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-root
Source0: https://codeload.github.com/dell/dkms/%{srcext}/refs/tags/v%{realver}#/%{realname}-%{realver}%{?extraver}.%{srcext}
%description
DKMS stands for Dynamic Kernel Module Support. It is designed to create
a framework where kernel dependent module source can reside so that it is very
easy to rebuild modules as you upgrade kernels. This will allow Linux vendors
to provide driver drops without having to wait for new kernel releases while
also taking out the guesswork for customers attempting to recompile modules
for new kernels.
# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{version}%{?extraver}
%build
%install
%{__make} install install-redhat DESTDIR=%{buildroot} \
LIBDIR=%{_libexecdir}/dkms
%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%files
%defattr(-,root,root)
%license COPYING
%doc README.md
%dir %{_sysconfdir}/dkms/framework.conf.d
%dir %{_sysconfdir}/dkms
%config(noreplace) %{_sysconfdir}/dkms/framework.conf
%dir %{_sysconfdir}/kernel/install.d
%dir %{_sysconfdir}/kernel/postinst.d
%dir %{_sysconfdir}/kernel/prerm.d
%dir %{_sysconfdir}/kernel
%{_sysconfdir}/kernel/install.d/40-dkms.install
%{_sysconfdir}/kernel/postinst.d/dkms
%{_sysconfdir}/kernel/prerm.d/dkms
%{_unitdir}/dkms.service
%{_sbindir}/*
%{_libexecdir}/dkms/
%dir %{_datadir}/bash-completion/completions
%dir %{_datadir}/bash-completion
%dir %{_datadir}/zsh/site-functions
%dir %{_datadir}/zsh
%{_datadir}/bash-completion/completions/dkms
%{_datadir}/zsh/site-functions/_dkms
%doc %{_mandir}/man8/dkms.8*
%dir %{_localstatedir}/lib/dkms
%if 0%{?suse_version}
%pre
%{service_add_pre dkms.service}
%post
%{service_add_post dkms.service}
%preun
%{service_del_preun dkms.service}
%postun
%{service_del_postun dkms.service}
%endif
# File-based triggers availavle with RPM >= 13.0
%if 0%{?suse_version} >= 1500 || 0%{?rhel} >= 8
%transfiletriggerin -- /lib/modules/
while read -r FILENAME; do
if [ "${FILENAME##*/}" = 'build' ]; then
KERN_VER=${FILENAME#/lib/modules/}
KERN_VER=${KERN_VER%%%%/*}
echo "$KERN_VER"
fi
done \
| sort -u \
| xargs -I%% %{_sbindir}/dkms autoinstall -k "%%"
%transfiletriggerun -- /lib/modules/
KVERS=$(while read -r FILENAME; do
if [ "${FILENAME##*/}" = 'build' ]; then
KERN_VER=${FILENAME#/lib/modules/}
KERN_VER=${KERN_VER%%%%/*}
echo "$KERN_VER"
fi
done \
| sort -u)
for KVER in $KVERS; do
%{_sbindir}/dkms status -k "$KVER" \
| while read -r MOD VER _OTHERS; do
%{_sbindir}/dkms remove -m "${MOD%%,}" -v "${VER%%,}" -k "$KVER"
done
done
%endif
%changelog