diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..4b248df --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,9 @@ +include: + - project: 'QubesOS/qubes-continuous-integration' + file: '/r4.3/gitlab-base.yml' + - project: 'QubesOS/qubes-continuous-integration' + file: '/r4.3/gitlab-host.yml' + - project: 'QubesOS/qubes-continuous-integration' + file: '/r4.2/gitlab-base.yml' + - project: 'QubesOS/qubes-continuous-integration' + file: '/r4.2/gitlab-host.yml' diff --git a/.qubesbuilder b/.qubesbuilder new file mode 100644 index 0000000..14cb8d0 --- /dev/null +++ b/.qubesbuilder @@ -0,0 +1,11 @@ +host: + rpm: + build: + - zfs.spec + +source: + files: + - url: https://github.com/openzfs/zfs/releases/download/zfs-@VERSION@/zfs-@VERSION@.tar.gz + signature: https://github.com/openzfs/zfs/releases/download/zfs-@VERSION@/zfs-@VERSION@.tar.gz.asc + pubkeys: + - zfs-key.asc diff --git a/rel b/rel new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/rel @@ -0,0 +1 @@ +1 diff --git a/version b/version new file mode 100644 index 0000000..276cbf9 --- /dev/null +++ b/version @@ -0,0 +1 @@ +2.3.0 diff --git a/zfs-key.asc b/zfs-key.asc new file mode 100644 index 0000000..8ace171 --- /dev/null +++ b/zfs-key.asc @@ -0,0 +1,96 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: Key #0 +Comment: 4F3B A9AB 6D1F 8D68 3DC2 DFB5 6AD8 60EE D459 8027 + +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 +bXWc +=JBxW +-----END PGP PUBLIC KEY BLOCK----- diff --git a/zfs.spec.in b/zfs.spec.in new file mode 100644 index 0000000..855ce27 --- /dev/null +++ b/zfs.spec.in @@ -0,0 +1,596 @@ +%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 "from distutils.sysconfig import get_python_lib; print(get_python_lib())" 2>/dev/null || %{__python} -Esc "import sysconfig; print(sysconfig.get_path('purelib'))") + +Name: zfs +Version: @VERSION@ +Release: @REL@%{?dist} +Summary: Commands to control the kernel modules and libraries + +Group: System Environment/Kernel +License: CDDL +URL: https://github.com/openzfs/zfs +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Requires: libzpool6%{?_isa} = %{version}-%{release} +Requires: libnvpair3%{?_isa} = %{version}-%{release} +Requires: libuutil3%{?_isa} = %{version}-%{release} +Requires: libzfs6%{?_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 libzpool6 +Summary: Native ZFS pool library for Linux +Group: System Environment/Kernel +Obsoletes: libzpool2 <= %{version} +Obsoletes: libzpool4 <= %{version} +Obsoletes: libzpool5 <= %{version} + +%description -n libzpool6 +This package contains the zpool library, which provides support +for managing zpools + +%if %{defined ldconfig_scriptlets} +%ldconfig_scriptlets -n libzpool6 +%else +%post -n libzpool6 -p /sbin/ldconfig +%postun -n libzpool6 -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 libzfs6 +Summary: Native ZFS filesystem library for Linux +Group: System Environment/Kernel +Obsoletes: libzfs2 <= %{version} +Obsoletes: libzfs4 <= %{version} +Obsoletes: libzfs5 <= %{version} + +%description -n libzfs6 +This package provides support for managing ZFS filesystems + +%if %{defined ldconfig_scriptlets} +%ldconfig_scriptlets -n libzfs6 +%else +%post -n libzfs6 -p /sbin/ldconfig +%postun -n libzfs6 -p /sbin/ldconfig +%endif + +%package -n libzfs6-devel +Summary: Development headers +Group: System Environment/Kernel +Requires: libzfs6%{?_isa} = %{version}-%{release} +Requires: libzpool6%{?_isa} = %{version}-%{release} +Requires: libnvpair3%{?_isa} = %{version}-%{release} +Requires: libuutil3%{?_isa} = %{version}-%{release} +Provides: libzpool6-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 libzfs6-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: libzfs6 = %{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-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 arc_summary -or -name arcstat -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 +%{_sbindir}/zgenhostid +%{_bindir}/zvol_wait +# Optional Python 3 scripts +%{_bindir}/arc_summary +%{_bindir}/arcstat +%{_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 libzpool6 +%{_libdir}/libzpool.so.* + +%files -n libnvpair3 +%{_libdir}/libnvpair.so.* + +%files -n libuutil3 +%{_libdir}/libuutil.so.* + +%files -n libzfs6 +%{_libdir}/libzfs*.so.* + +%files -n libzfs6-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 + +%changelog +@CHANGELOG@