]> git.proxmox.com Git - mirror_zfs.git/blobdiff - rpm/generic/zfs.spec.in
Exclude test-runner.py from the rpmbuild shebang check
[mirror_zfs.git] / rpm / generic / zfs.spec.in
index 53312652ac4934006beb38c82298f76757e9863a..9faa3ba771a14a0878620bb4d6f997c5a94b6517 100644 (file)
 %global _sbindir    /sbin
 %global _libdir     /%{_lib}
-%if 0%{?fedora} >= 17
+
+# 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
-%global _dracutdir  %{_prefix}/lib/dracut
 %else
 %global _udevdir    /lib/udev
-%global _dracutdir  /lib/dracut
+%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
+
+%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
 
 %bcond_with    debug
-%bcond_with    blkid
-%bcond_with    selinux
+%bcond_with    debuginfo
+%bcond_with    asan
+%bcond_with    systemd
+
+# Exclude test-runner.py from the rpmbuild shebang check to allow it to run
+# under Python 2 and 3.
+%global __brp_mangle_shebangs_exclude_from 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
+
+# When not specified default to distribution provided version.  This
+# is normally Python 3, but for RHEL <= 7 only Python 2 is provided.
+%if %{undefined __use_python}
+%if 0%{?rhel} && 0%{?rhel} <= 7
+%define __python                  /usr/bin/python2
+%define __python_pkg_version      2
+%define __python_cffi_pkg         python-cffi
+%define __python_setuptools_pkg   python-setuptools
+%else
+%define __python                  /usr/bin/python3
+%define __python_pkg_version      3
+%define __python_cffi_pkg         python3-cffi
+%define __python_setuptools_pkg   python3-setuptools
+%endif
+%else
+%define __python                  %{__use_python}
+%define __python_pkg_version      %{__use_python_pkg_version}
+%define __python_cffi_pkg         python%{__python_pkg_version}-cffi
+%define __python_setuptools_pkg   python%{__python_pkg_version}-setuptools
+%endif
+
+# By default python-pyzfs is enabled, with the exception of
+# RHEL 6 which by default uses Python 2.6 which is too old.
+%if 0%{?rhel} == 6
+%bcond_with    pyzfs
+%else
+%bcond_without pyzfs
+%endif
 
 Name:           @PACKAGE@
 Version:        @VERSION@
@@ -23,37 +118,113 @@ License:        @ZFS_META_LICENSE@
 URL:            http://zfsonlinux.org/
 Source0:        %{name}-%{version}.tar.gz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-ExclusiveArch:  i386 i686 x86_64
-
-# May build but untested on ppc/ppc64
-ExcludeArch:    ppc ppc64
-
-Requires:       spl = %{version}
-Requires:       zfs-dracut = %{version}
-Requires:       zfs-test = %{version}
-Requires:       %{name}-kmod >= %{version}
+Requires:       libzpool2 = %{version}
+Requires:       libnvpair1 = %{version}
+Requires:       libuutil1 = %{version}
+Requires:       libzfs2 = %{version}
+Requires:       %{name}-kmod = %{version}
 Provides:       %{name}-kmod-common = %{version}
+Obsoletes:      spl
+
+# 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
-%if %{with blkid}
 BuildRequires:  libblkid-devel
+BuildRequires:  libudev-devel
+BuildRequires:  libattr-devel
+BuildRequires:  openssl-devel
+%if 0%{?fedora} >= 28
+BuildRequires:  libtirpc-devel
+%endif
+Requires:       openssl
+%if 0%{?_systemd}
+BuildRequires: systemd
 %endif
-%if %{with selinux}
-BuildRequires:  libselinux-devel
 %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 and libraries.
+This package contains the core 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 devel
+%package -n libzfs2-devel
 Summary:        Development headers
 Group:          System Environment/Kernel
-Requires:       %{name}%{?_isa} = %{version}-%{release}
+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 devel
+%description -n libzfs2-devel
 This package contains the header files needed for building additional
 applications against the ZFS libraries.
 
@@ -65,6 +236,17 @@ 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}%{?fedora}%{?suse_version}
+BuildRequires:  libaio-devel
+%endif
+AutoReqProv:    no
 
 %description test
 This package contains test infrastructure and support scripts for
@@ -75,26 +257,78 @@ 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 %{with pyzfs}
+%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:       libzfs2 = %{version}
+Requires:       libnvpair1 = %{version}
+Requires:       libffi
+Requires:       python%{__python_pkg_version}
+Requires:       %{__python_cffi_pkg}
+%if 0%{?rhel}%{?fedora}%{?suse_version}
+BuildRequires:  python%{__python_pkg_version}-devel
+BuildRequires:  %{__python_cffi_pkg}
+BuildRequires:  %{__python_setuptools_pkg}
+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:       %{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 %{with blkid}
-    %define blkid --with-blkid
+
+%if %{with debuginfo}
+    %define debuginfo --enable-debuginfo
+%else
+    %define debuginfo --disable-debuginfo
+%endif
+
+%if %{with asan}
+    %define asan --enable-asan
 %else
-    %define blkid --without-blkid
+    %define asan --disable-asan
 %endif
-%if %{with selinux}
-    %define selinux --with-selinux
+
+%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-share.service zfs-zed.service zfs.target zfs-import.target
 %else
-    %define selinux --without-selinux
+    %define systemd --enable-sysvinit --disable-systemd
+%endif
+
+%if %{with pyzfs}
+    %define pyzfs --enable-pyzfs
+%else
+    %define pyzfs --disable-pyzfs
 %endif
 
 %setup -q
@@ -103,11 +337,15 @@ image which is ZFS aware.
 %configure \
     --with-config=user \
     --with-udevdir=%{_udevdir} \
+    --with-udevruledir=%{_udevruledir} \
     --with-dracutdir=%{_dracutdir} \
+    --with-python=%{__python} \
     --disable-static \
     %{debug} \
-    %{blkid} \
-    %{selinux}
+    %{debuginfo} \
+    %{asan} \
+    %{systemd}\
+    %{pyzfs}
 make %{?_smp_mflags}
 
 %install
@@ -115,35 +353,136 @@ make %{?_smp_mflags}
 make install DESTDIR=%{?buildroot}
 find %{?buildroot}%{_libdir} -name '*.la' -exec rm -f {} \;
 
-%post -p /sbin/ldconfig
+%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 -p /sbin/ldconfig
+%postun
+%if 0%{?_systemd}
+%if 0%{?systemd_postun:1}
+%systemd_postun %{systemd_svcs}
+%else
+systemctl --system daemon-reload >/dev/null || true
+%endif
+%endif
 
 %files
-%doc AUTHORS COPYRIGHT DISCLAIMER
-%doc OPENSOLARIS.LICENSE README.markdown
+# Core utilities
 %{_sbindir}/*
-%{_libdir}/*.so.1*
+%{_bindir}/raidz_test
+%{_bindir}/zgenhostid
+# Optional Python 2/3 scripts
+%{_bindir}/arc_summary
+%{_bindir}/arcstat
+%{_bindir}/dbufstat
+# Man pages
 %{_mandir}/man1/*
 %{_mandir}/man5/*
 %{_mandir}/man8/*
+# Configuration files and scripts
+%{_libexecdir}/%{name}
 %{_udevdir}/vdev_id
 %{_udevdir}/zvol_id
 %{_udevdir}/rules.d/*
+%if 0%{?_systemd}
+%{_unitdir}/*
+%{_presetdir}/*
+%{_modulesloaddir}/*
+%{_systemdgeneratordir}/*
+%else
+%config(noreplace) %{_sysconfdir}/init.d/*
+%config(noreplace) %{_initconfdir}/zfs
+%endif
 %config(noreplace) %{_sysconfdir}/%{name}
-%{_sysconfdir}/init.d/*
+%attr(440, root, root) %config(noreplace) %{_sysconfdir}/sudoers.d/*
+
+%files -n libzpool2
+%{_libdir}/libzpool.so.*
+
+%files -n libnvpair1
+%{_libdir}/libnvpair.so.*
 
-%files devel
+%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 LICENSE NOTICE README.md
 
 %files test
 %{_datadir}/%{name}
 
 %files dracut
-%doc dracut/README.dracut.markdown
+%doc contrib/dracut/README.dracut.markdown
 %{_dracutdir}/modules.d/*
 
-%changelog
-* Tue Mar 12 2013 Brian Behlendorf <behlendorf1@llnl.gov> - 0.6.0-1
-- Refreshed RPM packaging.
+%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.initramfs.markdown
+/usr/share/initramfs-tools/*
+%else
+# Since we're not building the initramfs package,
+# ignore those files.
+%exclude /usr/share/initramfs-tools
+%endif