Skip to content

Commit

Permalink
sys-fs/zfs: add 2.2.1
Browse files Browse the repository at this point in the history
Note that it may not fix the issues reported entirely as the race still exists.

Bug: https://bugs.gentoo.org/917224
Signed-off-by: Sam James <[email protected]>
  • Loading branch information
thesamesam committed Nov 22, 2023
1 parent 806b3d9 commit 3d1dfd2
Show file tree
Hide file tree
Showing 2 changed files with 308 additions and 0 deletions.
2 changes: 2 additions & 0 deletions sys-fs/zfs/Manifest
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ DIST zfs-2.1.13.tar.gz 35170063 BLAKE2B 88f4b27a872071590294cf2a93d19633bacfaf12
DIST zfs-2.1.13.tar.gz.asc 836 BLAKE2B 35d3299cfe1d37848f1a0e75a00e08a49a37356ccfc2f47fa1c5c64a1e16adc8030c35047fb45347ec4328d90703ed1623de1c799bef9b6297553aa7b357e8da SHA512 f35c89fd6b1019098b103427b525e32a691c796debde743f9d99953623d8c2bc6deb1ed88865e519d5fa60b259b1d74cce3c829dd1e2eb59aa29abc20046a0db
DIST zfs-2.2.0.tar.gz 33826037 BLAKE2B 80d94cd5ef0bbeaa570853c10f480e3cd64cb852b53aced2e7d382d097130fcf8f94060126a04321f913bca5d9158813a74e97f1dd0f110359d911a33e4a0d77 SHA512 6a45419d2cd30a4f65c50410568972ba9a27f87e745d7a46c0757d7deb4377150f9bd752d54b4bda26badfc40922c34dc5d5bf50f76c84398811784243606829
DIST zfs-2.2.0.tar.gz.asc 195 BLAKE2B c3e665380060b605c5f8ce120f8cc00457053b8adaf44307500a47ff5cd00be04306920820c7a8c1832eb770d5189fd747a52cf13d8bdd8fccbcb171b9b4afad SHA512 b52a11d3e27adf606c24fab46307153c9f81cd8ac504aa8995f7add3e25cd3c00fcb8e2faae3c1a70e29f5901117f961ded7fc26ae5701098a6bcf9710d216f7
DIST zfs-2.2.1.tar.gz 33814243 BLAKE2B c3ff95c892024a11ee5c266b10e3354074606665a201fbab16e1ed12550340e0d991d98bd74f794331b68bd16cd6147a9e8937b8cda72d454abce72a22bafec6 SHA512 05e17046ac4f0ba923151be3e554e075db4783c8936c5dcee2d3b6d459fb386ba33f9eb38d15c185db58a1d26926147a66c3b3fe14e9de40987f0e95efa2bb31
DIST zfs-2.2.1.tar.gz.asc 836 BLAKE2B 9d586d703d557df020f1d02e764f488f354f5c7105e7fa0f3dbf040881b63bdffa3310c9048ed102be05e9c851242b572cd0c6a22361e7e5a1cce50b1644a98d SHA512 78a13f42a71e39d346d43f3e1b271483b4b426ccdcda7f3709db8d89b0bcd54c79b7d17cfe3b49d2e6b8c7c41e30e69faade02e49e4bdddb3e472f2ceeb29cf2
306 changes: 306 additions & 0 deletions sys-fs/zfs/zfs-2.2.1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,306 @@
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

DISTUTILS_OPTIONAL=1
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{10..11} )

inherit autotools bash-completion-r1 dist-kernel-utils distutils-r1 flag-o-matic linux-info pam systemd udev usr-ldscript

DESCRIPTION="Userland utilities for ZFS Linux kernel module"
HOMEPAGE="https://github.com/openzfs/zfs"

if [[ ${PV} == "9999" ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/openzfs/zfs.git"
else
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/openzfs.asc
inherit verify-sig

MY_P="${P/_rc/-rc}"
SRC_URI="https://github.com/openzfs/${PN}/releases/download/${MY_P}/${MY_P}.tar.gz"
SRC_URI+=" verify-sig? ( https://github.com/openzfs/${PN}/releases/download/${MY_P}/${MY_P}.tar.gz.asc )"
S="${WORKDIR}/${MY_P}"

if [[ ${PV} != *_rc* ]]; then
KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~sparc"
fi
fi

LICENSE="BSD-2 CDDL MIT"
# just libzfs soname major for now.
# possible candidates: libuutil, libzpool, libnvpair. Those do not provide stable abi, but are considered.
# see libsoversion_check() below as well
SLOT="0/5"
IUSE="custom-cflags debug dist-kernel kernel-builtin minimal nls pam python +rootfs selinux test-suite"

DEPEND="
dev-libs/openssl:=
net-libs/libtirpc:=
sys-apps/util-linux
sys-libs/zlib
virtual/libudev:=
!minimal? ( ${PYTHON_DEPS} )
pam? ( sys-libs/pam )
python? (
$(python_gen_cond_dep 'dev-python/cffi[${PYTHON_USEDEP}]' 'python*')
)
"

BDEPEND="
app-alternatives/awk
virtual/pkgconfig
nls? ( sys-devel/gettext )
python? (
${DISTUTILS_DEPS}
|| (
dev-python/packaging[${PYTHON_USEDEP}]
dev-python/distlib[${PYTHON_USEDEP}]
)
)
"

if [[ ${PV} != "9999" ]] ; then
BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )"
fi

# awk is used for some scripts, completions, and the Dracut module
RDEPEND="
${DEPEND}
!kernel-builtin? ( ~sys-fs/zfs-kmod-${PV}:= )
!prefix? ( virtual/udev )
app-alternatives/awk
sys-fs/udev-init-scripts
dist-kernel? ( virtual/dist-kernel:= )
rootfs? (
app-arch/cpio
app-misc/pax-utils
)
selinux? ( sec-policy/selinux-zfs )
test-suite? (
app-shells/ksh
sys-apps/kmod[tools]
sys-apps/util-linux
sys-devel/bc
sys-block/parted
sys-fs/lsscsi
sys-fs/mdadm
sys-process/procps
)
"

# PDEPEND in this form is needed to trick portage suggest
# enabling dist-kernel if only 1 package have it set, without suggesting to disable
PDEPEND="dist-kernel? ( ~sys-fs/zfs-kmod-${PV}[dist-kernel] )"

REQUIRED_USE="
!minimal? ( ${PYTHON_REQUIRED_USE} )
python? ( !minimal )
test-suite? ( !minimal )
"

RESTRICT="test"

PATCHES=(
"${FILESDIR}"/2.1.5-dracut-zfs-missing.patch
)

pkg_pretend() {
use rootfs || return 0

if has_version virtual/dist-kernel && ! use dist-kernel; then
ewarn "You have virtual/dist-kernel installed, but"
ewarn "USE=\"dist-kernel\" is not enabled for ${CATEGORY}/${PN}"
ewarn "It's recommended to globally enable dist-kernel USE flag"
ewarn "to auto-trigger initrd rebuilds with kernel updates"
fi
}

pkg_setup() {
if use kernel_linux; then
linux-info_pkg_setup

if ! linux_config_exists; then
ewarn "Cannot check the linux kernel configuration."
else
if use test-suite; then
if linux_chkconfig_present BLK_DEV_LOOP; then
eerror "The ZFS test suite requires loop device support enabled."
eerror "Please enable it:"
eerror " CONFIG_BLK_DEV_LOOP=y"
eerror "in /usr/src/linux/.config or"
eerror " Device Drivers --->"
eerror " Block devices --->"
eerror " [X] Loopback device support"
fi
fi
fi
fi
}

libsoversion_check() {
local bugurl libzfs_sover
bugurl="https://bugs.gentoo.org/enter_bug.cgi?form_name=enter_bug&product=Gentoo+Linux&component=Current+packages"

libzfs_sover="$(grep 'libzfs_la_LDFLAGS += -version-info' lib/libzfs/Makefile.am \
| grep -Eo '[0-9]+:[0-9]+:[0-9]+')"
libzfs_sover="${libzfs_sover%%:*}"

if [[ ${libzfs_sover} -ne $(ver_cut 2 ${SLOT}) ]]; then
echo
eerror "BUG BUG BUG BUG BUG BUG BUG BUG"
eerror "ebuild subslot does not match libzfs soversion!"
eerror "libzfs soversion: ${libzfs_sover}"
eerror "ebuild value: $(ver_cut 2 ${SLOT})"
eerror "This is a bug in the ebuild, please use the following URL to report it"
eerror "${bugurl}&short_desc=${CATEGORY}%2F${P}+update+subslot"
echo
# we want to abort for releases, but just print a warning for live ebuild
# to keep package installable
[[ ${PV} == "9999" ]] || die
fi
}

src_prepare() {
default
libsoversion_check

# Run unconditionally (bug #792627)
eautoreconf

if [[ ${PV} != "9999" ]]; then
# Set revision number
sed -i "s/\(Release:\)\(.*\)1/\1\2${PR}-gentoo/" META || die "Could not set Gentoo release"
fi

if use python; then
pushd contrib/pyzfs >/dev/null || die
distutils-r1_src_prepare
popd >/dev/null || die
fi

# Tries to use /etc/conf.d which we reserve for OpenRC
sed -i -e '/EnvironmentFile/d' etc/systemd/system/zfs*.in || die

# prevent errors showing up on zfs-mount stop, #647688
# openrc will unmount all filesystems anyway.
sed -i "/^ZFS_UNMOUNT=/ s/yes/no/" "etc/default/zfs.in" || die
}

src_configure() {
use custom-cflags || strip-flags
use minimal || python_setup

local myconf=(
--bindir="${EPREFIX}/bin"
--enable-shared
--enable-sysvinit
--localstatedir="${EPREFIX}/var"
--sbindir="${EPREFIX}/sbin"
--with-config=user
--with-dracutdir="${EPREFIX}/usr/lib/dracut"
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
--with-udevdir="$(get_udevdir)"
--with-pamconfigsdir="${EPREFIX}/unwanted_files"
--with-pammoduledir="$(getpam_mod_dir)"
--with-systemdunitdir="$(systemd_get_systemunitdir)"
--with-systemdpresetdir="$(systemd_get_systempresetdir)"
--with-vendor=gentoo
# Building zfs-mount-generator.c on musl breaks as strndupa
# isn't available. But systemd doesn't support musl anyway, so
# just disable building it.
# UPDATE: it has been fixed since,
# https://github.com/openzfs/zfs/commit/1f19826c9ac85835cbde61a7439d9d1fefe43a4a
# but we still leave it as this for now.
$(use_enable !elibc_musl systemd)
$(use_enable debug)
$(use_enable nls)
$(use_enable pam)
$(use_enable python pyzfs)
--disable-static
$(usex minimal --without-python --with-python="${EPYTHON}")
)

econf "${myconf[@]}"
}

src_compile() {
default
if use python; then
pushd contrib/pyzfs >/dev/null || die
distutils-r1_src_compile
popd >/dev/null || die
fi
}

src_install() {
default

gen_usr_ldscript -a nvpair uutil zfsbootenv zfs zfs_core zpool

use pam && { rm -rv "${ED}/unwanted_files" || die ; }

use test-suite || { rm -r "${ED}"/usr/share/zfs/{test-runner,zfs-tests,runfiles,*sh} || die ; }

find "${ED}" -name '*.la' -delete || die

dobashcomp contrib/bash_completion.d/zfs
bashcomp_alias zfs zpool

# strip executable bit from conf.d file
fperms 0644 /etc/conf.d/zfs

if use python; then
pushd contrib/pyzfs >/dev/null || die
distutils-r1_src_install
popd >/dev/null || die
fi

# enforce best available python implementation
use minimal || python_fix_shebang "${ED}/bin"
}

pkg_postinst() {
udev_reload

# we always need userspace utils in sync with zfs-kmod
# so force initrd update for userspace as well, to avoid
# situation when zfs-kmod trigger initrd rebuild before
# userspace component is rebuilt
# KV_* variables are provided by linux-info.eclass
if [[ -z ${ROOT} ]] && use dist-kernel; then
dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
fi

if use rootfs; then
if ! has_version sys-kernel/genkernel && ! has_version sys-kernel/dracut; then
elog "Root on zfs requires an initramfs to boot"
elog "The following packages provide one and are tested on a regular basis:"
elog " sys-kernel/dracut ( preferred, module maintained by zfs developers )"
elog " sys-kernel/genkernel"
fi
fi

if systemd_is_booted || has_version sys-apps/systemd; then
einfo "Please refer to ${EROOT}/$(systemd_get_systempresetdir)/50-zfs.preset"
einfo "for default zfs systemd service configuration"
else
[[ -e "${EROOT}/etc/runlevels/boot/zfs-import" ]] || \
einfo "You should add zfs-import to the boot runlevel."
[[ -e "${EROOT}/etc/runlevels/boot/zfs-load-key" ]] || \
einfo "You should add zfs-load-key to the boot runlevel."
[[ -e "${EROOT}/etc/runlevels/boot/zfs-mount" ]]|| \
einfo "You should add zfs-mount to the boot runlevel."
[[ -e "${EROOT}/etc/runlevels/default/zfs-share" ]] || \
einfo "You should add zfs-share to the default runlevel."
[[ -e "${EROOT}/etc/runlevels/default/zfs-zed" ]] || \
einfo "You should add zfs-zed to the default runlevel."
fi
}

pkg_postrm() {
udev_reload
}

0 comments on commit 3d1dfd2

Please sign in to comment.