sys-fs/zfs: Sync with Gentoo

It's from Gentoo commit 0a4d39c0229404d1ed0f913ac584e5ae4f80d89f.
This commit is contained in:
Flatcar Buildbot 2025-01-13 07:10:44 +00:00 committed by Krzesimir Nowak
parent 8a9f0cb59f
commit 28df29514e
7 changed files with 1557 additions and 2 deletions

View File

@ -1,8 +1,18 @@
DIST zfs-2.1.15.tar.gz 35209038 BLAKE2B 61f9e14c54d43d1c51269917bb3ffde0530166126ea0467103ff1171dffc537315fd21c270d12f73d677e121b8094af39dd0a1fe3f80986bb42dc16d627dff52 SHA512 24096f2a6ecb3cc51f3d2f11cc69ad134d6fc33667007277c50cf798be2b19b6ddfa9be6923ca53d8b09f0bebae14c44d74811ec776e5aaf4ea0e810844c1f3d
DIST zfs-2.1.15.tar.gz.asc 836 BLAKE2B 897c05a8870cd0418493b42fe854ef5b28f9a31513ac262a25631089defa59190808b51bd31e43412b01171bcac0dff0608d417dfdacfeee0b0f067e0627d48f SHA512 a6c5a9d214070a220716075455eb1cb85a53fb20b5fe4319f112cde0653a25f87b66d0f0bcf0ca641e3ac38239759cb9df6ed7f4700056a2732cc8c1ccd9ce05
DIST zfs-2.1.16.tar.gz 35187215 BLAKE2B 8bb90903f3747589fff94a810584de54d7f598b0aa9d0b364cc679779d401a9a76f6914cbfbdd007e2066f02230ed4cac4f3735830ea70eb3bcc449af8229c5d SHA512 68e62015e44eeb997166418bf769afa3e96c037a9282dcfd08a8f01d935fa48076483158f628d70b0aed258427510996d4c4ee7d2644ff561163c76f776635d2
DIST zfs-2.1.16.tar.gz.asc 836 BLAKE2B b46614399ca63d9c88216c55bb2177cc0c28f4da2cb6be3ee361efca994309abff46fdf6ad6b0bad448c44e9e84ee40e2183d1b482e04844317f14744bab5c1f SHA512 d2d94a4e3ffe182e86fa3319cb9661688125f378ffa1e5768ee89033f796a1f52f877c382588fb1f434686e30bc4e65e3f08ceac0dd3dd7f8f751ba6182c3317
DIST zfs-2.2.5.tar.gz 33896824 BLAKE2B ec73c866bf931e4af63a35b3e61e1254d681d21aadba304ea95c147a3911c3d92db686591147036848ceae1683f31f6f81e04a24df6cb11a91a8abaed179567f SHA512 8e288620ce78fb235fa0c9929fc97150987a64091a8a5209209f1e0975d4d6213b8b307e32b3c89d934e83dc8468a1998b797fcdff5bbbbd023f07674877b0c6
DIST zfs-2.2.5.tar.gz.asc 836 BLAKE2B ae6e47ce82ffda8834047e03f361ca096448f98ea811a09c0c68b202996c613e6524501cda49873acc4bca9f60c298635f89e5d7fe8f00ffa05b192fc98e16ef SHA512 0a397471c3f1ee9675eb9fcd589409c5085f8692930275ea15d92042fadaf1d3772666a3cca5adb1730c953464e0ec00f501cc5333a303d322c636020c2a7060
DIST zfs-2.2.6.tar.gz 33900138 BLAKE2B 0bbe36df779aaf19460a75725af9c9b13e64e77a6020974ad18d60d9fd52db2ddd6ea98b3e6c7451195bdfb347b8aab51db9b3f9a7c15c77bff47329bbd07dd2 SHA512 c217a3397b67d7239bc30bc492d58fff96bb29c9cf73e390d1787a4fb787cb297557e594a926453fed11faaab80363d40853af271f8ee18ce9a317dfde4c6745
DIST zfs-2.2.6.tar.gz.asc 836 BLAKE2B db66f3e2e629ab8a344a8e0c2609bcbb98d69d110fc9e064760ee0c5c25cd67421a71764c4b65d7005e8ff66167bf24beb4be2560a47318eabffa888c1539f26 SHA512 d09f343b3acc3a81e96c069072cfb16d0b490ee77562f50e14524faf05560f9e1d1325ec4bc1760c86ed29186d5860d59646d4ea07385ee3b28d879f2374b9b4
DIST zfs-2.2.7.tar.gz 33852602 BLAKE2B 31a066d5d543e3328d1afd065a8da4f9b4c52433d585cdbb41936900fd1453431585c6bc4b6e6d9a497a03e79969bae883e17cf4677099686feb3e32577d2777 SHA512 6493faa8e31d9c042c4e8f748d32cb9243212fdf4e0341c19568b47bcf302e60beb89940b80374610b71e1dca1ca5813f3efaddbf1a2453ceabb38381165b271
DIST zfs-2.2.7.tar.gz.asc 836 BLAKE2B e8fc5e04f5b37a22c741bda46b4573e0cebe85da051c73cf3c5fc267de3c313399b235fc346ca06f4c22d37d2500044a26adb3ea241a65fbcf8760d0ef880039 SHA512 8d22a64c920c2a983429688a340f4ae281decdd30e465591e6b40af9f3016b8f168f4e8ea460600c832a2f46b383ff307986649a645585fb25c34fdfda75ad6e
DIST zfs-2.3.0-rc1.tar.gz 33887119 BLAKE2B dd4e159bef6de216cc51c1dd22620e6edb5b7503d95402022d0b9439471fe432181b1e5df2142e63cdac812a74b62657a96573b3bf48ad78bd6fd885a5f8913e SHA512 fe7de046dd48dbb67545726482a501788a1d5601e6e9a17deeb29047946689d9c8deb95f72b2b47c26a205a3c94fa1f0123437479a06b1376b9dac3dd6faf463
DIST zfs-2.3.0-rc1.tar.gz.asc 195 BLAKE2B f70e6223e94a3f79d6d685b2b06254fba845d79768c82b7a3fedb865b6e6c97499c497def0f4c3e4a2869fed88b0965650ae88d5eb72c0ffaed43c4479d3bf96 SHA512 26b395feaf03e2be20b75ef64e573aa98a0706c46a1eb57503925731bf0cb9bf7fef8a2cdcf163233bccd7da9f5aedc0cae73f0183f39e0f13dcf315b4a5d809
DIST zfs-2.3.0-rc3.tar.gz 33897910 BLAKE2B 518e2c56130a71d4c35f27328184e882815e2ca5b0524e660e174176bee4fdc554e4d1c8264d71f84b6c9641c08088f96a5c35adb5ef6f21b814ccadf093a256 SHA512 1ac53d3a006580f4a32fa33dddd6600d8abac401ed9fc86a2950a8241e0a9dc4a8954a32c44b28b10f22ba7c5cbd8871d9f21c13ccc291c366e9745e83431723
DIST zfs-2.3.0-rc3.tar.gz.asc 195 BLAKE2B 34685869cb8d4f911b3ce0a5098411ce4cb346310564b7ad5fbe9cfc50a3bbe7665c8daa36384b2d5f3ee1dad4b98d6d5bad5a6b8e2f45da35354428853f748d SHA512 1f32119b24c703dd5dbdcce63ddc97cd24f2052522cf1f2f9a4228691d0db7c136262d98b38f2d795a4edfce1d25b423c5bc4f65dbc008bd12f64acc24f3406e
DIST zfs-2.3.0-rc4.tar.gz 33899889 BLAKE2B 97aabe9c020ab496e6fe621ecb34fd33b70b786664aee0ebdc1d9d8b0d8027bb092354451c882bf0a2954967414420b33b081a7302a4805dcf2e04a584b81463 SHA512 77bb0b8f9d8995edfc7ebb298c6b0a0834e89cd58410d8d4bc4e7f04ce04e26d486e9d0ce23dd22e74cff8e9a9e827ca9d3549885045265f8b17638e68f35f0f
DIST zfs-2.3.0-rc4.tar.gz.asc 195 BLAKE2B 8c1b104c7cf88bc0415d13e4b4d7f21ec5d35722b09e977aa240d842cad36f51d1ae84fbb03d51e3408b7c1a427d56658b90e53109d1e3c6921ae772c256f122 SHA512 a0e74bbcc1062c7196e6e67c77175456ae995159b22c788c5f4c3026dfde662cfb396677b3aa46628576504bc38f374a191dec4ccd55c2b41685be408067b9ee
DIST zfs-2.3.0-rc5.tar.gz 33907372 BLAKE2B 271e6f7e554e3b94d26edac2c53b12f1217013884fd74b3906107c34a4a8ffbfcee75295d05f50f4a13ba0f9368d7e2a8c86dae75bb73191d136ac9c3b92c375 SHA512 ea69909f70f2a5d4b2e3b6e5be61d224504f8936045372bb2d63279e2a051e53812b093fafcad09083925201b9ba940e9327f9d68d1754bf914b4cea5aa5090b
DIST zfs-2.3.0-rc5.tar.gz.asc 195 BLAKE2B 9abacfa95552837cac092a9e207cf56e4224dc24c1015c289a49d19f4173bcc1781b6b118bd89b4c4c89060ace5955447aaa96228266bcc77232fdf5c0037e20 SHA512 76c5dc000440b0a90e3bcb0ef0de61153ea80f2d9e1798475a25234be407f061448dbfc7b94813debda696caf323539e08b43651c7eeff507dc395d2c770ffc7

View File

@ -0,0 +1,311 @@
# Copyright 1999-2025 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..12} )
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}/${P%_rc?}"
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="
net-libs/libtirpc:=
sys-apps/util-linux
sys-libs/zlib
virtual/libudev:=
dev-libs/openssl:0=
!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 )
sys-fs/udev-init-scripts
app-alternatives/awk
dist-kernel? ( virtual/dist-kernel:= )
rootfs? (
app-alternatives/cpio
app-misc/pax-utils
)
selinux? ( sec-policy/selinux-zfs )
test-suite? (
app-shells/ksh
sys-apps/kmod[tools]
sys-apps/util-linux
app-alternatives/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=(
# bug #854333
"${FILESDIR}"/2.1.5-r2-dracut-non-root.patch
"${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
# 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
# All the same issue:
# Segfaults w/ GCC 12 and 'zfs send'
# bug #856373
# https://github.com/openzfs/zfs/issues/13620
# https://github.com/openzfs/zfs/issues/13605
append-flags -fno-tree-vectorize
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
}

View File

@ -1,4 +1,4 @@
# Copyright 1999-2024 Gentoo Authors
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@ -25,7 +25,7 @@ else
S="${WORKDIR}/${MY_P}"
if [[ ${PV} != *_rc* ]]; then
KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~sparc"
KEYWORDS="amd64 arm64 ~loong ppc64 ~riscv ~sparc"
fi
fi

View File

@ -0,0 +1,310 @@
# Copyright 1999-2025 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..12} )
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 ~loong 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 unwind"
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*')
)
unwind? ( sys-libs/libunwind:= )
"
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-alternatives/cpio
app-misc/pax-utils
)
selinux? ( sec-policy/selinux-zfs )
test-suite? (
app-shells/ksh
sys-apps/kmod[tools]
sys-apps/util-linux
app-alternatives/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
"${FILESDIR}"/2.2.2-no-USER_NS.patch
"${FILESDIR}"/2.2.3-musl.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)
$(use_with unwind libunwind)
--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
}

View File

@ -0,0 +1,308 @@
# Copyright 1999-2024 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..12} )
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 ~loong ~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/6"
IUSE="custom-cflags debug dist-kernel kernel-builtin minimal nls pam python +rootfs selinux test-suite unwind"
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*')
)
unwind? ( sys-libs/libunwind:= )
"
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-alternatives/cpio
app-misc/pax-utils
)
selinux? ( sec-policy/selinux-zfs )
test-suite? (
app-shells/ksh
sys-apps/kmod[tools]
sys-apps/util-linux
app-alternatives/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)
$(use_with unwind libunwind)
--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
}

View File

@ -0,0 +1,308 @@
# Copyright 1999-2024 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..12} )
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 ~loong ~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/6"
IUSE="custom-cflags debug dist-kernel kernel-builtin minimal nls pam python +rootfs selinux test-suite unwind"
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*')
)
unwind? ( sys-libs/libunwind:= )
"
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-alternatives/cpio
app-misc/pax-utils
)
selinux? ( sec-policy/selinux-zfs )
test-suite? (
app-shells/ksh
sys-apps/kmod[tools]
sys-apps/util-linux
app-alternatives/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)
$(use_with unwind libunwind)
--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
}

View File

@ -0,0 +1,308 @@
# Copyright 1999-2025 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..12} )
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 ~loong ~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/6"
IUSE="custom-cflags debug dist-kernel kernel-builtin minimal nls pam python +rootfs selinux test-suite unwind"
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*')
)
unwind? ( sys-libs/libunwind:= )
"
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-alternatives/cpio
app-misc/pax-utils
)
selinux? ( sec-policy/selinux-zfs )
test-suite? (
app-shells/ksh
sys-apps/kmod[tools]
sys-apps/util-linux
app-alternatives/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)
$(use_with unwind libunwind)
--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
}