mirror of
https://github.com/terrapkg/packages.git
synced 2026-06-08 12:52:17 +00:00
add sample spec files from openzfs source
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
%{?!packager: %define packager Brian Behlendorf <behlendorf1@llnl.gov>}
|
||||
|
||||
%if ! 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version}%{?openEuler}
|
||||
%define not_rpm 1
|
||||
%endif
|
||||
|
||||
# Exclude input files from mangling
|
||||
%global __brp_mangle_shebangs_exclude_from ^/usr/src/.*$
|
||||
|
||||
%define module @PACKAGE@
|
||||
%define mkconf scripts/dkms.mkconf
|
||||
|
||||
Name: %{module}-dkms
|
||||
|
||||
Version: @VERSION@
|
||||
Release: @RELEASE@%{?dist}
|
||||
Summary: Kernel module(s) (dkms)
|
||||
|
||||
Group: System Environment/Kernel
|
||||
License: @ZFS_META_LICENSE@
|
||||
URL: https://github.com/openzfs/zfs
|
||||
Source0: %{module}-%{version}.tar.gz
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildArch: noarch
|
||||
|
||||
Requires: dkms >= 2.2.0.3
|
||||
Requires(pre): dkms >= 2.2.0.3
|
||||
Requires(post): dkms >= 2.2.0.3
|
||||
Requires(preun): dkms >= 2.2.0.3
|
||||
Requires: gcc, make, perl, diffutils
|
||||
Requires(post): gcc, make, perl, diffutils
|
||||
|
||||
# Hold back kernel upgrades if kernel is not supported by ZFS
|
||||
%if 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version}%{?openEuler}
|
||||
Requires: kernel-devel >= @ZFS_META_KVER_MIN@, kernel-devel <= @ZFS_META_KVER_MAX@.999
|
||||
Requires(post): kernel-devel >= @ZFS_META_KVER_MIN@, kernel-devel <= @ZFS_META_KVER_MAX@.999
|
||||
Conflicts: kernel-devel < @ZFS_META_KVER_MIN@, kernel-devel > @ZFS_META_KVER_MAX@.999
|
||||
Requires: kernel-uname-r >= @ZFS_META_KVER_MIN@, kernel-uname-r <= @ZFS_META_KVER_MAX@.999
|
||||
Requires(post): kernel-uname-r >= @ZFS_META_KVER_MIN@, kernel-uname-r <= @ZFS_META_KVER_MAX@.999
|
||||
Conflicts: kernel-uname-r < @ZFS_META_KVER_MIN@, kernel-uname-r > @ZFS_META_KVER_MAX@.999
|
||||
|
||||
Obsoletes: spl-dkms <= %{version}
|
||||
%endif
|
||||
Provides: %{module}-kmod = %{version}
|
||||
AutoReqProv: no
|
||||
|
||||
%if (0%{?fedora}%{?suse_version}%{?openEuler}) || (0%{?rhel} && 0%{?rhel} < 9)
|
||||
# We don't directly use it, but if this isn't installed, rpmbuild as root can
|
||||
# crash+corrupt rpmdb
|
||||
# See issue #12071
|
||||
BuildRequires: ncompress
|
||||
%endif
|
||||
|
||||
%description
|
||||
This package contains the dkms ZFS kernel modules.
|
||||
|
||||
%prep
|
||||
%setup -q -n %{module}-%{version}
|
||||
|
||||
%build
|
||||
%{mkconf} -n %{module} -v %{version} -f dkms.conf
|
||||
|
||||
%install
|
||||
if [ "$RPM_BUILD_ROOT" != "/" ]; then
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
fi
|
||||
mkdir -p $RPM_BUILD_ROOT/usr/src/
|
||||
cp -rf ${RPM_BUILD_DIR}/%{module}-%{version} $RPM_BUILD_ROOT/usr/src/
|
||||
|
||||
%clean
|
||||
if [ "$RPM_BUILD_ROOT" != "/" ]; then
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
fi
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
/usr/src/%{module}-%{version}
|
||||
|
||||
%pre
|
||||
echo "Running pre installation script: $0. Parameters: $*"
|
||||
# We don't want any other versions lingering around in dkms.
|
||||
# Tests with 'dnf' showed that in case of reinstall, or upgrade
|
||||
# the preun scriptlet removed the version we are trying to install.
|
||||
# Because of this, find all zfs dkms sources in /var/lib/dkms and
|
||||
# remove them, if we find a matching version in dkms.
|
||||
|
||||
dkms_root=/var/lib/dkms
|
||||
if [ -d ${dkms_root}/%{module} ]; then
|
||||
cd ${dkms_root}/%{module}
|
||||
for x in [[:digit:]]*; do
|
||||
[ -d "$x" ] || continue
|
||||
otherver="$x"
|
||||
opath="${dkms_root}/%{module}/${otherver}"
|
||||
if [ "$otherver" != %{version} ]; then
|
||||
# This is a workaround for a broken 'dkms status', we caused in a previous version.
|
||||
# One day it might be not needed anymore, but it does not hurt to keep it.
|
||||
if dkms status -m %{module} -v "$otherver" 2>&1 | grep "${opath}/source/dkms.conf does not exist"
|
||||
then
|
||||
echo "ERROR: dkms status is broken!" >&2
|
||||
if [ -L "${opath}/source" -a ! -d "${opath}/source" ]
|
||||
then
|
||||
echo "Trying to fix it by removing the symlink: ${opath}/source" >&2
|
||||
echo "You should manually remove ${opath}" >&2
|
||||
rm -f "${opath}/source" || echo "Removal failed!" >&2
|
||||
fi
|
||||
fi
|
||||
if [ `dkms status -m %{module} -v "$otherver" | grep -c %{module}` -gt 0 ]; then
|
||||
echo "Removing old %{module} dkms modules version $otherver from all kernels."
|
||||
dkms remove -m %{module} -v "$otherver" --all ||:
|
||||
fi
|
||||
fi
|
||||
done
|
||||
cd ${dkms_root}
|
||||
fi
|
||||
|
||||
# Uninstall this version of zfs dkms modules before installation of the package.
|
||||
if [ `dkms status -m %{module} -v %{version} | grep -c %{module}` -gt 0 ]; then
|
||||
echo "Removing %{module} dkms modules version %{version} from all kernels."
|
||||
dkms remove -m %{module} -v %{version} --all ||:
|
||||
fi
|
||||
|
||||
%post
|
||||
echo "Running post installation script: $0. Parameters: $*"
|
||||
# Add the module to dkms, as reccommended in the dkms man page.
|
||||
# This is generally rpm specfic.
|
||||
# But this also may help, if we have a broken 'dkms status'.
|
||||
# Because, if the sources are available and only the symlink pointing
|
||||
# to them is missing, this will resolve the situation
|
||||
echo "Adding %{module} dkms modules version %{version} to dkms."
|
||||
dkms add -m %{module} -v %{version} %{!?not_rpm:--rpm_safe_upgrade} ||:
|
||||
|
||||
# After installing the package, dkms install this zfs version for the current kernel.
|
||||
# Force the overwriting of old modules to avoid diff warnings in dkms status.
|
||||
# Or in case of a downgrade to overwrite newer versions.
|
||||
# Or if some other backed up versions have been restored before.
|
||||
echo "Installing %{module} dkms modules version %{version} for the current kernel."
|
||||
dkms install --force -m %{module} -v %{version} ||:
|
||||
|
||||
%preun
|
||||
dkms_root="/var/lib/dkms/%{module}/%{version}"
|
||||
echo "Running pre uninstall script: $0. Parameters: $*"
|
||||
# In case of upgrade we do nothing. See above comment in pre hook.
|
||||
if [ "$1" = "1" -o "$1" = "upgrade" ] ; then
|
||||
echo "This is an upgrade. Skipping pre uninstall action."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check if we uninstall the package. In that case remove the dkms modules.
|
||||
# '0' is the value for the first parameter for rpm packages.
|
||||
# 'remove' or 'purge' are the possible names for deb packages.
|
||||
if [ "$1" = "0" -o "$1" = "remove" -o "$1" = "purge" ] ; then
|
||||
if [ `dkms status -m %{module} -v %{version} | grep -c %{module}` -gt 0 ]; then
|
||||
echo "Removing %{module} dkms modules version %{version} from all kernels."
|
||||
dkms remove -m %{module} -v %{version} --all %{!?not_rpm:--rpm_safe_upgrade} && exit 0
|
||||
fi
|
||||
# If removing the modules failed, it might be because of the broken 'dkms status'.
|
||||
if dkms status -m %{module} -v %{version} 2>&1 | grep "${dkms_root}/source/dkms.conf does not exist"
|
||||
then
|
||||
echo "ERROR: dkms status is broken!" >&2
|
||||
echo "You should manually remove ${dkms_root}" >&2
|
||||
echo "WARNING: installed modules in /lib/modules/`uname -r`/extra could not be removed automatically!" >&2
|
||||
fi
|
||||
else
|
||||
echo "Script parameter $1 did not match any removal condition."
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -0,0 +1,215 @@
|
||||
%define module @PACKAGE@
|
||||
|
||||
%if !%{defined ksrc}
|
||||
%if 0%{?rhel}%{?fedora}%{?openEuler}
|
||||
%define ksrc ${kernel_version##*___}
|
||||
%else
|
||||
%define ksrc "$( \
|
||||
if [ -e "/usr/src/linux-${kernel_version%%___*}" ]; then \
|
||||
echo "/usr/src/linux-${kernel_version%%___*}"; \
|
||||
elif [ -e "/lib/modules/${kernel_version%%___*}/source" ]; then \
|
||||
echo "/lib/modules/${kernel_version%%___*}/source"; \
|
||||
else \
|
||||
echo "/lib/modules/${kernel_version%%___*}/build"; \
|
||||
fi)"
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%if !%{defined kobj}
|
||||
%if 0%{?rhel}%{?fedora}%{?openEuler}
|
||||
%define kobj ${kernel_version##*___}
|
||||
%else
|
||||
%define kobj "$( \
|
||||
if [ -e "/usr/src/linux-${kernel_version%%___*}" ]; then \
|
||||
echo "/usr/src/linux-${kernel_version%%___*}"; \
|
||||
else \
|
||||
echo "/lib/modules/${kernel_version%%___*}/build"; \
|
||||
fi)"
|
||||
%endif
|
||||
%endif
|
||||
|
||||
#define repo rpmfusion
|
||||
#define repo chaos
|
||||
|
||||
# (un)define the next line to either build for the newest or all current kernels
|
||||
%define buildforkernels newest
|
||||
#define buildforkernels current
|
||||
#define buildforkernels akmod
|
||||
|
||||
%bcond_with debug
|
||||
%bcond_with debuginfo
|
||||
|
||||
|
||||
Name: %{module}-kmod
|
||||
|
||||
Version: @VERSION@
|
||||
Release: @RELEASE@%{?dist}
|
||||
Summary: Kernel module(s)
|
||||
|
||||
Group: System Environment/Kernel
|
||||
License: @ZFS_META_LICENSE@
|
||||
URL: https://github.com/openzfs/zfs
|
||||
Source0: %{module}-%{version}.tar.gz
|
||||
Source10: kmodtool
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id} -u -n)
|
||||
%if 0%{?rhel}%{?fedora}%{?openEuler}
|
||||
BuildRequires: gcc, make
|
||||
BuildRequires: elfutils-libelf-devel
|
||||
%endif
|
||||
|
||||
%if (0%{?fedora}%{?suse_version}%{?openEuler}) || (0%{?rhel} && 0%{?rhel} < 9)
|
||||
# We don't directly use it, but if this isn't installed, rpmbuild as root can
|
||||
# crash+corrupt rpmdb
|
||||
# See issue #12071
|
||||
BuildRequires: ncompress
|
||||
%endif
|
||||
|
||||
# The developments headers will conflict with the dkms packages.
|
||||
Conflicts: %{module}-dkms
|
||||
|
||||
%if %{defined repo}
|
||||
|
||||
# Building for a repository use the proper build-sysbuild package
|
||||
# to determine which kernel-devel packages should be installed.
|
||||
BuildRequires: %{_bindir}/kmodtool
|
||||
%{!?kernels:BuildRequires: buildsys-build-%{repo}-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu}}
|
||||
|
||||
%else
|
||||
|
||||
# Building local packages attempt to to use the installed kernel.
|
||||
%{?rhel:BuildRequires: kernel-devel}
|
||||
%{?fedora:BuildRequires: kernel-devel}
|
||||
%{?openEuler:BuildRequires: kernel-devel}
|
||||
%{?suse_version:BuildRequires: kernel-source}
|
||||
|
||||
%if !%{defined kernels} && !%{defined build_src_rpm}
|
||||
%if 0%{?rhel}%{?fedora}%{?suse_version}%{?openEuler}
|
||||
%define kernels %(ls -1 /usr/src/kernels)
|
||||
%else
|
||||
%define kernels %(ls -1 /lib/modules)
|
||||
%endif
|
||||
%endif
|
||||
%endif
|
||||
|
||||
# LDFLAGS are not sanitized by arch/*/Makefile for these architectures.
|
||||
%ifarch ppc ppc64 ppc64le aarch64
|
||||
%global __global_ldflags %{nil}
|
||||
%endif
|
||||
|
||||
# Kmodtool does its magic here. A patched version of kmodtool is shipped
|
||||
# with the source rpm until kmod development packages are supported upstream.
|
||||
# https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714
|
||||
%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) }
|
||||
|
||||
|
||||
%description
|
||||
This package contains the ZFS kernel modules.
|
||||
|
||||
%prep
|
||||
# Error out if there was something wrong with kmodtool.
|
||||
%{?kmodtool_check}
|
||||
|
||||
# Print kmodtool output for debugging purposes:
|
||||
bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null
|
||||
|
||||
%if %{with debug}
|
||||
%define debug --enable-debug
|
||||
%else
|
||||
%define debug --disable-debug
|
||||
%endif
|
||||
|
||||
%if %{with debuginfo}
|
||||
%define debuginfo --enable-debuginfo
|
||||
%else
|
||||
%define debuginfo --disable-debuginfo
|
||||
%endif
|
||||
|
||||
# Leverage VPATH from configure to avoid making multiple copies.
|
||||
%define _configure ../%{module}-%{version}/configure
|
||||
|
||||
%setup -q -c -T -a 0
|
||||
|
||||
for kernel_version in %{?kernel_versions}; do
|
||||
%{__mkdir} _kmod_build_${kernel_version%%___*}
|
||||
done
|
||||
|
||||
%build
|
||||
for kernel_version in %{?kernel_versions}; do
|
||||
cd _kmod_build_${kernel_version%%___*}
|
||||
%configure \
|
||||
--with-config=kernel \
|
||||
--with-linux=%{ksrc} \
|
||||
--with-linux-obj=%{kobj} \
|
||||
%{debug} \
|
||||
%{debuginfo} \
|
||||
%{?kernel_cc} \
|
||||
%{?kernel_ld} \
|
||||
%{?kernel_llvm} \
|
||||
%{?kernel_cross_compile} \
|
||||
%{?kernel_arch}
|
||||
|
||||
# Pre-6.10 kernel builds didn't need to copy over the source files to the
|
||||
# build directory. However we do need to do it though post-6.10 due to
|
||||
# these commits:
|
||||
#
|
||||
# b1992c3772e6 kbuild: use $(src) instead of $(srctree)/$(src) for source
|
||||
# directory
|
||||
#
|
||||
# 9a0ebe5011f4 kbuild: use $(obj)/ instead of $(src)/ for common pattern
|
||||
# rules
|
||||
#
|
||||
# Note that kmodtool actually copies over the source into the build
|
||||
# directory, so what we're doing here is normal. For efficiency reasons
|
||||
# though we just use hardlinks instead of copying.
|
||||
#
|
||||
# See https://github.com/openzfs/zfs/issues/16439 for more info.
|
||||
cp -lR ../%{module}-%{version}/module/* module/
|
||||
|
||||
make %{?_smp_mflags}
|
||||
cd ..
|
||||
done
|
||||
|
||||
|
||||
# Module signing (modsign)
|
||||
#
|
||||
# This must be run _after_ find-debuginfo.sh runs, otherwise that will strip
|
||||
# the signature off of the modules.
|
||||
# (Based on Fedora's kernel.spec workaround)
|
||||
%define __modsign_install_post \
|
||||
sign_pem="%{ksrc}/certs/signing_key.pem"; \
|
||||
sign_x509="%{ksrc}/certs/signing_key.x509"; \
|
||||
if [ -f "${sign_x509}" ]\
|
||||
then \
|
||||
echo "Signing kernel modules ..."; \
|
||||
for kmod in $(find ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/ -name \*.ko); do \
|
||||
%{ksrc}/scripts/sign-file sha256 ${sign_pem} ${sign_x509} ${kmod}; \
|
||||
done \
|
||||
fi \
|
||||
%{nil}
|
||||
|
||||
# hack to ensure signing happens after find-debuginfo.sh runs
|
||||
%define __spec_install_post \
|
||||
%{?__debug_package:%{__debug_install_post}}\
|
||||
%{__arch_install_post}\
|
||||
%{__os_install_post}\
|
||||
%{__modsign_install_post}
|
||||
|
||||
%install
|
||||
rm -rf ${RPM_BUILD_ROOT}
|
||||
|
||||
# Relies on the kernel 'modules_install' make target.
|
||||
for kernel_version in %{?kernel_versions}; do
|
||||
cd _kmod_build_${kernel_version%%___*}
|
||||
make install \
|
||||
DESTDIR=${RPM_BUILD_ROOT} \
|
||||
%{?prefix:INSTALL_MOD_PATH=%{?prefix}} \
|
||||
INSTALL_MOD_DIR=%{kmodinstdir_postfix}
|
||||
cd ..
|
||||
done
|
||||
# find-debuginfo.sh only considers executables
|
||||
chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*
|
||||
%{?akmod_install}
|
||||
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
@@ -0,0 +1,606 @@
|
||||
%global _sbindir /sbin
|
||||
%global _libdir /%{_lib}
|
||||
|
||||
# Set the default udev directory based on distribution.
|
||||
%if %{undefined _udevdir}
|
||||
%if 0%{?rhel}%{?fedora}%{?centos}%{?suse_version}%{?openEuler}
|
||||
%global _udevdir %{_prefix}/lib/udev
|
||||
%else
|
||||
%global _udevdir /lib/udev
|
||||
%endif
|
||||
%endif
|
||||
|
||||
# Set the default udevrule directory based on distribution.
|
||||
%if %{undefined _udevruledir}
|
||||
%if 0%{?rhel}%{?fedora}%{?centos}%{?suse_version}%{?openEuler}
|
||||
%global _udevruledir %{_prefix}/lib/udev/rules.d
|
||||
%else
|
||||
%global _udevruledir /lib/udev/rules.d
|
||||
%endif
|
||||
%endif
|
||||
|
||||
# Set the default _bashcompletiondir directory based on distribution.
|
||||
%if %{undefined _bashcompletiondir}
|
||||
%if 0%{?rhel}%{?fedora}%{?centos}%{?suse_version}%{?openEuler}
|
||||
%global _bashcompletiondir /etc/bash_completion.d
|
||||
%else
|
||||
%global _bashcompletiondir /usr/share/bash-completion
|
||||
%endif
|
||||
%endif
|
||||
|
||||
# Set the default dracut directory based on distribution.
|
||||
%if %{undefined _dracutdir}
|
||||
%if 0%{?rhel}%{?fedora}%{?centos}%{?suse_version}%{?openEuler}
|
||||
%global _dracutdir %{_prefix}/lib/dracut
|
||||
%else
|
||||
%global _dracutdir %{_prefix}/share/dracut
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%if %{undefined _initconfdir}
|
||||
%global _initconfdir /etc/sysconfig
|
||||
%endif
|
||||
|
||||
%if %{undefined _unitdir}
|
||||
%global _unitdir %{_prefix}/lib/systemd/system
|
||||
%endif
|
||||
|
||||
%if %{undefined _presetdir}
|
||||
%global _presetdir %{_prefix}/lib/systemd/system-preset
|
||||
%endif
|
||||
|
||||
%if %{undefined _modulesloaddir}
|
||||
%global _modulesloaddir %{_prefix}/lib/modules-load.d
|
||||
%endif
|
||||
|
||||
%if %{undefined _systemdgeneratordir}
|
||||
%global _systemdgeneratordir %{_prefix}/lib/systemd/system-generators
|
||||
%endif
|
||||
|
||||
%if %{undefined _pkgconfigdir}
|
||||
%global _pkgconfigdir %{_prefix}/%{_lib}/pkgconfig
|
||||
%endif
|
||||
|
||||
%bcond_with debug
|
||||
%bcond_with debuginfo
|
||||
%bcond_with asan
|
||||
%bcond_with ubsan
|
||||
%bcond_with systemd
|
||||
%bcond_with pam
|
||||
%bcond_without pyzfs
|
||||
|
||||
# Generic enable switch for systemd
|
||||
%if %{with systemd}
|
||||
%define _systemd 1
|
||||
%endif
|
||||
|
||||
# Distros below support systemd
|
||||
%if 0%{?rhel}%{?fedora}%{?centos}%{?suse_version}%{?openEuler}
|
||||
%define _systemd 1
|
||||
%endif
|
||||
|
||||
# When not specified default to distribution provided version.
|
||||
%if %{undefined __use_python}
|
||||
%define __python /usr/bin/python3
|
||||
%define __python_pkg_version 3
|
||||
%else
|
||||
%define __python %{__use_python}
|
||||
%define __python_pkg_version %{__use_python_pkg_version}
|
||||
%endif
|
||||
%define __python_sitelib %(%{__python} -Esc "
|
||||
import sysconfig;
|
||||
if hasattr(sysconfig, 'get_default_scheme'):
|
||||
scheme = sysconfig.get_default_scheme()
|
||||
else:
|
||||
scheme = sysconfig._get_default_scheme()
|
||||
if scheme == 'posix_local':
|
||||
scheme = 'posix_prefix'
|
||||
prefix = '%{_prefix}'
|
||||
if prefix == 'NONE':
|
||||
prefix = '%{ac_default_prefix}'
|
||||
sitedir = sysconfig.get_path('purelib', scheme, vars={'base': prefix})
|
||||
print(sitedir);" 2>/dev/null || %{__python} -Esc "from distutils import sysconfig; print(sysconfig.get_python_lib(0,0))")
|
||||
|
||||
Name: @PACKAGE@
|
||||
Version: @VERSION@
|
||||
Release: @RELEASE@%{?dist}
|
||||
Summary: Commands to control the kernel modules and libraries
|
||||
|
||||
Group: System Environment/Kernel
|
||||
License: @ZFS_META_LICENSE@
|
||||
URL: https://github.com/openzfs/zfs
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
Requires: libzpool7%{?_isa} = %{version}-%{release}
|
||||
Requires: libnvpair3%{?_isa} = %{version}-%{release}
|
||||
Requires: libuutil3%{?_isa} = %{version}-%{release}
|
||||
Requires: libzfs7%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-kmod = %{version}
|
||||
Provides: %{name}-kmod-common = %{version}-%{release}
|
||||
Obsoletes: spl <= %{version}
|
||||
|
||||
# zfs-fuse provides the same commands and man pages that OpenZFS does.
|
||||
# Renaming those on either side would conflict with all available documentation.
|
||||
Conflicts: zfs-fuse
|
||||
|
||||
%if 0%{?rhel}%{?centos}%{?fedora}%{?suse_version}%{?openEuler}
|
||||
BuildRequires: gcc, make
|
||||
BuildRequires: zlib-devel
|
||||
BuildRequires: libuuid-devel
|
||||
BuildRequires: libblkid-devel
|
||||
BuildRequires: libudev-devel
|
||||
BuildRequires: libattr-devel
|
||||
BuildRequires: openssl-devel
|
||||
%if 0%{?fedora}%{?suse_version}%{?openEuler} || 0%{?rhel} >= 8 || 0%{?centos} >= 8
|
||||
BuildRequires: libtirpc-devel
|
||||
%endif
|
||||
|
||||
%if (0%{?fedora}%{?suse_version}%{?openEuler}) || (0%{?rhel} && 0%{?rhel} < 9)
|
||||
# We don't directly use it, but if this isn't installed, rpmbuild as root can
|
||||
# crash+corrupt rpmdb
|
||||
# See issue #12071
|
||||
BuildRequires: ncompress
|
||||
%endif
|
||||
|
||||
Requires: openssl
|
||||
%if 0%{?_systemd}
|
||||
BuildRequires: systemd
|
||||
%endif
|
||||
|
||||
%endif
|
||||
|
||||
%if 0%{?_systemd}
|
||||
Requires(post): systemd
|
||||
Requires(preun): systemd
|
||||
Requires(postun): systemd
|
||||
%endif
|
||||
|
||||
# The zpool iostat/status -c scripts call some utilities like lsblk and iostat
|
||||
Requires: util-linux
|
||||
Requires: sysstat
|
||||
|
||||
%description
|
||||
This package contains the core ZFS command line utilities.
|
||||
|
||||
%package -n libzpool7
|
||||
Summary: Native ZFS pool library for Linux
|
||||
Group: System Environment/Kernel
|
||||
Obsoletes: libzpool2 <= %{version}
|
||||
Obsoletes: libzpool4 <= %{version}
|
||||
Obsoletes: libzpool5 <= %{version}
|
||||
Obsoletes: libzpool6 <= %{version}
|
||||
|
||||
%description -n libzpool7
|
||||
This package contains the zpool library, which provides support
|
||||
for managing zpools
|
||||
|
||||
%if %{defined ldconfig_scriptlets}
|
||||
%ldconfig_scriptlets -n libzpool7
|
||||
%else
|
||||
%post -n libzpool7 -p /sbin/ldconfig
|
||||
%postun -n libzpool7 -p /sbin/ldconfig
|
||||
%endif
|
||||
|
||||
%package -n libnvpair3
|
||||
Summary: Solaris name-value library for Linux
|
||||
Group: System Environment/Kernel
|
||||
Obsoletes: libnvpair1 <= %{version}
|
||||
|
||||
%description -n libnvpair3
|
||||
This package contains routines for packing and unpacking name-value
|
||||
pairs. This functionality is used to portably transport data across
|
||||
process boundaries, between kernel and user space, and can be used
|
||||
to write self describing data structures on disk.
|
||||
|
||||
%if %{defined ldconfig_scriptlets}
|
||||
%ldconfig_scriptlets -n libnvpair3
|
||||
%else
|
||||
%post -n libnvpair3 -p /sbin/ldconfig
|
||||
%postun -n libnvpair3 -p /sbin/ldconfig
|
||||
%endif
|
||||
|
||||
%package -n libuutil3
|
||||
Summary: Solaris userland utility library for Linux
|
||||
Group: System Environment/Kernel
|
||||
Obsoletes: libuutil1 <= %{version}
|
||||
|
||||
%description -n libuutil3
|
||||
This library provides a variety of compatibility functions for OpenZFS:
|
||||
* libspl: The Solaris Porting Layer userland library, which provides APIs
|
||||
that make it possible to run Solaris user code in a Linux environment
|
||||
with relatively minimal modification.
|
||||
* libavl: The Adelson-Velskii Landis balanced binary tree manipulation
|
||||
library.
|
||||
* libefi: The Extensible Firmware Interface library for GUID disk
|
||||
partitioning.
|
||||
* libshare: NFS, SMB, and iSCSI service integration for ZFS.
|
||||
|
||||
%if %{defined ldconfig_scriptlets}
|
||||
%ldconfig_scriptlets -n libuutil3
|
||||
%else
|
||||
%post -n libuutil3 -p /sbin/ldconfig
|
||||
%postun -n libuutil3 -p /sbin/ldconfig
|
||||
%endif
|
||||
|
||||
# The library version is encoded in the package name. When updating the
|
||||
# version information it is important to add an obsoletes line below for
|
||||
# the previous version of the package.
|
||||
%package -n libzfs7
|
||||
Summary: Native ZFS filesystem library for Linux
|
||||
Group: System Environment/Kernel
|
||||
Obsoletes: libzfs2 <= %{version}
|
||||
Obsoletes: libzfs4 <= %{version}
|
||||
Obsoletes: libzfs5 <= %{version}
|
||||
Obsoletes: libzfs6 <= %{version}
|
||||
|
||||
%description -n libzfs7
|
||||
This package provides support for managing ZFS filesystems
|
||||
|
||||
%if %{defined ldconfig_scriptlets}
|
||||
%ldconfig_scriptlets -n libzfs7
|
||||
%else
|
||||
%post -n libzfs7 -p /sbin/ldconfig
|
||||
%postun -n libzfs7 -p /sbin/ldconfig
|
||||
%endif
|
||||
|
||||
%package -n libzfs7-devel
|
||||
Summary: Development headers
|
||||
Group: System Environment/Kernel
|
||||
Requires: libzfs7%{?_isa} = %{version}-%{release}
|
||||
Requires: libzpool7%{?_isa} = %{version}-%{release}
|
||||
Requires: libnvpair3%{?_isa} = %{version}-%{release}
|
||||
Requires: libuutil3%{?_isa} = %{version}-%{release}
|
||||
Provides: libzpool7-devel = %{version}-%{release}
|
||||
Provides: libnvpair3-devel = %{version}-%{release}
|
||||
Provides: libuutil3-devel = %{version}-%{release}
|
||||
Obsoletes: zfs-devel <= %{version}
|
||||
Obsoletes: libzfs2-devel <= %{version}
|
||||
Obsoletes: libzfs4-devel <= %{version}
|
||||
Obsoletes: libzfs5-devel <= %{version}
|
||||
|
||||
%description -n libzfs7-devel
|
||||
This package contains the header files needed for building additional
|
||||
applications against the ZFS libraries.
|
||||
|
||||
%package test
|
||||
Summary: Test infrastructure
|
||||
Group: System Environment/Kernel
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: parted
|
||||
Requires: lsscsi
|
||||
Requires: mdadm
|
||||
Requires: bc
|
||||
Requires: ksh
|
||||
Requires: fio
|
||||
Requires: acl
|
||||
Requires: sudo
|
||||
Requires: sysstat
|
||||
Requires: libaio
|
||||
Requires: python%{__python_pkg_version}
|
||||
%if 0%{?rhel}%{?centos}%{?fedora}%{?suse_version}%{?openEuler}
|
||||
BuildRequires: libaio-devel
|
||||
%endif
|
||||
AutoReqProv: no
|
||||
|
||||
%description test
|
||||
This package contains test infrastructure and support scripts for
|
||||
validating the file system.
|
||||
|
||||
%package dracut
|
||||
Summary: Dracut module
|
||||
Group: System Environment/Kernel
|
||||
BuildArch: noarch
|
||||
Requires: %{name} >= %{version}
|
||||
Requires: dracut
|
||||
Requires: /usr/bin/awk
|
||||
Requires: grep
|
||||
|
||||
%description dracut
|
||||
This package contains a dracut module used to construct an initramfs
|
||||
image which is ZFS aware.
|
||||
|
||||
%if %{with pyzfs}
|
||||
# Enforce `python36-` package prefix for CentOS 7
|
||||
# since dependencies come from EPEL and are named this way
|
||||
%package -n python%{__python_pkg_version}-pyzfs
|
||||
Summary: Python %{python_version} wrapper for libzfs_core
|
||||
Group: Development/Languages/Python
|
||||
License: Apache-2.0
|
||||
BuildArch: noarch
|
||||
Requires: libzfs7 = %{version}-%{release}
|
||||
Requires: libnvpair3 = %{version}-%{release}
|
||||
Requires: libffi
|
||||
Requires: python%{__python_pkg_version}
|
||||
|
||||
%if 0%{?centos} == 7
|
||||
Requires: python36-cffi
|
||||
%else
|
||||
Requires: python%{__python_pkg_version}-cffi
|
||||
%endif
|
||||
|
||||
%if 0%{?rhel}%{?centos}%{?fedora}%{?suse_version}%{?openEuler}
|
||||
%if 0%{?centos} == 7
|
||||
BuildRequires: python36-packaging
|
||||
BuildRequires: python36-devel
|
||||
BuildRequires: python36-cffi
|
||||
BuildRequires: python36-setuptools
|
||||
%else
|
||||
BuildRequires: python%{__python_pkg_version}-packaging
|
||||
BuildRequires: python%{__python_pkg_version}-devel
|
||||
BuildRequires: python%{__python_pkg_version}-cffi
|
||||
BuildRequires: python%{__python_pkg_version}-setuptools
|
||||
%endif
|
||||
|
||||
BuildRequires: libffi-devel
|
||||
%endif
|
||||
|
||||
%description -n python%{__python_pkg_version}-pyzfs
|
||||
This package provides a python wrapper for the libzfs_core C library.
|
||||
%endif
|
||||
|
||||
%if 0%{?_initramfs}
|
||||
%package initramfs
|
||||
Summary: Initramfs module
|
||||
Group: System Environment/Kernel
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: initramfs-tools
|
||||
|
||||
%description initramfs
|
||||
This package contains a initramfs module used to construct an initramfs
|
||||
image which is ZFS aware.
|
||||
%endif
|
||||
|
||||
%if %{with pam}
|
||||
%package -n pam_zfs_key
|
||||
Summary: PAM module for encrypted ZFS datasets
|
||||
|
||||
%if 0%{?rhel}%{?centos}%{?fedora}%{?suse_version}%{?openEuler}
|
||||
BuildRequires: pam-devel
|
||||
%endif
|
||||
|
||||
%description -n pam_zfs_key
|
||||
This package contains the pam_zfs_key PAM module, which provides
|
||||
support for unlocking datasets on user login.
|
||||
%endif
|
||||
|
||||
%prep
|
||||
%if %{with debug}
|
||||
%define debug --enable-debug
|
||||
%else
|
||||
%define debug --disable-debug
|
||||
%endif
|
||||
|
||||
%if %{with debuginfo}
|
||||
%define debuginfo --enable-debuginfo
|
||||
%else
|
||||
%define debuginfo --disable-debuginfo
|
||||
%endif
|
||||
|
||||
%if %{with asan}
|
||||
%define asan --enable-asan
|
||||
%else
|
||||
%define asan --disable-asan
|
||||
%endif
|
||||
|
||||
%if %{with ubsan}
|
||||
%define ubsan --enable-ubsan
|
||||
%else
|
||||
%define ubsan --disable-ubsan
|
||||
%endif
|
||||
|
||||
%if 0%{?_systemd}
|
||||
%define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --with-systemdmodulesloaddir=%{_modulesloaddir} --with-systemdgeneratordir=%{_systemdgeneratordir} --disable-sysvinit
|
||||
%define systemd_svcs zfs-import-cache.service zfs-import-scan.service zfs-mount.service zfs-mount@.service zfs-share.service zfs-zed.service zfs.target zfs-import.target zfs-volume-wait.service zfs-volumes.target
|
||||
%else
|
||||
%define systemd --enable-sysvinit --disable-systemd
|
||||
%endif
|
||||
|
||||
%if %{with pyzfs}
|
||||
%define pyzfs --enable-pyzfs
|
||||
%else
|
||||
%define pyzfs --disable-pyzfs
|
||||
%endif
|
||||
|
||||
%if %{with pam}
|
||||
%define pam --enable-pam
|
||||
%else
|
||||
%define pam --disable-pam
|
||||
%endif
|
||||
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
%configure \
|
||||
--with-config=user \
|
||||
--with-udevdir=%{_udevdir} \
|
||||
--with-udevruledir=%{_udevruledir} \
|
||||
--with-dracutdir=%{_dracutdir} \
|
||||
--with-pamconfigsdir=%{_datadir}/pam-configs \
|
||||
--with-pammoduledir=%{_libdir}/security \
|
||||
--with-python=%{__python} \
|
||||
--with-pkgconfigdir=%{_pkgconfigdir} \
|
||||
--disable-static \
|
||||
%{debug} \
|
||||
%{debuginfo} \
|
||||
%{asan} \
|
||||
%{ubsan} \
|
||||
%{systemd} \
|
||||
%{pam} \
|
||||
%{pyzfs}
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
%{__rm} -rf $RPM_BUILD_ROOT
|
||||
make install DESTDIR=%{?buildroot}
|
||||
find %{?buildroot}%{_libdir} -name '*.la' -exec rm -f {} \;
|
||||
%if 0%{!?__brp_mangle_shebangs:1}
|
||||
find %{?buildroot}%{_bindir} \
|
||||
\( -name zarcsummary -or -name zarcstat -or -name dbufstat \
|
||||
-or -name zilstat \) \
|
||||
-exec %{__sed} -i 's|^#!.*|#!%{__python}|' {} \;
|
||||
find %{?buildroot}%{_datadir} \
|
||||
\( -name test-runner.py -or -name zts-report.py \) \
|
||||
-exec %{__sed} -i 's|^#!.*|#!%{__python}|' {} \;
|
||||
%endif
|
||||
|
||||
%post
|
||||
%if 0%{?_systemd}
|
||||
%if 0%{?systemd_post:1}
|
||||
%systemd_post %{systemd_svcs}
|
||||
%else
|
||||
if [ "$1" = "1" -o "$1" = "install" ] ; then
|
||||
# Initial installation
|
||||
systemctl preset %{systemd_svcs} >/dev/null || true
|
||||
fi
|
||||
%endif
|
||||
%else
|
||||
if [ -x /sbin/chkconfig ]; then
|
||||
/sbin/chkconfig --add zfs-import
|
||||
/sbin/chkconfig --add zfs-load-key
|
||||
/sbin/chkconfig --add zfs-mount
|
||||
/sbin/chkconfig --add zfs-share
|
||||
/sbin/chkconfig --add zfs-zed
|
||||
fi
|
||||
%endif
|
||||
exit 0
|
||||
|
||||
# On RHEL/CentOS 7 the static nodes aren't refreshed by default after
|
||||
# installing a package. This is the default behavior for Fedora.
|
||||
%posttrans
|
||||
%if 0%{?rhel} == 7 || 0%{?centos} == 7
|
||||
systemctl restart kmod-static-nodes
|
||||
systemctl restart systemd-tmpfiles-setup-dev
|
||||
udevadm trigger
|
||||
%endif
|
||||
|
||||
%preun
|
||||
%if 0%{?_systemd}
|
||||
%if 0%{?systemd_preun:1}
|
||||
%systemd_preun %{systemd_svcs}
|
||||
%else
|
||||
if [ "$1" = "0" -o "$1" = "remove" ] ; then
|
||||
# Package removal, not upgrade
|
||||
systemctl --no-reload disable %{systemd_svcs} >/dev/null || true
|
||||
systemctl stop %{systemd_svcs} >/dev/null || true
|
||||
fi
|
||||
%endif
|
||||
%else
|
||||
if [ "$1" = "0" -o "$1" = "remove" ] && [ -x /sbin/chkconfig ]; then
|
||||
/sbin/chkconfig --del zfs-import
|
||||
/sbin/chkconfig --del zfs-load-key
|
||||
/sbin/chkconfig --del zfs-mount
|
||||
/sbin/chkconfig --del zfs-share
|
||||
/sbin/chkconfig --del zfs-zed
|
||||
fi
|
||||
%endif
|
||||
exit 0
|
||||
|
||||
%postun
|
||||
%if 0%{?_systemd}
|
||||
%if 0%{?systemd_postun:1}
|
||||
%systemd_postun %{systemd_svcs}
|
||||
%else
|
||||
systemctl --system daemon-reload >/dev/null || true
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%files
|
||||
# Core utilities
|
||||
%{_sbindir}/*
|
||||
%{_bindir}/raidz_test
|
||||
%{_bindir}/zvol_wait
|
||||
# Optional Python 3 scripts
|
||||
%{_bindir}/zarcsummary
|
||||
%{_bindir}/zarcstat
|
||||
%{_bindir}/dbufstat
|
||||
%{_bindir}/zilstat
|
||||
# Man pages
|
||||
%{_mandir}/man1/*
|
||||
%{_mandir}/man4/*
|
||||
%{_mandir}/man5/*
|
||||
%{_mandir}/man7/*
|
||||
%{_mandir}/man8/*
|
||||
# Configuration files and scripts
|
||||
%{_libexecdir}/%{name}
|
||||
%{_udevdir}/vdev_id
|
||||
%{_udevdir}/zvol_id
|
||||
%{_udevdir}/rules.d/*
|
||||
%{_datadir}/%{name}/compatibility.d
|
||||
%if ! 0%{?_systemd} || 0%{?_initramfs}
|
||||
# Files needed for sysvinit and initramfs-tools
|
||||
%{_sysconfdir}/%{name}/zfs-functions
|
||||
%config(noreplace) %{_initconfdir}/zfs
|
||||
%else
|
||||
%exclude %{_sysconfdir}/%{name}/zfs-functions
|
||||
%exclude %{_initconfdir}/zfs
|
||||
%endif
|
||||
%if 0%{?_systemd}
|
||||
%{_unitdir}/*
|
||||
%{_presetdir}/*
|
||||
%{_modulesloaddir}/*
|
||||
%{_systemdgeneratordir}/*
|
||||
%else
|
||||
%config(noreplace) %{_sysconfdir}/init.d/*
|
||||
%endif
|
||||
%config(noreplace) %{_sysconfdir}/%{name}/zed.d/*
|
||||
%config(noreplace) %{_sysconfdir}/%{name}/zpool.d/*
|
||||
%config(noreplace) %{_sysconfdir}/%{name}/vdev_id.conf.*.example
|
||||
%attr(440, root, root) %config(noreplace) %{_sysconfdir}/sudoers.d/*
|
||||
|
||||
%config(noreplace) %{_bashcompletiondir}/zfs
|
||||
%config(noreplace) %{_bashcompletiondir}/zpool
|
||||
|
||||
%files -n libzpool7
|
||||
%{_libdir}/libzpool.so.*
|
||||
|
||||
%files -n libnvpair3
|
||||
%{_libdir}/libnvpair.so.*
|
||||
|
||||
%files -n libuutil3
|
||||
%{_libdir}/libuutil.so.*
|
||||
|
||||
%files -n libzfs7
|
||||
%{_libdir}/libzfs*.so.*
|
||||
|
||||
%files -n libzfs7-devel
|
||||
%{_pkgconfigdir}/libzfs.pc
|
||||
%{_pkgconfigdir}/libzfsbootenv.pc
|
||||
%{_pkgconfigdir}/libzfs_core.pc
|
||||
%{_libdir}/*.so
|
||||
%{_includedir}/*
|
||||
%doc AUTHORS COPYRIGHT LICENSE NOTICE README.md
|
||||
|
||||
%files test
|
||||
%{_datadir}/%{name}/zfs-tests
|
||||
%{_datadir}/%{name}/test-runner
|
||||
%{_datadir}/%{name}/runfiles
|
||||
%{_datadir}/%{name}/*.sh
|
||||
|
||||
%files dracut
|
||||
%doc contrib/dracut/README.md
|
||||
%{_dracutdir}/modules.d/*
|
||||
|
||||
%if %{with pyzfs}
|
||||
%files -n python%{__python_pkg_version}-pyzfs
|
||||
%doc contrib/pyzfs/README
|
||||
%doc contrib/pyzfs/LICENSE
|
||||
%defattr(-,root,root,-)
|
||||
%{__python_sitelib}/libzfs_core/*
|
||||
%{__python_sitelib}/pyzfs*
|
||||
%endif
|
||||
|
||||
%if 0%{?_initramfs}
|
||||
%files initramfs
|
||||
%doc contrib/initramfs/README.md
|
||||
/usr/share/initramfs-tools/*
|
||||
%else
|
||||
# Since we're not building the initramfs package,
|
||||
# ignore those files.
|
||||
%exclude /usr/share/initramfs-tools
|
||||
%endif
|
||||
|
||||
%if %{with pam}
|
||||
%files -n pam_zfs_key
|
||||
%{_libdir}/security/*
|
||||
%{_datadir}/pam-configs/*
|
||||
%endif
|
||||
Reference in New Issue
Block a user