mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 11:29:36 +03:00
e3fb781c5f
Historically a dynamic misc minor number was registered for the /dev/zfs device in order to prevent minor number collisions. This was fine but it prevented us from being able to use the kernel module auto-loaded which requires a known reserved value. Resolve this issue by adding a configure test to find an available misc minor number which can then be used in MODULE_ALIAS_MISCDEV at build time. By adding this alias the zfs kmod is added to the list of known static-nodes and the systemd-tmpfiles-setup-dev service will create a /dev/zfs character device at boot time. This in turn allows us to update the 90-zfs.rules file to make it aware this is a static node. The upshot of this is that whenever a process (zpool, zfs, zed) opens the /dev/zfs the kmods will be automatic loaded. This even works for unprivileged users so there is no longer a need to manually load the modules at boot time. As an additional bonus the zed now no longer needs to start after the zfs-import.service since it will trigger the module load. In the unlikely event the minor number we selected conflicts with another out of tree unregistered minor number the code falls back to dynamically allocating it. In this case the modules again must be manually loaded. Note that due to the change in the method of registering the minor number the zimport.sh test case may incorrectly fail when the static node for the installed packages is created instead of the dynamic one. This issue will only transiently impact zimport.sh for this single commit when we transition and are mixing and matching methods. Reviewed-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> TEST_ZIMPORT_SKIP="yes" Closes #7287
423 lines
12 KiB
RPMSpec
423 lines
12 KiB
RPMSpec
%global _sbindir /sbin
|
|
%global _libdir /%{_lib}
|
|
|
|
# Set the default udev directory based on distribution.
|
|
%if %{undefined _udevdir}
|
|
%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
|
|
%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%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
|
|
%global _udevruledir %{_prefix}/lib/udev/rules.d
|
|
%else
|
|
%global _udevruledir /lib/udev/rules.d
|
|
%endif
|
|
%endif
|
|
|
|
# Set the default dracut directory based on distribution.
|
|
%if %{undefined _dracutdir}
|
|
%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
|
|
%global _dracutdir %{_prefix}/lib/dracut
|
|
%else
|
|
%global _dracutdir %{_prefix}/share/dracut
|
|
%endif
|
|
%endif
|
|
|
|
# Set the default _initconfdir when undefined.
|
|
%if %{undefined _initconfdir}
|
|
%global _initconfdir /etc/sysconfig
|
|
%endif
|
|
|
|
%bcond_with debug
|
|
%bcond_with systemd
|
|
|
|
# Python permits the !/usr/bin/python shebang for scripts that are cross
|
|
# compatible between python2 and python3, but Fedora 28 does not. Fedora
|
|
# wants us to choose python3 for cross-compatible scripts. Since we want
|
|
# to support python2 and python3 users, exclude our scripts from Fedora 28's
|
|
# RPM build check, so that we don't get a bunch of build warnings.
|
|
#
|
|
# Details: https://github.com/zfsonlinux/zfs/issues/7360
|
|
#
|
|
%global __brp_mangle_shebangs_exclude_from arc_summary.py|arcstat.py|dbufstat.py|test-runner.py
|
|
|
|
# Generic enable switch for systemd
|
|
%if %{with systemd}
|
|
%define _systemd 1
|
|
%endif
|
|
|
|
# RHEL >= 7 comes with systemd
|
|
%if 0%{?rhel} >= 7
|
|
%define _systemd 1
|
|
%endif
|
|
|
|
# Fedora >= 15 comes with systemd, but only >= 18 has
|
|
# the proper macros
|
|
%if 0%{?fedora} >= 18
|
|
%define _systemd 1
|
|
%endif
|
|
|
|
# opensuse >= 12.1 comes with systemd, but only >= 13.1
|
|
# has the proper macros
|
|
%if 0%{?suse_version} >= 1310
|
|
%define _systemd 1
|
|
%endif
|
|
|
|
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: http://zfsonlinux.org/
|
|
Source0: %{name}-%{version}.tar.gz
|
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
|
Requires: spl = %{version}
|
|
Requires: libzpool2 = %{version}
|
|
Requires: libnvpair1 = %{version}
|
|
Requires: libuutil1 = %{version}
|
|
Requires: libzfs2 = %{version}
|
|
Requires: %{name}-kmod = %{version}
|
|
Provides: %{name}-kmod-common = %{version}
|
|
|
|
# zfs-fuse provides the same commands and man pages that ZoL does. Renaming
|
|
# those on either side would conflict with all available documentation.
|
|
Conflicts: zfs-fuse
|
|
|
|
%if 0%{?rhel}%{?fedora}%{?suse_version}
|
|
BuildRequires: gcc, make
|
|
BuildRequires: zlib-devel
|
|
BuildRequires: libuuid-devel
|
|
BuildRequires: libblkid-devel
|
|
BuildRequires: libudev-devel
|
|
BuildRequires: libattr-devel
|
|
%if 0%{?fedora} >= 28
|
|
BuildRequires: libtirpc-devel
|
|
%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 ZFS command line utilities.
|
|
|
|
%package -n libzpool2
|
|
Summary: Native ZFS pool library for Linux
|
|
Group: System Environment/Kernel
|
|
|
|
%description -n libzpool2
|
|
This package contains the zpool library, which provides support
|
|
for managing zpools
|
|
|
|
%post -n libzpool2 -p /sbin/ldconfig
|
|
%postun -n libzpool2 -p /sbin/ldconfig
|
|
|
|
%package -n libnvpair1
|
|
Summary: Solaris name-value library for Linux
|
|
Group: System Environment/Kernel
|
|
|
|
%description -n libnvpair1
|
|
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.
|
|
|
|
%post -n libnvpair1 -p /sbin/ldconfig
|
|
%postun -n libnvpair1 -p /sbin/ldconfig
|
|
|
|
%package -n libuutil1
|
|
Summary: Solaris userland utility library for Linux
|
|
Group: System Environment/Kernel
|
|
|
|
%description -n libuutil1
|
|
This library provides a variety of compatibility functions for ZFS on Linux:
|
|
* 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.
|
|
|
|
%post -n libuutil1 -p /sbin/ldconfig
|
|
%postun -n libuutil1 -p /sbin/ldconfig
|
|
|
|
%package -n libzfs2
|
|
Summary: Native ZFS filesystem library for Linux
|
|
Group: System Environment/Kernel
|
|
|
|
%description -n libzfs2
|
|
This package provides support for managing ZFS filesystems
|
|
|
|
%post -n libzfs2 -p /sbin/ldconfig
|
|
%postun -n libzfs2 -p /sbin/ldconfig
|
|
|
|
%package -n libzfs2-devel
|
|
Summary: Development headers
|
|
Group: System Environment/Kernel
|
|
Requires: libzfs2 = %{version}
|
|
Requires: libzpool2 = %{version}
|
|
Requires: libnvpair1 = %{version}
|
|
Requires: libuutil1 = %{version}
|
|
Provides: libzpool2-devel
|
|
Provides: libnvpair1-devel
|
|
Provides: libuutil1-devel
|
|
Obsoletes: zfs-devel
|
|
|
|
%description -n libzfs2-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: rng-tools
|
|
Requires: libaio
|
|
%if 0%{?rhel}%{?fedora}%{?suse_version}
|
|
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
|
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
|
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 0%{?_initramfs}
|
|
%package initramfs
|
|
Summary: Initramfs module
|
|
Group: System Environment/Kernel
|
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
|
Requires: %{name} = %{version}-%{release}
|
|
Requires: initramfs-tools
|
|
|
|
%description initramfs
|
|
This package contains a initramfs module used to construct an initramfs
|
|
image which is ZFS aware.
|
|
%endif
|
|
|
|
%prep
|
|
%if %{with debug}
|
|
%define debug --enable-debug
|
|
%else
|
|
%define debug --disable-debug
|
|
%endif
|
|
%if 0%{?_systemd}
|
|
%define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --disable-sysvinit
|
|
%define systemd_svcs zfs-import-cache.service zfs-import-scan.service zfs-mount.service zfs-share.service zfs-zed.service zfs.target zfs-import.target
|
|
%else
|
|
%define systemd --enable-sysvinit --disable-systemd
|
|
%endif
|
|
|
|
%setup -q
|
|
|
|
%build
|
|
%configure \
|
|
--with-config=user \
|
|
--with-udevdir=%{_udevdir} \
|
|
--with-udevruledir=%{_udevruledir} \
|
|
--with-dracutdir=%{_dracutdir} \
|
|
--disable-static \
|
|
%{debug} \
|
|
%{systemd}
|
|
make %{?_smp_mflags}
|
|
|
|
%install
|
|
%{__rm} -rf $RPM_BUILD_ROOT
|
|
make install DESTDIR=%{?buildroot}
|
|
find %{?buildroot}%{_libdir} -name '*.la' -exec rm -f {} \;
|
|
|
|
%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-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-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
|
|
%{_sbindir}/*
|
|
%{_bindir}/*
|
|
%{_libexecdir}/%{name}
|
|
%{_mandir}/man1/*
|
|
%{_mandir}/man5/*
|
|
%{_mandir}/man8/*
|
|
%{_udevdir}/vdev_id
|
|
%{_udevdir}/zvol_id
|
|
%{_udevdir}/rules.d/*
|
|
%if 0%{?_systemd}
|
|
/usr/lib/modules-load.d/*
|
|
%{_unitdir}/*
|
|
%{_presetdir}/*
|
|
%else
|
|
%config(noreplace) %{_sysconfdir}/init.d/*
|
|
%config(noreplace) %{_initconfdir}/zfs
|
|
%endif
|
|
%config(noreplace) %{_sysconfdir}/%{name}
|
|
%attr(440, root, root) %config(noreplace) %{_sysconfdir}/sudoers.d/*
|
|
|
|
%files -n libzpool2
|
|
%{_libdir}/libzpool.so.*
|
|
|
|
%files -n libnvpair1
|
|
%{_libdir}/libnvpair.so.*
|
|
|
|
%files -n libuutil1
|
|
%{_libdir}/libuutil.so.*
|
|
|
|
%files -n libzfs2
|
|
%{_libdir}/libzfs*.so.*
|
|
|
|
%files -n libzfs2-devel
|
|
%{_datadir}/pkgconfig/libzfs.pc
|
|
%{_datadir}/pkgconfig/libzfs_core.pc
|
|
%{_libdir}/*.so
|
|
%{_includedir}/*
|
|
%doc AUTHORS COPYRIGHT DISCLAIMER
|
|
%doc OPENSOLARIS.LICENSE README.markdown
|
|
|
|
%files test
|
|
%{_datadir}/%{name}
|
|
|
|
%files dracut
|
|
%doc contrib/dracut/README.dracut.markdown
|
|
%{_dracutdir}/modules.d/*
|
|
|
|
%if 0%{?_initramfs}
|
|
%files initramfs
|
|
%doc contrib/initramfs/README.initramfs.markdown
|
|
/usr/share/initramfs-tools/*
|
|
%else
|
|
# Since we're not building the initramfs package,
|
|
# ignore those files.
|
|
%exclude /usr/share/initramfs-tools
|
|
%endif
|
|
|
|
%changelog
|
|
* Thu Nov 08 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.12-1
|
|
- Released 0.7.12-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.12
|
|
* Thu Sep 13 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.11-1
|
|
- Released 0.7.11-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.11
|
|
* Wed Sep 05 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.10-1
|
|
- Released 0.7.10-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.10
|
|
* Tue May 08 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.9-1
|
|
- Released 0.7.9-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.9
|
|
* Mon Apr 09 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.8-1
|
|
- Released 0.7.8-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.8
|
|
* Wed Mar 14 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.7-1
|
|
- Released 0.7.7-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.7
|
|
* Thu Feb 01 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.6-1
|
|
- Released 0.7.6-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.6
|
|
* Mon Dec 18 2017 Tony Hutter <hutter2@llnl.gov> - 0.7.5-1
|
|
- Released 0.7.5-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.5
|
|
* Thu Dec 07 2017 Tony Hutter <hutter2@llnl.gov> - 0.7.4-1
|
|
- Released 0.7.4-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.4
|
|
* Wed Oct 18 2017 Tony Hutter <hutter2@llnl.gov> - 0.7.3-1
|
|
- Released 0.7.3-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.3
|
|
* Fri Sep 22 2017 Tony Hutter <hutter2@llnl.gov> - 0.7.2-1
|
|
- Released 0.7.2-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.2
|
|
* Tue Aug 8 2017 Tony Hutter <hutter2@llnl.gov> - 0.7.1-1
|
|
- Released 0.7.1-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.1
|
|
* Wed Jul 26 2017 Brian Behlendorf <behlendorf1@llnl.gov> - 0.7.0-1
|
|
- Released 0.7.0-1, detailed release notes are available at:
|
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.0
|