1 %{?!packager: %define packager Brian Behlendorf <behlendorf1@llnl.gov>}
3 %if ! 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version}%{?openEuler}
7 # Exclude input files from mangling
8 %global __brp_mangle_shebangs_exclude_from ^
/usr
/src
/.
*$
10 %define module @PACKAGE@
11 %define mkconf scripts
/dkms.mkconf
16 Release: @RELEASE@
%{?dist}
17 Summary: Kernel module
(s
) (dkms
)
19 Group: System Environment
/Kernel
20 License: @ZFS_META_LICENSE@
21 URL: https
://github.com
/openzfs
/zfs
22 Source0: %{module}-%{version}.tar.gz
23 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n
)
26 Requires: dkms
>= 2.2.0.3
27 Requires(pre
): dkms
>= 2.2.0.3
28 Requires(post
): dkms
>= 2.2.0.3
29 Requires(preun
): dkms
>= 2.2.0.3
30 Requires: gcc
, make, perl
, diffutils
31 Requires(post
): gcc
, make, perl
, diffutils
32 %if 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version}%{?openEuler}
33 Requires: kernel
-devel
>= @ZFS_META_KVER_MIN@
, kernel
-devel
<= @ZFS_META_KVER_MAX@
.999
34 Requires(post
): kernel
-devel
>= @ZFS_META_KVER_MIN@
, kernel
-devel
<= @ZFS_META_KVER_MAX@
.999
35 Conflicts: kernel
-devel
< @ZFS_META_KVER_MIN@
, kernel
-devel
> @ZFS_META_KVER_MAX@
.999
36 Obsoletes
: spl
-dkms
<= %{version}
38 Provides: %{module}-kmod = %{version}
41 %if (0%{?fedora}%{?suse_version}%{?openEuler}) || (0%{?rhel} && 0%{?rhel} < 9)
42 # We don't directly use it, but if this isn't installed, rpmbuild as root can
45 BuildRequires
: ncompress
49 This package contains the dkms ZFS kernel modules.
52 %setup -q
-n
%{module}-%{version}
55 %{mkconf} -n %{module} -v %{version} -f dkms.conf
58 if [ "$RPM_BUILD_ROOT"
!= "
/"
]; then
59 rm -rf $RPM_BUILD_ROOT
61 mkdir -p $RPM_BUILD_ROOT
/usr
/src
/
62 cp
-rf $
{RPM_BUILD_DIR
}/%{module}-%{version} $RPM_BUILD_ROOT
/usr
/src
/
65 if [ "$RPM_BUILD_ROOT"
!= "
/"
]; then
66 rm -rf $RPM_BUILD_ROOT
71 /usr
/src
/%{module}-%{version}
74 echo "Running pre installation script
: $
0. Parameters
: $
*"
75 # We don't want any other versions lingering around in dkms.
76 # Tests with 'dnf' showed that in case of reinstall, or upgrade
77 # the preun scriptlet removed the version we are trying to install.
78 # Because of this, find all zfs dkms sources in /var/lib/dkms and
79 # remove them, if we find a matching version in dkms.
81 dkms_root
=/var
/lib
/dkms
82 if [ -d $
{dkms_root
}/%{module} ]; then
83 cd $
{dkms_root
}/%{module}
84 for x
in [[:digit
:]]*; do
85 [ -d "$x"
] ||
continue
87 opath
="$
{dkms_root
}/%{module}/${otherver}"
88 if [ "$otherver"
!= %{version} ]; then
89 # This is a workaround for a broken 'dkms status', we caused in a previous version.
90 # One day it might be not needed anymore, but it does not hurt to keep it.
91 if dkms status
-m
%{module} -v "$otherver" 2>&1 | grep "${opath}/source/dkms.conf does not exist"
93 echo "ERROR
: dkms status is broken
!"
>&2
94 if [ -L "$
{opath
}/source"
-a
! -d "$
{opath
}/source"
]
96 echo "Trying to fix it by removing the symlink
: $
{opath
}/source"
>&2
97 echo "You should manually remove $
{opath
}"
>&2
98 rm -f "$
{opath
}/source" ||
echo "Removal failed
!"
>&2
101 if [ `dkms status
-m
%{module} -v "$otherver" | grep -c %{module}`
-gt
0 ]; then
102 echo "Removing old
%{module} dkms modules version $otherver from all kernels."
103 dkms remove
-m
%{module} -v "$otherver"
--all ||
:
110 # Uninstall this version of zfs dkms modules before installation of the package.
111 if [ `dkms status
-m
%{module} -v %{version} | grep -c %{module}`
-gt
0 ]; then
112 echo "Removing
%{module} dkms modules version %{version} from all kernels."
113 dkms remove
-m
%{module} -v %{version} --all ||
:
117 echo "Running post installation script
: $
0. Parameters
: $
*"
118 # Add the module to dkms, as reccommended in the dkms man page.
119 # This is generally rpm specfic.
120 # But this also may help, if we have a broken 'dkms status'.
121 # Because, if the sources are available and only the symlink pointing
122 # to them is missing, this will resolve the situation
123 echo "Adding
%{module} dkms modules version %{version} to dkms."
124 dkms add
-m
%{module} -v %{version} %{!?not_rpm:--rpm_safe_upgrade} ||
:
126 # After installing the package, dkms install this zfs version for the current kernel.
127 # Force the overwriting of old modules to avoid diff warnings in dkms status.
128 # Or in case of a downgrade to overwrite newer versions.
129 # Or if some other backed up versions have been restored before.
130 echo "Installing
%{module} dkms modules version %{version} for the current kernel."
131 dkms
install --force
-m
%{module} -v %{version} ||
:
134 dkms_root
="
/var
/lib
/dkms
/%{module}/%{version}"
135 echo "Running pre uninstall script
: $
0. Parameters
: $
*"
136 # In case of upgrade we do nothing. See above comment in pre hook.
137 if [ "$
1"
= "
1"
-o "$
1"
= "upgrade"
] ; then
138 echo "This is an upgrade. Skipping pre uninstall action."
142 # Check if we uninstall the package. In that case remove the dkms modules.
143 # '0' is the value for the first parameter for rpm packages.
144 # 'remove' or 'purge' are the possible names for deb packages.
145 if [ "$
1"
= "
0"
-o "$
1"
= "remove"
-o "$
1"
= "purge"
] ; then
146 if [ `dkms status
-m
%{module} -v %{version} | grep -c %{module}`
-gt
0 ]; then
147 echo "Removing
%{module} dkms modules version %{version} from all kernels."
148 dkms remove
-m
%{module} -v %{version} --all %{!?not_rpm:--rpm_safe_upgrade} && exit 0
150 # If removing the modules failed, it might be because of the broken 'dkms status'.
151 if dkms status
-m
%{module} -v %{version} 2>&1 | grep "${dkms_root}/source/dkms.conf does not exist"
153 echo "ERROR
: dkms status is broken
!"
>&2
154 echo "You should manually remove $
{dkms_root
}"
>&2
155 echo "WARNING
: installed modules
in /lib
/modules
/`uname
-r`
/extra could not be removed automatically
!"
>&2
158 echo "Script parameter $
1 did not match any removal condition."