# TODO: # - PLDify init script # - unpackaged initramfs-tools support: # /usr/share/initramfs-tools/conf-hooks.d/zfs # /usr/share/initramfs-tools/hooks/zfs # /usr/share/initramfs-tools/scripts/zfs # # Conditional build: %bcond_without kernel # don't build kernel modules %bcond_without userspace # don't build userspace programs %bcond_without python2 # CPython 2.x module %bcond_without python3 # CPython 3.x module %bcond_with verbose # verbose build (V=1) # # The goal here is to have main, userspace, package built once with # simple release number, and only rebuild kernel packages with kernel # version as part of release number, without the need to bump release # with every kernel change. %if 0%{?_pld_builder:1} && %{with kernel} && %{with userspace} %{error:kernel and userspace cannot be built at the same time on PLD builders} exit 1 %endif %if %{without userspace} # nothing to be placed to debuginfo package %define _enable_debug_packages 0 %endif %define _duplicate_files_terminate_build 0 %define _rc rc3 %define rel 0.%{_rc}.3 %define pname zfs Summary: Native Linux port of the ZFS filesystem Summary(pl.UTF-8): Natywny linuksowy port systemu plików ZFS Name: %{pname}%{?_pld_builder:%{?with_kernel:-kernel}}%{_alt_kernel} Version: 0.8.0 Release: %{rel}%{?_pld_builder:%{?with_kernel:@%{_kernel_ver_str}}} License: CDDL Group: Applications/System #Source0: https://github.com/zfsonlinux/zfs/releases/download/zfs-%{version}/%{pname}-%{version}.tar.gz Source0: https://github.com/zfsonlinux/zfs/archive/zfs-%{version}-%{_rc}/%{pname}-%{version}-%{_rc}.tar.gz # Source0-md5: 430cd26a1d246029017e9250eb00f8f2 Patch0: x32.patch Patch1: am.patch Patch2: kernel-5.0.patch URL: http://zfsonlinux.org/ BuildRequires: autoconf >= 2.50 BuildRequires: automake BuildRequires: libtool BuildRequires: rpmbuild(macros) >= 1.714 %if %{with kernel} %{expand:%buildrequires_kernel kernel%%{_alt_kernel}-module-build >= 3:2.6.20.2} %endif %if %{with userspace} BuildRequires: libblkid-devel BuildRequires: libselinux-devel BuildRequires: libuuid-devel BuildRequires: zlib-devel %if %{with python2} BuildRequires: rpm-pythonprov BuildRequires: python-modules BuildRequires: python-setuptools %endif %if %{with python3} BuildRequires: python3-modules BuildRequires: python3-setuptools %endif %endif Requires: %{pname}-libs = %{version}-%{release} Obsoletes: spl < 0.7.9-2 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) %define dracutlibdir %{_prefix}/lib/dracut %description ZFS is an advanced file system and volume manager which was originally developed for Solaris and is now maintained by the Illumos community. ZFS on Linux, which is also known as ZoL, is currently feature complete. It includes fully functional and stable SPA, DMU, ZVOL, and ZPL layers. %description -l pl.UTF-8 ZFS to zaawansowany system plików i zarządca wolumenów, oryginalnie stworzony dla Solarisa, obecnie utrzymywany przez społeczność Illumos. ZFS dla Linuksa, znany takża jako ZoL (ZFS on Linux), jest obecnie w pełni funkcjonalny. Zawiera w pełni funkcjonalne i stabilne warstwy SPA, DMU, ZVOL i ZPL. %package libs Summary: ZFS on Linux libraries Summary(pl.UTF-8): Biblioteki ZFS-a dla Linuksa License: CDDL Group: Libraries Requires(post,postun): /sbin/ldconfig %description libs ZFS on Linux libraries. %description libs -l pl.UTF-8 Biblioteki ZFS-a dla Linuksa. %package devel Summary: Header files for ZFS libraries Summary(pl.UTF-8): Pliki nagłówkowe bibliotek ZFS-a License: CDDL Group: Development/Libraries Requires: %{pname}-libs = %{version}-%{release} Requires: libselinux-devel Requires: libuuid-devel Requires: zlib-devel %description devel Header files for ZFS libraries. %description devel -l pl.UTF-8 Pliki nagłówkowe bibliotek ZFS-a. %package static Summary: Static ZFS libraries Summary(pl.UTF-8): Statyczne biblioteki ZFS-a License: CDDL Group: Development/Libraries Requires: %{pname}-devel = %{version}-%{release} %description static Static ZFS libraries. %description static -l pl.UTF-8 Statyczne biblioteki ZFS-a. %package -n dracut-zfs Summary: ZFS support for Dracut Summary(pl.UTF-8): Obsługa ZFS-a dla Dracuta Group: Applications/System Requires: %{pname} = %{version}-%{release} Requires: dracut %description -n dracut-zfs ZFS support for Dracut. %description -n dracut-zfs -l pl.UTF-8 Obsługa ZFS-a dla Dracuta. %package -n python-pyzfs Summary: Wrapper for libzfs_core C library License: Apache v2.0 Group: Libraries/Python Requires: %{pname}-libs = %{version}-%{release} %description -n python-pyzfs Wrapper for libzfs_core C library. %package -n python3-pyzfs Summary: Wrapper for libzfs_core C library License: Apache v2.0 Group: Libraries/Python Requires: %{pname}-libs = %{version}-%{release} %description -n python3-pyzfs Wrapper for libzfs_core C library. %package -n kernel-zfs-common-devel Summary: ZFS Linux kernel headers Summary(pl.UTF-8): ZFS - pliki nagłówkowe jądra Linuksa Group: Development/Building Obsoletes: kernel-spl-common-devel < 0.7.9-2 %description -n kernel-zfs-common-devel ZFS Linux kernel headers common for all PLD kernel versions. %description -n kernel-zfs-common-devel -l pl.UTF-8 ZFS - pliki nagłówkowe jądra Linuksa wspólne na wszystkich wersji jąder PLD. %define kernel_pkg()\ %package -n kernel%{_alt_kernel}-zfs\ Summary: ZFS Linux kernel modules\ Summary(pl.UTF-8): ZFS - moduły jądra Linuksa\ Release: %{rel}@%{_kernel_ver_str}\ Group: Base/Kernel\ Requires(post,postun): /sbin/depmod\ %requires_releq_kernel\ Requires(postun): %releq_kernel\ \ %description -n kernel%{_alt_kernel}-zfs\ ZFS Linux kernel modules.\ \ %description -n kernel%{_alt_kernel}-zfs -l pl.UTF-8\ ZFS - moduły jądra Linuksa.\ \ %package -n kernel%{_alt_kernel}-zfs-devel\ Summary: ZFS Linux kernel headers\ Summary(pl.UTF-8): ZFS - pliki nagłówkowe jądra Linuksa\ Release: %{rel}@%{_kernel_ver_str}\ Group: Development/Building\ Requires: kernel%{_alt_kernel}-headers\ Requires: kernel-zfs-common-devel\ Obsoletes: kernel-spl-devel < 0.7.9-2\ \ %description -n kernel%{_alt_kernel}-zfs-devel\ ZFS Linux kernel headers configured for PLD kernel%{_alt_kernel},\ version %{_kernel_ver}.\ \ %description -n kernel%{_alt_kernel}-zfs-devel -l pl.UTF-8\ ZFS - pliki nagłówkowe jądra Linuksa skonfigurowane dla jądra PLD z\ pakietu kernel%{_alt_kernel} w wersji %{_kernel_ver}.\ \ %files -n kernel%{_alt_kernel}-zfs\ %defattr(644,root,root,755)\ %dir /lib/modules/%{_kernel_ver}/misc/lua\ /lib/modules/%{_kernel_ver}/misc/lua/zlua.ko*\ %dir /lib/modules/%{_kernel_ver}/misc/avl\ /lib/modules/%{_kernel_ver}/misc/avl/zavl.ko*\ %dir /lib/modules/%{_kernel_ver}/misc/icp\ /lib/modules/%{_kernel_ver}/misc/icp/icp.ko*\ %dir /lib/modules/%{_kernel_ver}/misc/nvpair\ /lib/modules/%{_kernel_ver}/misc/nvpair/znvpair.ko*\ %dir /lib/modules/%{_kernel_ver}/misc/spl\ /lib/modules/%{_kernel_ver}/misc/spl/spl.ko*\ %dir /lib/modules/%{_kernel_ver}/misc/unicode\ /lib/modules/%{_kernel_ver}/misc/unicode/zunicode.ko*\ %dir /lib/modules/%{_kernel_ver}/misc/zcommon\ /lib/modules/%{_kernel_ver}/misc/zcommon/zcommon.ko*\ %dir /lib/modules/%{_kernel_ver}/misc/zfs\ /lib/modules/%{_kernel_ver}/misc/zfs/zfs.ko*\ \ %files -n kernel%{_alt_kernel}-zfs-devel\ %defattr(644,root,root,755)\ /usr/src/zfs-%{version}/%{_kernel_ver}\ \ %post -n kernel%{_alt_kernel}-zfs\ %depmod %{_kernel_ver}\ \ %postun -n kernel%{_alt_kernel}-zfs\ %depmod %{_kernel_ver}\ %{nil} %define build_kernel_pkg()\ %configure \\\ --disable-silent-rules \\\ --with-config="kernel" \\\ --with-linux=%{_kernelsrcdir}\\\ --with-linux-obj=%{_kernelsrcdir}\ \ %{__make} clean\ %{__make} %{?with_verbose:V=1}\ p=`pwd`\ %{__make} install DESTDIR=$p/installed INSTALL_MOD_DIR=misc\ %{nil} %{?with_kernel:%{expand:%create_kernel_packages}} %prep %setup -q -n %{pname}-zfs-%{version}-%{_rc} %patch0 -p1 %patch1 -p1 %patch2 -p1 %build %{__libtoolize} %{__aclocal} -I config %{__autoconf} %{__autoheader} %{__automake} %{?with_kernel:%{expand:%build_kernel_packages}} %if %{with userspace} %configure \ --disable-silent-rules \ --with-config="user" \ --with-linux=%{_kernelsrcdir} \ --with-systemdunitdir=%{systemdunitdir} \ --with-systemdpresetdir=/etc/systemd/system-preset \ --with-systemdmodulesloaddir=/etc/modules-load.d \ --with-systemdgeneratordir=/lib/systemd/system-generators \ --with-udevdir=/lib/udev %{__make} \ %{?with_verbose:V=1} %if %{with python2} cd contrib/pyzfs %py_build cd ../.. %endif %if %{with python3} cd contrib/pyzfs %py3_build cd ../.. %endif %endif %install rm -rf $RPM_BUILD_ROOT %if %{with kernel} install -d $RPM_BUILD_ROOT cp -a installed/* $RPM_BUILD_ROOT # Drop unneeded spl compat links %{__rm} -r $RPM_BUILD_ROOT/usr/src/spl-%{version} %endif %if %{with userspace} %{__make} install \ DESTDIR=$RPM_BUILD_ROOT \ DEFAULT_INIT_DIR=/etc/rc.d/init.d %if %{with python2} %{__rm} -rf $RPM_BUILD_ROOT%{py_sitescriptdir} cd contrib/pyzfs %py_install %py_ocomp $RPM_BUILD_ROOT%{py_sitescriptdir} %py_comp $RPM_BUILD_ROOT%{py_sitescriptdir} %py_postclean cd ../.. %{__rm} -r $RPM_BUILD_ROOT%{py_sitescriptdir}/libzfs_core/test %endif %if %{with python3} %{__rm} -rf $RPM_BUILD_ROOT{%{py3_sitescriptdir},/usr/local/share/python3*} cd contrib/pyzfs %py3_install cd ../.. %{__rm} -r $RPM_BUILD_ROOT%{py3_sitescriptdir}/libzfs_core/test %endif install -d $RPM_BUILD_ROOT%{_pkgconfigdir} %{__mv} $RPM_BUILD_ROOT%{_npkgconfigdir}/* $RPM_BUILD_ROOT%{_pkgconfigdir} # Debian specific stuff %{__rm} -r $RPM_BUILD_ROOT%{_datadir}/initramfs-tools # Package these? These are integration tests of the implementation. %{__rm} -r $RPM_BUILD_ROOT%{_datadir}/zfs/{zfs-tests,test-runner,runfiles} %{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/{raidz_test,test-runner}.1* %{__rm} $RPM_BUILD_ROOT%{_bindir}/raidz_test %endif %clean rm -rf $RPM_BUILD_ROOT %post libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig %if %{with userspace} %files %defattr(644,root,root,755) %doc AUTHORS COPYRIGHT LICENSE README.md %attr(755,root,root) /sbin/mount.zfs %attr(755,root,root) %{_bindir}/arc_summary %attr(755,root,root) %{_bindir}/arcstat %attr(755,root,root) %{_bindir}/dbufstat %attr(755,root,root) %{_bindir}/zgenhostid %attr(755,root,root) %{_sbindir}/fsck.zfs %attr(755,root,root) %{_sbindir}/zdb %attr(755,root,root) %{_sbindir}/zed %attr(755,root,root) %{_sbindir}/zfs %attr(755,root,root) %{_sbindir}/zhack %attr(755,root,root) %{_sbindir}/zinject %attr(755,root,root) %{_sbindir}/zpool %attr(755,root,root) %{_sbindir}/zstreamdump %attr(755,root,root) %{_sbindir}/ztest %dir %{_sysconfdir}/zfs # package *.example as %doc? (they cannot act as default configuration) %{_sysconfdir}/zfs/vdev_id.conf.*.example %dir %{_sysconfdir}/zfs/zed.d %attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/zfs/zed.d/*.sh %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/zfs/zed.d/zed.rc %dir %{_sysconfdir}/zfs/zpool.d %attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/zfs/zpool.d/* %attr(754,root,root) /etc/rc.d/init.d/zfs-import %attr(754,root,root) /etc/rc.d/init.d/zfs-mount %attr(754,root,root) /etc/rc.d/init.d/zfs-share %attr(754,root,root) /etc/rc.d/init.d/zfs-zed %config(noreplace) %verify(not md5 mtime size) /etc/default/zfs /etc/zfs/zfs-functions %config(noreplace) %verify(not md5 mtime size) /etc/modules-load.d/zfs.conf /etc/systemd/system-preset/50-zfs.preset /lib/systemd/system-generators/zfs-mount-generator %{systemdunitdir}/zfs.target %{systemdunitdir}/zfs-import.target %{systemdunitdir}/zfs-import-cache.service %{systemdunitdir}/zfs-import-scan.service %{systemdunitdir}/zfs-mount.service %{systemdunitdir}/zfs-share.service %{systemdunitdir}/zfs-zed.service %attr(755,root,root) /lib/udev/vdev_id %attr(755,root,root) /lib/udev/zvol_id /lib/udev/rules.d/60-zvol.rules /lib/udev/rules.d/69-vdev.rules /lib/udev/rules.d/90-zfs.rules %dir %{_libexecdir}/zfs %dir %{_libexecdir}/zfs/zed.d %attr(755,root,root) %{_libexecdir}/zfs/zed.d/*.sh %dir %{_libexecdir}/zfs/zpool.d %attr(755,root,root) %{_libexecdir}/zfs/zpool.d/* %dir %{_datadir}/zfs %attr(755,root,root) %{_datadir}/zfs/*.sh %{_mandir}/man1/zhack.1* %{_mandir}/man1/ztest.1* %{_mandir}/man5/spl-module-parameters.5* %{_mandir}/man5/vdev_id.conf.5* %{_mandir}/man5/zfs-events.5* %{_mandir}/man5/zfs-module-parameters.5* %{_mandir}/man5/zpool-features.5* %{_mandir}/man8/fsck.zfs.8* %{_mandir}/man8/mount.zfs.8* %{_mandir}/man8/vdev_id.8* %{_mandir}/man8/zdb.8* %{_mandir}/man8/zed.8* %{_mandir}/man8/zfs.8* %{_mandir}/man8/zfs-mount-generator.8* %{_mandir}/man8/zfs-program.8* %{_mandir}/man8/zgenhostid.8* %{_mandir}/man8/zinject.8* %{_mandir}/man8/zpool.8* %{_mandir}/man8/zstreamdump.8* %files libs %defattr(644,root,root,755) %attr(755,root,root) %{_libdir}/libnvpair.so.*.*.* %attr(755,root,root) %ghost %{_libdir}/libnvpair.so.1 %attr(755,root,root) %{_libdir}/libuutil.so.*.*.* %attr(755,root,root) %ghost %{_libdir}/libuutil.so.1 %attr(755,root,root) %{_libdir}/libzfs.so.*.*.* %attr(755,root,root) %ghost %{_libdir}/libzfs.so.2 %attr(755,root,root) %{_libdir}/libzfs_core.so.*.*.* %attr(755,root,root) %ghost %{_libdir}/libzfs_core.so.1 %attr(755,root,root) %{_libdir}/libzpool.so.*.*.* %attr(755,root,root) %ghost %{_libdir}/libzpool.so.2 %files devel %defattr(644,root,root,755) %attr(755,root,root) %{_libdir}/libnvpair.so %attr(755,root,root) %{_libdir}/libuutil.so %attr(755,root,root) %{_libdir}/libzfs.so %attr(755,root,root) %{_libdir}/libzfs_core.so %attr(755,root,root) %{_libdir}/libzpool.so %{_libdir}/libnvpair.la %{_libdir}/libuutil.la %{_libdir}/libzfs.la %{_libdir}/libzfs_core.la %{_libdir}/libzpool.la %{_includedir}/libspl %{_includedir}/libzfs %{_pkgconfigdir}/libzfs.pc %{_pkgconfigdir}/libzfs_core.pc %files static %defattr(644,root,root,755) %{_libdir}/libnvpair.a %{_libdir}/libuutil.a %{_libdir}/libzfs.a %{_libdir}/libzfs_core.a %{_libdir}/libzpool.a %files -n dracut-zfs %defattr(644,root,root,755) %doc contrib/dracut/README.dracut.markdown %dir %{dracutlibdir}/modules.d/02zfsexpandknowledge %attr(755,root,root) %{dracutlibdir}/modules.d/02zfsexpandknowledge/module-setup.sh %dir %{dracutlibdir}/modules.d/90zfs %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/export-zfs.sh %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/module-setup.sh %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/mount-zfs.sh %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/parse-zfs.sh %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-generator.sh %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-lib.sh %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-load-key.sh %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-needshutdown.sh %if %{with python2} %files -n python-pyzfs %defattr(644,root,root,755) %doc contrib/pyzfs/README %{py_sitescriptdir}/libzfs_core %{py_sitescriptdir}/pyzfs-*-py*.egg-info %endif %if %{with python3} %files -n python3-pyzfs %defattr(644,root,root,755) %doc contrib/pyzfs/README %{py3_sitescriptdir}/libzfs_core %{py3_sitescriptdir}/pyzfs-*-py*.egg-info %endif %endif %if %{with kernel} %files -n kernel-zfs-common-devel %defattr(644,root,root,755) %dir /usr/src/zfs-%{version} /usr/src/zfs-%{version}/include /usr/src/zfs-%{version}/zfs.release /usr/src/zfs-%{version}/zfs_config.h %endif