From fa418896ebef9e1dde793b5ebb41817781320b09 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Wed, 6 Mar 2024 13:04:41 +0000 Subject: [PATCH 01/19] build_sysext: Use parallel jobs Signed-off-by: Jeremi Piotrowski --- build_sysext | 1 + 1 file changed, 1 insertion(+) diff --git a/build_sysext b/build_sysext index 32712877658..948f69ac452 100755 --- a/build_sysext +++ b/build_sysext @@ -217,6 +217,7 @@ for package; do --usepkgonly \ --getbinpkg \ --verbose \ + --jobs=${NUM_JOBS} \ "${package}" done From 54c8545eecd2e00d87072bb52c07a2daffb967f2 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Mon, 11 Mar 2024 09:47:13 +0000 Subject: [PATCH 02/19] build_sysext: Set SOURCE_DATE_EPOCH for reproducibility Signed-off-by: Jeremi Piotrowski --- build_sysext | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build_sysext b/build_sysext index 948f69ac452..6d6ce06651e 100755 --- a/build_sysext +++ b/build_sysext @@ -221,6 +221,9 @@ for package; do "${package}" done +# Make squashfs generation more reproducible. +export SOURCE_DATE_EPOCH=$(stat -c '%Y' "${BUILD_DIR}/fs-root/usr/lib/os-release") + # Unmount in order to get rid of the overlay umount "${BUILD_DIR}/install-root" umount "${BUILD_DIR}/fs-root" From 5d5dd591022c99a2881c1df4cdbe36bac728eb32 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Wed, 6 Mar 2024 13:05:17 +0000 Subject: [PATCH 03/19] build_image: Build sysext store after image when requested This function is meant to prebuild certain sysexts to be released along with each release. These will not be built into the image, but instead can be fetched by the user on demand. The command to build sysexts would be: ./build_image prod sysext Signed-off-by: Jeremi Piotrowski --- build_image | 5 ++++ build_library/prod_image_util.sh | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/build_image b/build_image index 697c109cee1..16f5d706223 100755 --- a/build_image +++ b/build_image @@ -108,11 +108,13 @@ fi PROD_IMAGE=0 PROD_TAR=0 CONTAINER=0 +SYSEXT=0 for arg in "$@"; do case "${arg}" in prod) PROD_IMAGE=1 ;; prodtar) PROD_IMAGE=1 PROD_TAR=1 ;; container) CONTAINER=1 ;; + sysext) SYSEXT=1 ;; *) die_notrace "Unknown image type ${arg}" ;; esac done @@ -177,6 +179,9 @@ if [[ "${PROD_IMAGE}" -eq 1 ]]; then create_prod_tar ${FLATCAR_PRODUCTION_IMAGE_NAME} fi fi +if [[ "${SYSEXT}" -eq 1 ]]; then + create_prod_sysexts "${FLATCAR_PRODUCTION_IMAGE_NAME}" +fi if [[ ${FLAGS_generate_update} -eq ${FLAGS_TRUE} ]] || \ [[ ${FLAGS_extract_update} -eq ${FLAGS_TRUE} ]] diff --git a/build_library/prod_image_util.sh b/build_library/prod_image_util.sh index 1f8029dc8c1..02c0571d09e 100755 --- a/build_library/prod_image_util.sh +++ b/build_library/prod_image_util.sh @@ -247,3 +247,42 @@ create_prod_tar() { sudo losetup --detach "${lodev}" upload_image "${container}" } + +EXTRA_SYSEXTS=( + zfs:sys-fs/zfs +) + +create_prod_sysexts() { + local image_name="$1" + local image_sysext_base="${image_name%.bin}_sysext.squashfs" + sudo rm -rf "${BUILD_DIR}/sysexts/*" + mkdir -p "${BUILD_DIR}/sysexts" + local to_upload=() + for sysext in "${EXTRA_SYSEXTS[@]}"; do + local name="flatcar-${sysext%:*}" + local pkg="${sysext#*:}" + local mangle_script="${BUILD_LIBRARY_DIR}/sysext_mangle_${name}" + if [[ ! -x "${mangle_script}" ]]; then + mangle_script= + fi + sudo "${SCRIPT_ROOT}/build_sysext" --board="${BOARD}" \ + --squashfs_base="${BUILD_DIR}/${image_sysext_base}" \ + --image_builddir="${BUILD_DIR}/sysexts" \ + ${mangle_script:+--manglefs_script=${mangle_script}} \ + "${name}" "${pkg}" + delta_generator \ + -private_key "/usr/share/update_engine/update-payload-key.key.pem" \ + -new_image "${BUILD_DIR}/sysexts/${name}.raw" \ + -out_file "${BUILD_DIR}/sysexts/flatcar_test_update-${name}.gz" + to_upload+=( + "${BUILD_DIR}/sysexts/${name}.raw" + "${BUILD_DIR}/sysexts/${name}_contents.txt" + "${BUILD_DIR}/sysexts/${name}_contents_wtd.txt" + "${BUILD_DIR}/sysexts/${name}_disk_usage.txt" + "${BUILD_DIR}/sysexts/${name}_packages.txt" + "${BUILD_DIR}/sysexts/flatcar_test_update-${name}.gz" + ) + done + upload_image -d ${BUILD_DIR}/sysexts/sysext.DIGESTS "${to_upload[@]}" +} + From 1bb108e3268a06c0f3d9627715af4d0300cce905 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Wed, 6 Mar 2024 13:07:35 +0000 Subject: [PATCH 04/19] build_image: Allow building sysexts for an existing image by skipping the check for an existing image directory if we're not building an image. This makes './build_image sysext' work. Signed-off-by: Jeremi Piotrowski --- build_image | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_image b/build_image index 16f5d706223..1e8f2cd0241 100755 --- a/build_image +++ b/build_image @@ -126,7 +126,7 @@ if [[ ${skip_test_build_root} -ne 1 ]]; then fi # Handle existing directory. -if [[ -e "${BUILD_DIR}" ]]; then +if [[ -e "${BUILD_DIR}" ]] && [[ "${PROD_IMAGE}" = 1 ]]; then if [[ ${FLAGS_replace} -eq ${FLAGS_TRUE} ]]; then sudo rm -rf "${BUILD_DIR}" else From 601adeb43408641b01c9af5bbcabf145d7b4e0fc Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Fri, 8 Mar 2024 15:40:15 +0000 Subject: [PATCH 05/19] update_ebuilds: Fix support for rsync of eclass For eclasses we need to skip the mkdir and trailing slash. Signed-off-by: Jeremi Piotrowski --- update_ebuilds | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/update_ebuilds b/update_ebuilds index 96aafba647e..07eab2f9c44 100755 --- a/update_ebuilds +++ b/update_ebuilds @@ -57,8 +57,13 @@ for pkg in "$@"; do if [[ "$FLAGS_portage" == rsync ]]; then FLAGS_portage="${FLAGS_rsync}" fi - mkdir -p "$pkg" - rsync $RSYNC_OPTS -v --exclude CVS "$FLAGS_portage/$pkg/" "$pkg" + if [[ "$pkg" =~ "eclass/"* ]]; then + slash= + else + slash="/" + mkdir -p "$pkg" + fi + rsync $RSYNC_OPTS -v --exclude CVS "$FLAGS_portage/$pkg${slash}" "$pkg" fi # Make sure we don't change the repo name to 'gentoo' From a134b02a48d600731fd02e58156f16e662ae1b0e Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Fri, 8 Mar 2024 15:54:18 +0000 Subject: [PATCH 06/19] coreos-kernel.eclass: Adapt install_build_source for compatibility build/source, which is accidentally an empty directory, needs to be a symlink so that Gentoo kmod ebuilds can build when setting KERNEL_DIR=/lib/modules/.../build. They detect the proper layout with the symlink. The other issue is building the Nvidia driver with SYSSRC=/lib/modules/.../build. This works on Ubuntu but fails on Flatcar. Ubuntus build directory contains symlinks to includes from the source tree so recreate the same layout. Signed-off-by: Jeremi Piotrowski --- .../coreos-overlay/eclass/coreos-kernel.eclass | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass b/sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass index 6eb7362dd88..21fa398eb37 100644 --- a/sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass +++ b/sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass @@ -243,6 +243,22 @@ install_build_source() { --owner=root:root \ --dereference \ "${D}/usr/lib/modules/${KV_FULL}" || die + # ./build/source is a symbolic link so cpio ends up creating an empty dir. + # Restore the symlink. + pushd "${D}/usr/lib/modules/${KV_FULL}" + rmdir build/source || die + ln -sr source build || die + # Symlink includes into the build directory to resemble Ubuntu's /lib/modules + # layout. This lets the Nvidia driver build when passing SYSSRC=/lib/modules/../build + # instead of requiring SYSOUT/SYSSRC. + { + find source/include -mindepth 1 -maxdepth 1 -type d + find source/arch/${kernel_arch}/include -mindepth 1 -maxdepth 1 -type d + } | while read src; do + dst="${src/source/build}" + ln -sr "${src}" "${dst}" || die + done || die + popd } coreos-kernel_pkg_pretend() { From 1b4ca8ac277076959330080e6de79df82059e865 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Fri, 8 Mar 2024 16:01:43 +0000 Subject: [PATCH 07/19] coreos-base/coreos: Switch to app-alternatives/awk We explicitly install gawk but our profile explicitly forces the gawk useflag for app-alternatives/awk. Some packages, like zfs, depend on app-alternatives/awk and it also installs the awk -> gawk that the gawk ebuild creates through pkg_postinst. So switch to app-alternatives/awk to make the implementation cleaner. Signed-off-by: Jeremi Piotrowski --- .../coreos-overlay/coreos-base/coreos/coreos-0.0.1.ebuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/coreos/coreos-0.0.1.ebuild b/sdk_container/src/third_party/coreos-overlay/coreos-base/coreos/coreos-0.0.1.ebuild index e8e896f7d64..8f727b93d9d 100644 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/coreos/coreos-0.0.1.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/coreos/coreos-0.0.1.ebuild @@ -88,6 +88,7 @@ RDEPEND="${RDEPEND} app-admin/sdnotify-proxy app-admin/sudo app-admin/toolbox + app-alternatives/awk app-arch/gzip app-arch/bzip2 app-arch/lbzip2 @@ -157,7 +158,6 @@ RDEPEND="${RDEPEND} sys-apps/diffutils sys-apps/ethtool sys-apps/findutils - sys-apps/gawk sys-apps/gptfdisk sys-apps/grep sys-apps/ignition From a4da5718748ba2adde28987ba275745b46d4b497 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Fri, 8 Mar 2024 16:07:33 +0000 Subject: [PATCH 08/19] profiles/coreos: Add zfs useflags and a package.provided entry for a dependency that we don't need. Signed-off-by: Jeremi Piotrowski --- .../coreos-overlay/profiles/coreos/base/package.provided | 3 +++ .../coreos-overlay/profiles/coreos/base/package.use | 2 ++ 2 files changed, 5 insertions(+) diff --git a/sdk_container/src/third_party/coreos-overlay/profiles/coreos/base/package.provided b/sdk_container/src/third_party/coreos-overlay/profiles/coreos/base/package.provided index 66239364b52..989c7ac6c94 100644 --- a/sdk_container/src/third_party/coreos-overlay/profiles/coreos/base/package.provided +++ b/sdk_container/src/third_party/coreos-overlay/profiles/coreos/base/package.provided @@ -3,3 +3,6 @@ virtual/mta-1 # pulled in by dev-libs/cyrus-sasl net-mail/mailbase-1.1 + +# Only installs openrc files +sys-fs/udev-init-scripts-35 diff --git a/sdk_container/src/third_party/coreos-overlay/profiles/coreos/base/package.use b/sdk_container/src/third_party/coreos-overlay/profiles/coreos/base/package.use index dfd11a96938..7bd21531e01 100644 --- a/sdk_container/src/third_party/coreos-overlay/profiles/coreos/base/package.use +++ b/sdk_container/src/third_party/coreos-overlay/profiles/coreos/base/package.use @@ -156,3 +156,5 @@ app-containers/docker-cli hardened # The vanilla USE flag must be enabled if python is disabled. sys-apps/policycoreutils vanilla -python sys-libs/libsemanage -python + +sys-fs/zfs minimal -rootfs From 8e1b1517f9605d836f6dcf3d1279f40e0274bb0c Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Fri, 8 Mar 2024 16:08:47 +0000 Subject: [PATCH 09/19] portage-stable: Add zfs & zfs-kmod ebuilds From Gentoo commit df182f2891606e757be3e8406a69f4a0e53ee324. Also import dist-kernel-utils.eclass. Signed-off-by: Jeremi Piotrowski --- .../eclass/dist-kernel-utils.eclass | 173 ++++++++++ .../portage-stable/sys-fs/zfs-kmod/Manifest | 18 + .../files/zfs-kmod-2.1.11-gentoo.patch | 24 ++ .../files/zfs-kmod-2.2.2-arm64-neon.patch | 100 ++++++ .../files/zfs-kmod-2.2.2-autotrim.patch | 31 ++ .../sys-fs/zfs-kmod/metadata.xml | 17 + .../sys-fs/zfs-kmod/zfs-kmod-2.1.14.ebuild | 177 ++++++++++ .../sys-fs/zfs-kmod/zfs-kmod-2.1.15.ebuild | 177 ++++++++++ .../sys-fs/zfs-kmod/zfs-kmod-2.2.2-r1.ebuild | 219 ++++++++++++ .../sys-fs/zfs-kmod/zfs-kmod-2.2.2.ebuild | 218 ++++++++++++ .../sys-fs/zfs-kmod/zfs-kmod-2.2.3.ebuild | 217 ++++++++++++ .../sys-fs/zfs-kmod/zfs-kmod-9999.ebuild | 217 ++++++++++++ .../portage-stable/sys-fs/zfs/Manifest | 18 + .../zfs/files/2.1.5-dracut-zfs-missing.patch | 14 + .../zfs/files/2.1.5-r2-dracut-non-root.patch | 60 ++++ .../sys-fs/zfs/files/2.2.2-no-USER_NS.patch | 39 +++ .../sys-fs/zfs/files/2.2.3-musl.patch | 63 ++++ .../portage-stable/sys-fs/zfs/metadata.xml | 38 +++ .../sys-fs/zfs/zfs-2.1.14.ebuild | 311 ++++++++++++++++++ .../sys-fs/zfs/zfs-2.1.15.ebuild | 311 ++++++++++++++++++ .../sys-fs/zfs/zfs-2.2.2-r1.ebuild | 307 +++++++++++++++++ .../sys-fs/zfs/zfs-2.2.3.ebuild | 308 +++++++++++++++++ .../portage-stable/sys-fs/zfs/zfs-9999.ebuild | 306 +++++++++++++++++ 23 files changed, 3363 insertions(+) create mode 100644 sdk_container/src/third_party/portage-stable/eclass/dist-kernel-utils.eclass create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/Manifest create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.1.11-gentoo.patch create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.2.2-arm64-neon.patch create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.2.2-autotrim.patch create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/metadata.xml create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-2.1.14.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-2.1.15.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-2.2.2-r1.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-2.2.2.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-2.2.3.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-9999.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/Manifest create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.1.5-dracut-zfs-missing.patch create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.1.5-r2-dracut-non-root.patch create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.2.2-no-USER_NS.patch create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.2.3-musl.patch create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/metadata.xml create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.1.14.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.1.15.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.2.2-r1.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.2.3.ebuild create mode 100644 sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-9999.ebuild diff --git a/sdk_container/src/third_party/portage-stable/eclass/dist-kernel-utils.eclass b/sdk_container/src/third_party/portage-stable/eclass/dist-kernel-utils.eclass new file mode 100644 index 00000000000..13137f8c863 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/eclass/dist-kernel-utils.eclass @@ -0,0 +1,173 @@ +# Copyright 2020-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: dist-kernel-utils.eclass +# @MAINTAINER: +# Distribution Kernel Project +# @AUTHOR: +# Michał Górny +# @SUPPORTED_EAPIS: 7 8 +# @BLURB: Utility functions related to Distribution Kernels +# @DESCRIPTION: +# This eclass provides various utility functions related to Distribution +# Kernels. + +# @ECLASS_VARIABLE: KERNEL_EFI_ZBOOT +# @DEFAULT_UNSET +# @DESCRIPTION: +# If set to a non-null value, it is assumed the kernel was built with +# CONFIG_EFI_ZBOOT enabled. This effects the name of the kernel image on +# arm64 and riscv. Mainly useful for sys-kernel/gentoo-kernel-bin. + +if [[ ! ${_DIST_KERNEL_UTILS} ]]; then + +case ${EAPI} in + 7|8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; +esac + +inherit toolchain-funcs + +# @FUNCTION: dist-kernel_get_image_path +# @DESCRIPTION: +# Get relative kernel image path specific to the current ${ARCH}. +dist-kernel_get_image_path() { + case ${ARCH} in + amd64|x86) + echo arch/x86/boot/bzImage + ;; + arm64|riscv) + if [[ ${KERNEL_EFI_ZBOOT} ]]; then + echo arch/${ARCH}/boot/vmlinuz.efi + else + echo arch/${ARCH}/boot/Image.gz + fi + ;; + loong) + if [[ ${KERNEL_EFI_ZBOOT} ]]; then + echo arch/loongarch/boot/vmlinuz.efi + else + echo arch/loongarch/boot/vmlinux.elf + fi + ;; + arm) + echo arch/arm/boot/zImage + ;; + hppa|ppc|ppc64|sparc) + # https://www.kernel.org/doc/html/latest/powerpc/bootwrapper.html + # ./ is required because of ${image_path%/*} + # substitutions in the code + echo ./vmlinux + ;; + *) + die "${FUNCNAME}: unsupported ARCH=${ARCH}" + ;; + esac +} + +# @FUNCTION: dist-kernel_install_kernel +# @USAGE: +# @DESCRIPTION: +# Install kernel using installkernel tool. specifies +# the kernel version, full path to the image, +# full path to System.map. +dist-kernel_install_kernel() { + debug-print-function ${FUNCNAME} "${@}" + + [[ ${#} -eq 3 ]] || die "${FUNCNAME}: invalid arguments" + local version=${1} + local image=${2} + local map=${3} + + ebegin "Installing the kernel via installkernel" + # note: .config is taken relatively to System.map; + # initrd relatively to bzImage + ARCH=$(tc-arch-kernel) installkernel "${version}" "${image}" "${map}" + eend ${?} || die -n "Installing the kernel failed" +} + +# @FUNCTION: dist-kernel_reinstall_initramfs +# @USAGE: +# @DESCRIPTION: +# Rebuild and install initramfs for the specified dist-kernel. +# is the kernel source directory (${KV_DIR} from linux-info), +# while is the full kernel version (${KV_FULL}). +# The function will determine whether is actually +# a dist-kernel, and whether initramfs was used. +# +# This function is to be used in pkg_postinst() of ebuilds installing +# kernel modules that are included in the initramfs. +dist-kernel_reinstall_initramfs() { + debug-print-function ${FUNCNAME} "${@}" + + [[ ${#} -eq 2 ]] || die "${FUNCNAME}: invalid arguments" + local kernel_dir=${1} + local ver=${2} + + local image_path=${kernel_dir}/$(dist-kernel_get_image_path) + if [[ ! -f ${image_path} ]]; then + eerror "Kernel install missing, image not found:" + eerror " ${image_path}" + eerror "Initramfs will not be updated. Please reinstall your kernel." + return + fi + + dist-kernel_install_kernel "${ver}" "${image_path}" \ + "${kernel_dir}/System.map" +} + +# @FUNCTION: dist-kernel_PV_to_KV +# @USAGE: +# @DESCRIPTION: +# Convert a Gentoo-style ebuild version to kernel "x.y.z[-rcN]" version. +dist-kernel_PV_to_KV() { + debug-print-function ${FUNCNAME} "${@}" + + [[ ${#} -ne 1 ]] && die "${FUNCNAME}: invalid arguments" + local pv=${1} + + local kv=${pv%%_*} + [[ -z $(ver_cut 3- "${kv}") ]] && kv+=".0" + [[ ${pv} == *_* ]] && kv+=-${pv#*_} + echo "${kv}" +} + +# @FUNCTION: dist-kernel_compressed_module_cleanup +# @USAGE: +# @DESCRIPTION: +# Traverse path for duplicate (un)compressed modules and remove all +# but the newest variant. +dist-kernel_compressed_module_cleanup() { + debug-print-function ${FUNCNAME} "${@}" + + [[ ${#} -ne 1 ]] && die "${FUNCNAME}: invalid arguments" + local path=${1} + local basename f + + while read -r basename; do + local prev= + for f in "${path}/${basename}"{,.gz,.xz,.zst}; do + if [[ ! -e ${f} ]]; then + continue + elif [[ -z ${prev} ]]; then + prev=${f} + elif [[ ${f} -nt ${prev} ]]; then + rm -v "${prev}" || die + prev=${f} + else + rm -v "${f}" || die + fi + done + done < <( + cd "${path}" && + find -type f \ + \( -name '*.ko' \ + -o -name '*.ko.gz' \ + -o -name '*.ko.xz' \ + -o -name '*.ko.zst' \ + \) | sed -e 's:[.]\(gz\|xz\|zst\)$::' | sort | uniq -d || die + ) +} + +_DIST_KERNEL_UTILS=1 +fi diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/Manifest b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/Manifest new file mode 100644 index 00000000000..b78f16bc13c --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/Manifest @@ -0,0 +1,18 @@ +AUX zfs-kmod-2.1.11-gentoo.patch 1076 BLAKE2B d2b0fe2ff1ac31c2a2a184141f107010dae61d2de465462b8177db1a07918be2bd2fc4d4570ad8758da87ef14cf3878db062fe9eb5b53fa3156e7db5c06073d4 SHA512 9e103aae75036e52f89e79c4d4ed3cffe670ef423cda7c2f936533b9329e994c7a02d241289f6565e9d086e5b0bdd6865ab3677c3ad84eaadf3abe310977b6a8 +AUX zfs-kmod-2.2.2-arm64-neon.patch 3145 BLAKE2B 6125fd18649341e44768a84a508cf6d59db72356ebf513fbfb56b50e4fcc9052cee0e315d448e22067b5458336efa3897557dc2cc4ed8b6ef4dda75e0db3e2e0 SHA512 a238df628397fc72e604ec163401865f8348f121bbffac119f5b094ce06318f89fbfb30a1e424ac4835348df67e2512ee05ae5007ee765dc3876d3ba30cdd99d +AUX zfs-kmod-2.2.2-autotrim.patch 1186 BLAKE2B 4dcc5eead0b86fa365ed2c228ac1c0b01f89cc36210959c55d5bf06d1b4e739d6e8a0dee3910ae0c08d7859b3c05cf483aec29d5184d3725cfc66419a943c336 SHA512 cf0d10b00ea045184966424474307a00ff95a96a4c0ea8e7e1037b1b101c2e9d6e2a4b52851427031bcba7ef7ff0d71b90d074f33385166d447896b41771396e +DIST zfs-2.1.14.tar.gz 35167471 BLAKE2B a7b22eaf05e4fbf416ebe4d7b884c515942fc9375c1dd322cefa00c19c550b9318a4192d6a909d49d58523c8f1a6eaf00189dd58e6543fae17cf8cc35042f469 SHA512 4a65c8b7d5576fa2dcc14e7ccaa93191c1d3791479cf89bd02c2bd04434ff5e93709b328796d4f9ba93da19f12772e359df373f40919350a3e1e4c52758b47c8 +DIST zfs-2.1.14.tar.gz.asc 836 BLAKE2B f01bc58bf6c3d367c494ed4ea9f3fb1141f3aafdbf4f913b9e0d60d31557076d5ae0e25ca93b013f5fd85e21ba5ae9f61e1a03af54bb0c743869c0ce3d5519df SHA512 be0f386cce952b4047dc2448e356078668e8d4392802dd3bb1a426741f15f4d9fb689cd1cb09972bdbc9fe2e4e782ec4b4754fe811c5657bc1f5308bd38e3926 +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.2.2.tar.gz 33816541 BLAKE2B f0619ae42d898d18077096217d0a9ddd7c7378424707aa51d3645661b2889a1459bc4a5e9fe42b6860b2d26e4600da35765b0e741725dafacc2ead2370cad866 SHA512 bba252cbf7986f2cce154dd18a34aa478cf98f70106337188dc894de2446d60a58fa643706927757d1787506b44d4ff404897a2d0e16aacb0a7bf27765703332 +DIST zfs-2.2.2.tar.gz.asc 836 BLAKE2B bdc86492b2bf45d329e34e89ea7796f5cbf518d32ab114c909321b1d0d8040b9ce4e25b3b85fcbc5ea62ee10a2d716b5b27e37c2c005b307c0b593815c49d625 SHA512 110be1aa90f4749106717165a3cb5116379e2d170146a2b3d2601f04212450da9327e028d6e1e5de7f8a46c6bb7a15e2bcdd09e3e760590fbc695f9562f1440b +DIST zfs-2.2.3.tar.gz 33854765 BLAKE2B f83439aa929609191a048dd326b2a15e0f57c72d2901cbfb205b81a29aa42dab49b42eb61647ca3eaed17518b8c907e81343364bfecf83ed441271648f8efd4b SHA512 e6c3df531a33f4bd198429e61b7630f1e965a03fd60d1b847bdf0d55c6d2af3abc38b5e8a63aa9ef9f969cc7eca36cb24a7641f6fb8c41ef2fa024d76cd28f3d +DIST zfs-2.2.3.tar.gz.asc 836 BLAKE2B 86e1adc393d1f4643a6fd8c188b555e9dc0fdf7e25690f37ff0a04ff8826eb4fe3c125b54f0c5b9ab33f1daff43c4b44373ee9a4df506f6714f98d77782e6c3c SHA512 fe23ddb9bde78416776411d66a56aa662fa051c8544b4be01ba238b8c1a85ccde1c55329f228fe8ab2681b54a4e4cb08d4e927c597c117242f0b536a40921dc9 +EBUILD zfs-kmod-2.1.14.ebuild 4601 BLAKE2B 451f240a8bfda7164ee48ae37bb410b8c3e06ca7184126da122258e7f6f8da62d23c9e6b0481e310735d92e460fbe5617a9f01da04cdb0ae801039c93cb12cd7 SHA512 7240287b57eaac31f6d0c7d4994c6a4de44a41ac9470aeb4c95e33ddb9557d7c70fad24c037f32ae026b4b7bb745ec5f4f496a802457dbdb95a8f1ec7f527c49 +EBUILD zfs-kmod-2.1.15.ebuild 4604 BLAKE2B 44f71a65eacfb6091959ef6e75a71604b861e6da0ca6442cafd24f22166301e0ee6be02e905958e6d5ed854debe0bfea6d80260a14fd37024bb277aaeafa7896 SHA512 eab99b25b5756c90bd21f9f5e5a6c18424a8b647e005c3df465562383c8630a19747ce96c6b735e6a090c73c8c05b541427df12e8e8d2f6ebc1bf2f0c02f1d5e +EBUILD zfs-kmod-2.2.2-r1.ebuild 6025 BLAKE2B c0f21b6c1a70b1f664700ec4a85be54d8ef15f2dec828b977f6d52ee9ed2f6468454d6ac161f70e97d49fdcc0b4799ffc56cae137cac8be65a2e7c1a1b42626a SHA512 afc32eef22464550c1097ce60df52c45288ca90509cab45809c763eb5903cdc510dfcc3c53b4d8ff4711cc3e611bc3125426bb692d5f9357a31329e973db8c2f +EBUILD zfs-kmod-2.2.2.ebuild 5980 BLAKE2B 7db333fae56ed3306ef21b8adb9172ef056367c339d6bf57e43ab15d6f48888a84c31c317dfc46b757498aacf7f83c2b47436658cbcb6515b78b003c7f806611 SHA512 3da30083362ba3bb9b52d0b6cf3b5874ecacd0c6f208cb86c3b98997905a00d66cd59b8593c9732ff94aafad57c097cad65b3f78d26a803d985758a79d2e9d86 +EBUILD zfs-kmod-2.2.3.ebuild 5939 BLAKE2B 7e02067dd058fb444ce3f1b3aafd5586dde94fc859bbe4845d6183d544445972fa8297e11b5bab0fc3a48772a3cddee3bffc8908fd88e5a8e79969c0f5dd5c64 SHA512 7657fe374b3feaf3681fdaa36af6b29a227a1253ccc4bb4a609b0687f6bcecdf06b46c88c387bdd73e1be9bd81035234a8e4631d19aa250b2fe0d354b9ea2407 +EBUILD zfs-kmod-9999.ebuild 5939 BLAKE2B 7e02067dd058fb444ce3f1b3aafd5586dde94fc859bbe4845d6183d544445972fa8297e11b5bab0fc3a48772a3cddee3bffc8908fd88e5a8e79969c0f5dd5c64 SHA512 7657fe374b3feaf3681fdaa36af6b29a227a1253ccc4bb4a609b0687f6bcecdf06b46c88c387bdd73e1be9bd81035234a8e4631d19aa250b2fe0d354b9ea2407 +MISC metadata.xml 664 BLAKE2B 50e33d5791fd756ae4566052ecd6d8b1b395f8390b4cbc10c3b32bfc12f0a414f4080bf4102091f0920369f7999f2f94022fd526703ee8e73dc948c1f9d28432 SHA512 dca8e09500fe0e20f11b10df22a61ca36c99b6b3a08c465ea011d921b25f5891be3abaa5e6dbda1a52dbbfad69d1c8bf9fc69f71b3ef73cac428015641aa52d2 diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.1.11-gentoo.patch b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.1.11-gentoo.patch new file mode 100644 index 00000000000..53c5f27b3be --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.1.11-gentoo.patch @@ -0,0 +1,24 @@ +Hack to pass the full linux-mod-r1 toolchain to make during ./configure. +Not needed at build time given can pass it normally then. + +Eclass has workarounds, compiler/version matching, and its own set of +user variables which creates disparity between ebuilds if not used. + +For the (normal) alternative: KERNEL_{CC,LD} alone is insufficient, +but combining with KERNEL_LLVM=1 when CC_IS_CLANG will allow it +to work for *most* people (will likely still need KERNEL_LD from +linux-mod-r1, or ThinLTO kernels may fail with sandbox violations). + +Note KERNEL_* also cause failure if they contain spaces. + +https://bugs.gentoo.org/865157 +--- a/config/kernel.m4 ++++ b/config/kernel.m4 +@@ -646,6 +646,5 @@ + AC_TRY_COMMAND([ + KBUILD_MODPOST_NOFINAL="$5" KBUILD_MODPOST_WARN="$6" +- make modules -k -j$TEST_JOBS ${KERNEL_CC:+CC=$KERNEL_CC} +- ${KERNEL_LD:+LD=$KERNEL_LD} ${KERNEL_LLVM:+LLVM=$KERNEL_LLVM} ++ make modules -k -j$TEST_JOBS '${GENTOO_MAKEARGS_EVAL}' + CONFIG_MODULES=y CFLAGS_MODULE=-DCONFIG_MODULES + -C $LINUX_OBJ $ARCH_UM M=$PWD/$1 >$1/build.log 2>&1]) diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.2.2-arm64-neon.patch b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.2.2-arm64-neon.patch new file mode 100644 index 00000000000..54121adcdca --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.2.2-arm64-neon.patch @@ -0,0 +1,100 @@ +https://bugs.gentoo.org/904657 +https://github.com/openzfs/zfs/issues/14555 +https://github.com/openzfs/zfs/commit/976bf9b6a61919638d42ed79cd207132785d128a + +From 976bf9b6a61919638d42ed79cd207132785d128a Mon Sep 17 00:00:00 2001 +From: Shengqi Chen +Date: Tue, 9 Jan 2024 08:05:24 +0800 +Subject: [PATCH] Linux 6.2 compat: add check for kernel_neon_* availability + +This patch adds check for `kernel_neon_*` symbols on arm and arm64 +platforms to address the following issues: + +1. Linux 6.2+ on arm64 has exported them with `EXPORT_SYMBOL_GPL`, so + license compatibility must be checked before use. +2. On both arm and arm64, the definitions of these symbols are guarded + by `CONFIG_KERNEL_MODE_NEON`, but their declarations are still + present. Checking in configuration phase only leads to MODPOST + errors (undefined references). + +Reviewed-by: Brian Behlendorf +Signed-off-by: Shengqi Chen +Closes #15711 +Closes #14555 +Closes: #15401 +--- a/config/kernel-fpu.m4 ++++ b/config/kernel-fpu.m4 +@@ -79,6 +79,12 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_FPU], [ + __kernel_fpu_end(); + ], [], [ZFS_META_LICENSE]) + ++ ZFS_LINUX_TEST_SRC([kernel_neon], [ ++ #include ++ ], [ ++ kernel_neon_begin(); ++ kernel_neon_end(); ++ ], [], [ZFS_META_LICENSE]) + ]) + + AC_DEFUN([ZFS_AC_KERNEL_FPU], [ +@@ -105,9 +111,20 @@ AC_DEFUN([ZFS_AC_KERNEL_FPU], [ + AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, + [kernel exports FPU functions]) + ],[ +- AC_MSG_RESULT(internal) +- AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL, 1, +- [kernel fpu internal]) ++ dnl # ++ dnl # ARM neon symbols (only on arm and arm64) ++ dnl # could be GPL-only on arm64 after Linux 6.2 ++ dnl # ++ ZFS_LINUX_TEST_RESULT([kernel_neon_license],[ ++ AC_MSG_RESULT(kernel_neon_*) ++ AC_DEFINE(HAVE_KERNEL_NEON, 1, ++ [kernel has kernel_neon_* functions]) ++ ],[ ++ # catch-all ++ AC_MSG_RESULT(internal) ++ AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL, 1, ++ [kernel fpu internal]) ++ ]) + ]) + ]) + ]) +--- a/include/os/linux/kernel/linux/simd_aarch64.h ++++ b/include/os/linux/kernel/linux/simd_aarch64.h +@@ -71,9 +71,15 @@ + #define ID_AA64PFR0_EL1 sys_reg(3, 0, 0, 1, 0) + #define ID_AA64ISAR0_EL1 sys_reg(3, 0, 0, 6, 0) + ++#if (defined(HAVE_KERNEL_NEON) && defined(CONFIG_KERNEL_MODE_NEON)) + #define kfpu_allowed() 1 + #define kfpu_begin() kernel_neon_begin() + #define kfpu_end() kernel_neon_end() ++#else ++#define kfpu_allowed() 0 ++#define kfpu_begin() do {} while (0) ++#define kfpu_end() do {} while (0) ++#endif + #define kfpu_init() (0) + #define kfpu_fini() do {} while (0) + +--- a/include/os/linux/kernel/linux/simd_arm.h ++++ b/include/os/linux/kernel/linux/simd_arm.h +@@ -53,9 +53,15 @@ + #include + #include + ++#if (defined(HAVE_KERNEL_NEON) && defined(CONFIG_KERNEL_MODE_NEON)) + #define kfpu_allowed() 1 + #define kfpu_begin() kernel_neon_begin() + #define kfpu_end() kernel_neon_end() ++#else ++#define kfpu_allowed() 0 ++#define kfpu_begin() do {} while (0) ++#define kfpu_end() do {} while (0) ++#endif + #define kfpu_init() (0) + #define kfpu_fini() do {} while (0) + + diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.2.2-autotrim.patch b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.2.2-autotrim.patch new file mode 100644 index 00000000000..6d72389fdb2 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/files/zfs-kmod-2.2.2-autotrim.patch @@ -0,0 +1,31 @@ +https://bugs.gentoo.org/923745 +https://github.com/openzfs/zfs/issues/15453 +https://github.com/openzfs/zfs/pull/15781 +https://github.com/openzfs/zfs/pull/15789 + +From a0aa7a2ee3b56d7b6d69c2081034ec8293a6d605 Mon Sep 17 00:00:00 2001 +From: Kevin Jin <33590050+jxdking@users.noreply.github.com> +Date: Wed, 17 Jan 2024 12:03:58 -0500 +Subject: [PATCH] Autotrim High Load Average Fix + +Switch from cv_wait() to cv_wait_idle() in vdev_autotrim_wait_kick(), +which should mitigate the high load average while waiting. + +Reviewed-by: Brian Atkinson +Reviewed-by: Brian Behlendorf +Reviewed-by: Alexander Motin +Signed-off-by: jxdking +Closes #15781 +--- a/module/zfs/vdev_trim.c ++++ b/module/zfs/vdev_trim.c +@@ -194,7 +194,8 @@ vdev_autotrim_wait_kick(vdev_t *vd, int num_of_kick) + for (int i = 0; i < num_of_kick; i++) { + if (vd->vdev_autotrim_exit_wanted) + break; +- cv_wait(&vd->vdev_autotrim_kick_cv, &vd->vdev_autotrim_lock); ++ cv_wait_idle(&vd->vdev_autotrim_kick_cv, ++ &vd->vdev_autotrim_lock); + } + boolean_t exit_wanted = vd->vdev_autotrim_exit_wanted; + mutex_exit(&vd->vdev_autotrim_lock); + diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/metadata.xml b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/metadata.xml new file mode 100644 index 00000000000..deb3879f4c3 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/metadata.xml @@ -0,0 +1,17 @@ + + + + + sam@gentoo.org + Sam James + + + Prevents upgrading to an unsupported kernel version when combined with USE=dist-kernel + Pull dependencies and check kernel options required for root-on-zfs + + + https://github.com/openzfs/zfs/issues + https://openzfs.github.io/openzfs-docs + openzfs/zfs + + diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-2.1.14.ebuild b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-2.1.14.ebuild new file mode 100644 index 00000000000..c698d195b16 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs-kmod/zfs-kmod-2.1.14.ebuild @@ -0,0 +1,177 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit autotools dist-kernel-utils flag-o-matic linux-mod-r1 multiprocessing + +DESCRIPTION="Linux ZFS kernel module for sys-fs/zfs" +HOMEPAGE="https://github.com/openzfs/zfs" + +MODULES_KERNEL_MAX=6.5 +MODULES_KERNEL_MIN=3.10 + +if [[ ${PV} == 9999 ]] ; then + EGIT_REPO_URI="https://github.com/openzfs/zfs.git" + inherit git-r3 + unset MODULES_KERNEL_MAX +else + VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/openzfs.asc + inherit verify-sig + + MY_PV=${PV/_rc/-rc} + SRC_URI="https://github.com/openzfs/zfs/releases/download/zfs-${MY_PV}/zfs-${MY_PV}.tar.gz" + SRC_URI+=" verify-sig? ( https://github.com/openzfs/zfs/releases/download/zfs-${MY_PV}/zfs-${MY_PV}.tar.gz.asc )" + S="${WORKDIR}/zfs-${PV%_rc?}" + + ZFS_KERNEL_COMPAT="${MODULES_KERNEL_MAX}" + # Increments minor eg 5.14 -> 5.15, and still supports override. + ZFS_KERNEL_DEP="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}" + ZFS_KERNEL_DEP="${ZFS_KERNEL_DEP%%.*}.$(( ${ZFS_KERNEL_DEP##*.} + 1))" + + if [[ ${PV} != *_rc* ]] ; then + KEYWORDS="amd64 arm64 ppc64 ~riscv ~sparc" + fi +fi + +LICENSE="CDDL MIT debug? ( GPL-2+ )" +SLOT="0/${PVR}" +IUSE="custom-cflags debug +rootfs" +RESTRICT="test" + +BDEPEND=" + dev-lang/perl + app-alternatives/awk +" + +if [[ ${PV} != 9999 ]] ; then + BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )" + + IUSE+=" +dist-kernel-cap" + RDEPEND=" + dist-kernel-cap? ( dist-kernel? ( + 5.15, and still supports override. + ZFS_KERNEL_DEP="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}" + ZFS_KERNEL_DEP="${ZFS_KERNEL_DEP%%.*}.$(( ${ZFS_KERNEL_DEP##*.} + 1))" + + if [[ ${PV} != *_rc* ]] ; then + KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~sparc" + fi +fi + +LICENSE="CDDL MIT debug? ( GPL-2+ )" +SLOT="0/${PVR}" +IUSE="custom-cflags debug +rootfs" +RESTRICT="test" + +BDEPEND=" + dev-lang/perl + app-alternatives/awk +" + +if [[ ${PV} != 9999 ]] ; then + BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )" + + IUSE+=" +dist-kernel-cap" + RDEPEND=" + dist-kernel-cap? ( dist-kernel? ( + 5.15, and still supports override. + ZFS_KERNEL_DEP="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}" + ZFS_KERNEL_DEP="${ZFS_KERNEL_DEP%%.*}.$(( ${ZFS_KERNEL_DEP##*.} + 1))" + + if [[ ${PV} != *_rc* ]] ; then + KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~sparc" + fi +fi + +LICENSE="CDDL MIT debug? ( GPL-2+ )" +SLOT="0/${PVR}" +IUSE="custom-cflags debug +rootfs" +RESTRICT="test" + +BDEPEND=" + app-alternatives/awk + dev-lang/perl +" + +if [[ ${PV} != 9999 ]] ; then + BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )" + + IUSE+=" +dist-kernel-cap" + RDEPEND=" + dist-kernel-cap? ( dist-kernel? ( + 5.15, and still supports override. + ZFS_KERNEL_DEP="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}" + ZFS_KERNEL_DEP="${ZFS_KERNEL_DEP%%.*}.$(( ${ZFS_KERNEL_DEP##*.} + 1))" + + if [[ ${PV} != *_rc* ]] ; then + KEYWORDS="amd64 arm64 ~loong ppc64 ~riscv ~sparc" + fi +fi + +LICENSE="CDDL MIT debug? ( GPL-2+ )" +SLOT="0/${PVR}" +IUSE="custom-cflags debug +rootfs" +RESTRICT="test" + +BDEPEND=" + app-alternatives/awk + dev-lang/perl +" + +if [[ ${PV} != 9999 ]] ; then + BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )" + + IUSE+=" +dist-kernel-cap" + RDEPEND=" + dist-kernel-cap? ( dist-kernel? ( + 5.15, and still supports override. + ZFS_KERNEL_DEP="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}" + ZFS_KERNEL_DEP="${ZFS_KERNEL_DEP%%.*}.$(( ${ZFS_KERNEL_DEP##*.} + 1))" + + if [[ ${PV} != *_rc* ]] ; then + KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~sparc" + fi +fi + +LICENSE="CDDL MIT debug? ( GPL-2+ )" +SLOT="0/${PVR}" +IUSE="custom-cflags debug +rootfs" +RESTRICT="test" + +BDEPEND=" + app-alternatives/awk + dev-lang/perl +" + +if [[ ${PV} != 9999 ]] ; then + BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )" + + IUSE+=" +dist-kernel-cap" + RDEPEND=" + dist-kernel-cap? ( dist-kernel? ( + 5.15, and still supports override. + ZFS_KERNEL_DEP="${ZFS_KERNEL_COMPAT_OVERRIDE:-${ZFS_KERNEL_COMPAT}}" + ZFS_KERNEL_DEP="${ZFS_KERNEL_DEP%%.*}.$(( ${ZFS_KERNEL_DEP##*.} + 1))" + + if [[ ${PV} != *_rc* ]] ; then + KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~sparc" + fi +fi + +LICENSE="CDDL MIT debug? ( GPL-2+ )" +SLOT="0/${PVR}" +IUSE="custom-cflags debug +rootfs" +RESTRICT="test" + +BDEPEND=" + app-alternatives/awk + dev-lang/perl +" + +if [[ ${PV} != 9999 ]] ; then + BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-openzfs )" + + IUSE+=" +dist-kernel-cap" + RDEPEND=" + dist-kernel-cap? ( dist-kernel? ( + +Date: Thu, 30 Jun 2022 13:47:58 -0400 +Subject: [PATCH] dracut: fix boot on non-zfs-root systems + +Simply prevent overwriting root until it needs to be overwritten. + +Dracut could change this value before this module is called, but won't +change the kernel command line. + +Reviewed-by: Andrew J. Hesford +Signed-off-by: Toyam Cox +Closes #13592 +--- + contrib/dracut/90zfs/zfs-lib.sh.in | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/contrib/dracut/90zfs/zfs-lib.sh.in b/contrib/dracut/90zfs/zfs-lib.sh.in +index e44673c2d75..3a43e514d6f 100755 +--- a/contrib/dracut/90zfs/zfs-lib.sh.in ++++ b/contrib/dracut/90zfs/zfs-lib.sh.in +@@ -88,11 +88,11 @@ decode_root_args() { + return + fi + +- root=$(getarg root=) ++ xroot=$(getarg root=) + rootfstype=$(getarg rootfstype=) + + # shellcheck disable=SC2249 +- case "$root" in ++ case "$xroot" in + ""|zfs|zfs:|zfs:AUTO) + root=zfs:AUTO + rootfstype=zfs +@@ -100,7 +100,7 @@ decode_root_args() { + ;; + + ZFS=*|zfs:*) +- root="${root#zfs:}" ++ root="${xroot#zfs:}" + root="${root#ZFS=}" + root=$(echo "$root" | tr '+' ' ') + rootfstype=zfs +@@ -109,9 +109,9 @@ decode_root_args() { + esac + + if [ "$rootfstype" = "zfs" ]; then +- case "$root" in ++ case "$xroot" in + "") root=zfs:AUTO ;; +- *) root=$(echo "$root" | tr '+' ' ') ;; ++ *) root=$(echo "$xroot" | tr '+' ' ') ;; + esac + return 0 + fi + diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.2.2-no-USER_NS.patch b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.2.2-no-USER_NS.patch new file mode 100644 index 00000000000..b132db9d4bf --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.2.2-no-USER_NS.patch @@ -0,0 +1,39 @@ +https://github.com/openzfs/zfs/issues/15241 +https://github.com/openzfs/zfs/pull/15560 + +From e0a7ec29d91b79adfd81073f229241351ed0ae21 Mon Sep 17 00:00:00 2001 +From: Ilkka Sovanto +Date: Wed, 22 Nov 2023 20:24:47 +0200 +Subject: [PATCH] Fix zoneid when USER_NS is disabled + +getzoneid() should return GLOBAL_ZONEID instead of 0 when USER_NS is disabled. + +Signed-off-by: Ilkka Sovanto +--- a/lib/libspl/os/linux/zone.c ++++ b/lib/libspl/os/linux/zone.c +@@ -42,20 +42,20 @@ getzoneid(void) + int c = snprintf(path, sizeof (path), "/proc/self/ns/user"); + /* This API doesn't have any error checking... */ + if (c < 0 || c >= sizeof (path)) +- return (0); ++ return (GLOBAL_ZONEID); + + ssize_t r = readlink(path, buf, sizeof (buf) - 1); + if (r < 0) +- return (0); ++ return (GLOBAL_ZONEID); + + cp = strchr(buf, '['); + if (cp == NULL) +- return (0); ++ return (GLOBAL_ZONEID); + cp++; + + unsigned long n = strtoul(cp, NULL, 10); + if (n == ULONG_MAX && errno == ERANGE) +- return (0); ++ return (GLOBAL_ZONEID); + zoneid_t z = (zoneid_t)n; + + return (z); + diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.2.3-musl.patch b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.2.3-musl.patch new file mode 100644 index 00000000000..01433490e82 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/files/2.2.3-musl.patch @@ -0,0 +1,63 @@ +https://github.com/openzfs/zfs/pull/15925 + +From 68419c70dc7235a4954d6c0c09d60f9ebe694a3c Mon Sep 17 00:00:00 2001 +From: Sam James +Date: Fri, 23 Feb 2024 05:12:09 +0000 +Subject: [PATCH] Use instead of + +When building on musl, we get: +``` +In file included from tests/zfs-tests/cmd/getversion.c:22: +/usr/include/sys/fcntl.h:1:2: error: #warning redirecting incorrect #include to [-Werror=cpp] + 1 | #warning redirecting incorrect #include to + +In file included from module/os/linux/zfs/vdev_file.c:36: +/usr/include/sys/fcntl.h:1:2: error: #warning redirecting incorrect #include to [-Werror=cpp] + 1 | #warning redirecting incorrect #include to +``` + +Bug: https://bugs.gentoo.org/925235 +Signed-off-by: Sam James +--- + module/os/linux/zfs/vdev_file.c | 2 +- + tests/zfs-tests/cmd/getversion.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/module/os/linux/zfs/vdev_file.c b/module/os/linux/zfs/vdev_file.c +index 5abc0426d1..68e3042a97 100644 +--- a/module/os/linux/zfs/vdev_file.c ++++ b/module/os/linux/zfs/vdev_file.c +@@ -23,6 +23,7 @@ + * Copyright (c) 2011, 2020 by Delphix. All rights reserved. + */ + ++#include + #include + #include + #include +@@ -33,7 +34,6 @@ + #include + #include + #include +-#include + #include + #include + #ifdef _KERNEL +diff --git a/tests/zfs-tests/cmd/getversion.c b/tests/zfs-tests/cmd/getversion.c +index 62c1c5b6ab..1e026b92d1 100644 +--- a/tests/zfs-tests/cmd/getversion.c ++++ b/tests/zfs-tests/cmd/getversion.c +@@ -19,9 +19,9 @@ + */ + + #include +-#include + #include + #include ++#include + #include + #include + #include +-- +2.43.2 + diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs/metadata.xml b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/metadata.xml new file mode 100644 index 00000000000..b2f96b1a1ba --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/metadata.xml @@ -0,0 +1,38 @@ + + + + + sam@gentoo.org + Sam James + + + Disable dependency on sys-fs/zfs-kmod under the assumption that ZFS is part of the kernel source tree + Don't install python scripts (arcstat, dbufstat etc) and avoid dependency on dev-lang/python + Install zfs_key pam module, for automatically loading zfs encryption keys for home datasets + Enable dependencies required for booting off a pool containing a rootfs + Install regression test suite + + + https://github.com/openzfs/zfs/issues + https://openzfs.github.io/openzfs-docs + openzfs/zfs + + + OpenZFS is an advanced file system and volume manager which was originally developed + for Solaris and is now maintained by the OpenZFS community + + It includes the functionality of both traditional file systems and volume manager. + It has many advanced features including: + * Protection against data corruption. Integrity checking for both data and metadata. + * Continuous integrity verification and automatic “self-healing” repair + * Data redundancy with mirroring, RAID-Z1/2/3 [and DRAID] + * Support for high storage capacities — up to 256 trillion yobibytes (2^128 bytes) + * Space-saving with transparent compression using LZ4, GZIP or ZSTD + * Hardware-accelerated native encryption + * Efficient storage with snapshots and copy-on-write clones + * Efficient local or remote replication — send only changed blocks with ZFS send and receive + + The OpenZFS project brings together developers from the Linux, FreeBSD, illumos, MacOS, and Windows platforms. + OpenZFS is supported by a wide range of companies. + + diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.1.14.ebuild b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.1.14.ebuild new file mode 100644 index 00000000000..5dcfd94d6ae --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.1.14.ebuild @@ -0,0 +1,311 @@ +# 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..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}/${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 +} diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.1.15.ebuild b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.1.15.ebuild new file mode 100644 index 00000000000..606c4bf649f --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.1.15.ebuild @@ -0,0 +1,311 @@ +# 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..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}/${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 +} diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.2.2-r1.ebuild b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.2.2-r1.ebuild new file mode 100644 index 00000000000..80914d259c3 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.2.2-r1.ebuild @@ -0,0 +1,307 @@ +# 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..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 ~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" + +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-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 +) + +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 +} diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.2.3.ebuild b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.2.3.ebuild new file mode 100644 index 00000000000..71e2889ab79 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-2.2.3.ebuild @@ -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/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-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) + --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 +} diff --git a/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-9999.ebuild b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-9999.ebuild new file mode 100644 index 00000000000..7b38a676bec --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-fs/zfs/zfs-9999.ebuild @@ -0,0 +1,306 @@ +# 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/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-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) + --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 +} From bda8148236ba048b400a10c9c2a3a4ce675fab54 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Fri, 8 Mar 2024 16:17:50 +0000 Subject: [PATCH 10/19] .github: Add zfs ebuilds and related eclasses to sync list Signed-off-by: Jeremi Piotrowski --- .github/workflows/portage-stable-packages-list | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/portage-stable-packages-list b/.github/workflows/portage-stable-packages-list index b7ce18e580b..30f848bcefe 100644 --- a/.github/workflows/portage-stable-packages-list +++ b/.github/workflows/portage-stable-packages-list @@ -312,6 +312,7 @@ eclass/cmake-multilib.eclass eclass/cmake.eclass eclass/desktop.eclass eclass/distutils-r1.eclass +eclass/dist-kernel-utils.eclass eclass/eapi7-ver.eclass eclass/eapi8-dosym.eclass eclass/edo.eclass @@ -540,6 +541,8 @@ sys-fs/multipath-tools sys-fs/quota sys-fs/squashfs-tools sys-fs/xfsprogs +sys-fs/zfs +sys-fs/zfs-kmod sys-kernel/linux-headers From e8b4b308c9b68837b5a24aa8d3655e495344c13c Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Fri, 8 Mar 2024 16:18:50 +0000 Subject: [PATCH 11/19] coreos/config: Add hooks for zfs ebuilds The zfs-kmod ebuild needs KERNEL_DIR to point to the correct /lib/modules directory. The zfs ebuild installs two systemd unit masks to /usr/lib/systemd which result in "dangling symlink" errors during the image build. These systemd unit masks are only necessary for old Ubuntu systems that have sysv-init-systemd compat wrappers. Signed-off-by: Jeremi Piotrowski --- .../third_party/coreos-overlay/coreos/config/env/sys-fs/zfs | 4 ++++ .../coreos-overlay/coreos/config/env/sys-fs/zfs-kmod | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-fs/zfs create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-fs/zfs-kmod diff --git a/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-fs/zfs b/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-fs/zfs new file mode 100644 index 00000000000..62adecfe843 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-fs/zfs @@ -0,0 +1,4 @@ +cros_post_src_install_rm_systemd_masks() { + rm "${D}$(systemd_get_systemunitdir)"/zfs-load-key.service + rm "${D}$(systemd_get_systemunitdir)"/zfs-import.service +} diff --git a/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-fs/zfs-kmod b/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-fs/zfs-kmod new file mode 100644 index 00000000000..55536d82a8a --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-fs/zfs-kmod @@ -0,0 +1,2 @@ +: ${MODULES_ROOT:=$(echo ${SYSROOT}/lib/modules/*)} +KERNEL_DIR="${MODULES_ROOT}/build" From 6ccd5b6d8fbbe74b45d9041c16ec33ee71fd6fb1 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Mon, 11 Mar 2024 11:56:08 +0000 Subject: [PATCH 12/19] board-packages: Add zfs dep We need zfs build as a board package so that we can provide a zfs sysext. Signed-off-by: Jeremi Piotrowski --- ...packages-0.0.1-r13.ebuild => board-packages-0.0.1-r14.ebuild} | 0 .../coreos-devel/board-packages/board-packages-0.0.1.ebuild | 1 + 2 files changed, 1 insertion(+) rename sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/{board-packages-0.0.1-r13.ebuild => board-packages-0.0.1-r14.ebuild} (100%) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/board-packages-0.0.1-r13.ebuild b/sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/board-packages-0.0.1-r14.ebuild similarity index 100% rename from sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/board-packages-0.0.1-r13.ebuild rename to sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/board-packages-0.0.1-r14.ebuild diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/board-packages-0.0.1.ebuild b/sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/board-packages-0.0.1.ebuild index 9cd818a1949..d2aa9fa7106 100644 --- a/sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/board-packages-0.0.1.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/coreos-devel/board-packages/board-packages-0.0.1.ebuild @@ -34,4 +34,5 @@ RDEPEND=" coreos-base/coreos coreos-base/coreos-dev coreos-base/flatcar-eks + sys-fs/zfs " From 87262e4f915c03596547d63159d2c30ac459beeb Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Mon, 11 Mar 2024 09:41:01 +0000 Subject: [PATCH 13/19] build_library: Add mangle script for zfs sysext There are two challenges with the sysext: it needs config files in /etc and it needs udev rules for mounting during boot to work. The etc files are placed in the standard flatcar etc overlay path but the overlay is mounted from the initrd. So instead, we create a tmpfiles.d rule that symlinks the best important files over. For the udev issue, we create a drop-in in /etc that ensures udev runs after systemd-sysext. We also can't rely on systemd presets to work, so instead parse the preset file and statically create the service dependencies. For the primary zfs.target we rely on an Upholds entry. Users can still disabled unwanted services if they want. We also removed unnecessary files: - development files - initramfs related scripts Signed-off-by: Jeremi Piotrowski --- build_library/sysext_mangle_flatcar-zfs | 43 +++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 build_library/sysext_mangle_flatcar-zfs diff --git a/build_library/sysext_mangle_flatcar-zfs b/build_library/sysext_mangle_flatcar-zfs new file mode 100755 index 00000000000..13e9135b3c7 --- /dev/null +++ b/build_library/sysext_mangle_flatcar-zfs @@ -0,0 +1,43 @@ +#!/bin/bash + +set -euo pipefail +rootfs="${1}" + +pushd "${rootfs}" + +rm -rf ./usr/{lib/debug/,lib64/cmake/,include/} +rm -rf ./usr/lib/dracut/ +rm -rf ./usr/share/initramfs-tools +rm -rf ./usr/src + +mkdir -p ./usr/share/zfs/etc +rm -rf ./etc/{csh.env,environment.d/,profile.env} +cp -a ./etc/. ./usr/share/zfs/etc/ + +pushd ./usr/lib/systemd/system +while read cmd unit; do + if [ "$cmd" = enable ]; then + target=$(awk -F= '/WantedBy/ { print $2 }' $unit) + mkdir -p "${target}.wants" + ln -svr "${unit}" "${target}".wants/ + fi +done < <(grep -v '^#' "${rootfs}"/usr/lib/systemd/system-preset/50-zfs.preset) +mkdir -p "multi-user.target.d" +{ echo "[Unit]"; echo "Upholds=zfs.target"; } > "multi-user.target.d/10-zfs.conf" +popd + +mkdir -p ./usr/lib/tmpfiles.d +cat <./usr/lib/tmpfiles.d/10-zfs.conf +d /etc/zfs 0755 root root - - +L /etc/zfs/zed.d - - - - /usr/share/zfs/etc/zfs/zed.d +L /etc/zfs/zfs-functions - - - - /usr/share/zfs/etc/zfs/zfs-functions +L /etc/zfs/zpool.d - - - - /usr/share/zfs/etc/zfs/zpool.d +C /etc/systemd/system/systemd-udevd.service.d/10-zfs.conf - - - - /usr/lib/systemd/system/systemd-udevd.service.d/10-zfs.conf +EOF + +mkdir -p ./usr/lib/systemd/system/systemd-udevd.service.d +cat <./usr/lib/systemd/system/systemd-udevd.service.d/10-zfs.conf +[Unit] +After=systemd-sysext.service +EOF +popd From 53e164969f867b3b1e8995851c78a4b3c32164e2 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Mon, 11 Mar 2024 10:31:12 +0000 Subject: [PATCH 14/19] ci: Build sysexts together with image Signed-off-by: Jeremi Piotrowski --- .github/workflows/ci.yaml | 2 +- ci-automation/image.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b9445865bcf..b1eb6d61eeb 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -185,7 +185,7 @@ jobs: ./run_sdk_container -n "${container_name}" \ ./build_image --board="${arch}-usr" --group="${channel}" \ --output_root="${CI_CONTAINER_ARTIFACT_ROOT}" \ - prodtar container + prodtar container sysext - name: Build VM image(s) shell: bash diff --git a/ci-automation/image.sh b/ci-automation/image.sh index 139956970c6..09ca5e904fc 100644 --- a/ci-automation/image.sh +++ b/ci-automation/image.sh @@ -103,7 +103,7 @@ function _image_build_impl() { --base_sysexts="${base_sysexts_param}" \ --output_root="${CONTAINER_IMAGE_ROOT}" \ --only_store_compressed \ - prodtar container + prodtar container sysext # copy resulting images + push to buildcache local images_out="images/" From 79294342a99657da134347266160a7332dc77d77 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Mon, 11 Mar 2024 12:49:50 +0000 Subject: [PATCH 15/19] build_library: Place EXTRA_SYSEXTS in a separate file This allows it to be sourced from other scripts and used e.g. in generating an image changes summary. Signed-off-by: Jeremi Piotrowski --- build_image | 1 + build_library/extra_sysexts.sh | 3 +++ build_library/prod_image_util.sh | 4 ---- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 build_library/extra_sysexts.sh diff --git a/build_image b/build_image index 1e8f2cd0241..e916d0df1b6 100755 --- a/build_image +++ b/build_image @@ -104,6 +104,7 @@ fi . "${BUILD_LIBRARY_DIR}/dev_container_util.sh" || exit 1 . "${BUILD_LIBRARY_DIR}/test_image_content.sh" || exit 1 . "${BUILD_LIBRARY_DIR}/vm_image_util.sh" || exit 1 +. "${BUILD_LIBRARY_DIR}/extra_sysexts.sh" || exit 1 PROD_IMAGE=0 PROD_TAR=0 diff --git a/build_library/extra_sysexts.sh b/build_library/extra_sysexts.sh new file mode 100644 index 00000000000..d2ace255366 --- /dev/null +++ b/build_library/extra_sysexts.sh @@ -0,0 +1,3 @@ +EXTRA_SYSEXTS=( + zfs:sys-fs/zfs +) diff --git a/build_library/prod_image_util.sh b/build_library/prod_image_util.sh index 02c0571d09e..1251d3a4fe2 100755 --- a/build_library/prod_image_util.sh +++ b/build_library/prod_image_util.sh @@ -248,10 +248,6 @@ create_prod_tar() { upload_image "${container}" } -EXTRA_SYSEXTS=( - zfs:sys-fs/zfs -) - create_prod_sysexts() { local image_name="$1" local image_sysext_base="${image_name%.bin}_sysext.squashfs" From 42ed2d9b7ebd4edceeb32d7123b12c6be6d57f3e Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Mon, 11 Mar 2024 17:24:24 +0000 Subject: [PATCH 16/19] coreos-kernel.eclass: Install host arch Makefiles into source dir Gentoo's linux-info.eclass tries to check the kernel version by including /lib/modules/.../source/Makefile and printing $(VERSION). It unsets ARCH= before doing this (no clue why) which works with a full source tree but not with our minimized one. To fix this we need to archive arch/x86/Makefile also for arm64. Signed-off-by: Jeremi Piotrowski --- .../src/third_party/coreos-overlay/eclass/coreos-kernel.eclass | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass b/sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass index 21fa398eb37..627326b50bd 100644 --- a/sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass +++ b/sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass @@ -187,6 +187,7 @@ shred_keys() { # Populate /lib/modules/$(uname -r)/{build,source} install_build_source() { local kernel_arch=$(tc-arch-kernel) + local host_kernel_arch=$(tc-ninja_magic_to_arch kern "${CBUILD}") # NOTE: We have to get ${archabspaths} before removing symlinks under # /usr/lib/modules. However, do not exclude "dt-bindings" for now, @@ -232,6 +233,7 @@ install_build_source() { # or arm64. { echo source/Makefile + find source/arch/${host_kernel_arch} -follow -maxdepth 1 -name 'Makefile*' -print find source/arch/${kernel_arch} -follow -maxdepth 1 -name 'Makefile*' -print find source/arch/${kernel_arch} -follow \( -name 'module.lds' -o -name 'Kbuild.platforms' -o -name 'Platform' \) -print find $(find source/arch/${kernel_arch} -follow \( -name include -o -name scripts \) -follow -type d -print) -print From 1ec40b2dac858bc565348dc7c042ef9a3bd20168 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Mon, 11 Mar 2024 17:35:18 +0000 Subject: [PATCH 17/19] build_library: create_prod_sysexts: Move artifacts to BUILD_DIR Putting things in a sysexts subdir results in the same layout on bincache and does not follow the expected url schema for fetching the sysext. Signed-off-by: Jeremi Piotrowski --- build_library/prod_image_util.sh | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/build_library/prod_image_util.sh b/build_library/prod_image_util.sh index 1251d3a4fe2..183d57f9eff 100755 --- a/build_library/prod_image_util.sh +++ b/build_library/prod_image_util.sh @@ -251,8 +251,6 @@ create_prod_tar() { create_prod_sysexts() { local image_name="$1" local image_sysext_base="${image_name%.bin}_sysext.squashfs" - sudo rm -rf "${BUILD_DIR}/sysexts/*" - mkdir -p "${BUILD_DIR}/sysexts" local to_upload=() for sysext in "${EXTRA_SYSEXTS[@]}"; do local name="flatcar-${sysext%:*}" @@ -261,24 +259,27 @@ create_prod_sysexts() { if [[ ! -x "${mangle_script}" ]]; then mangle_script= fi + sudo rm -f "${BUILD_DIR}/${name}.raw" \ + "${BUILD_DIR}/flatcar-test-update-${name}.gz" \ + "${BUILD_DIR}/${name}_*" sudo "${SCRIPT_ROOT}/build_sysext" --board="${BOARD}" \ --squashfs_base="${BUILD_DIR}/${image_sysext_base}" \ - --image_builddir="${BUILD_DIR}/sysexts" \ + --image_builddir="${BUILD_DIR}" \ ${mangle_script:+--manglefs_script=${mangle_script}} \ "${name}" "${pkg}" delta_generator \ -private_key "/usr/share/update_engine/update-payload-key.key.pem" \ - -new_image "${BUILD_DIR}/sysexts/${name}.raw" \ - -out_file "${BUILD_DIR}/sysexts/flatcar_test_update-${name}.gz" + -new_image "${BUILD_DIR}/${name}.raw" \ + -out_file "${BUILD_DIR}/flatcar_test_update-${name}.gz" to_upload+=( - "${BUILD_DIR}/sysexts/${name}.raw" - "${BUILD_DIR}/sysexts/${name}_contents.txt" - "${BUILD_DIR}/sysexts/${name}_contents_wtd.txt" - "${BUILD_DIR}/sysexts/${name}_disk_usage.txt" - "${BUILD_DIR}/sysexts/${name}_packages.txt" - "${BUILD_DIR}/sysexts/flatcar_test_update-${name}.gz" + "${BUILD_DIR}/${name}.raw" + "${BUILD_DIR}/${name}_contents.txt" + "${BUILD_DIR}/${name}_contents_wtd.txt" + "${BUILD_DIR}/${name}_disk_usage.txt" + "${BUILD_DIR}/${name}_packages.txt" + "${BUILD_DIR}/flatcar_test_update-${name}.gz" ) done - upload_image -d ${BUILD_DIR}/sysexts/sysext.DIGESTS "${to_upload[@]}" + upload_image -d ${BUILD_DIR}/sysexts.DIGESTS "${to_upload[@]}" } From 333e72244dfd19964676fd35f54d21a4626840b8 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Tue, 12 Mar 2024 15:07:20 +0100 Subject: [PATCH 18/19] sys-kernel/bootengine: Bump commit for sysext mkdir fix Fix a missing mkdir of /sysroot/etc/flatcar/sysext from the initrd before attempting to move sysext files there. Also explicitly omit dracut zfs module from initrd generation. Signed-off-by: Jeremi Piotrowski --- ...ootengine-0.0.38-r28.ebuild => bootengine-0.0.38-r29.ebuild} | 0 .../coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/{bootengine-0.0.38-r28.ebuild => bootengine-0.0.38-r29.ebuild} (100%) diff --git a/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-0.0.38-r28.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-0.0.38-r29.ebuild similarity index 100% rename from sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-0.0.38-r28.ebuild rename to sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-0.0.38-r29.ebuild diff --git a/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild index a96c118ceb4..a700dd33cd4 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild @@ -10,7 +10,7 @@ CROS_WORKON_REPO="https://github.com" if [[ "${PV}" == 9999 ]]; then KEYWORDS="~amd64 ~arm ~arm64 ~x86" else - CROS_WORKON_COMMIT="0bade95d3b33b75b6c827d2db2f9298aff0ca05f" # flatcar-master + CROS_WORKON_COMMIT="08125679df614d1e95c20ea7676ba19c56838103" # flatcar-master KEYWORDS="amd64 arm arm64 x86" fi From 3aa9cd21ac2e50b477eb1db0cfc85dbf04b2cea5 Mon Sep 17 00:00:00 2001 From: Jeremi Piotrowski Date: Wed, 13 Mar 2024 19:33:05 +0100 Subject: [PATCH 19/19] changelog: Add entry for zfs sysext Signed-off-by: Jeremi Piotrowski --- changelog/changes/2024-03-13-zfs.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/changes/2024-03-13-zfs.md diff --git a/changelog/changes/2024-03-13-zfs.md b/changelog/changes/2024-03-13-zfs.md new file mode 100644 index 00000000000..bef99eb451c --- /dev/null +++ b/changelog/changes/2024-03-13-zfs.md @@ -0,0 +1 @@ +- Provided a ZFS-2.2.2 Flatcar extension as optional systemd-sysext image with the release. Write 'zfs' to `/etc/flatcar/enabled-sysext.conf` through Ignition and the sysext will be installed during provisioning. ZFS support is experimental and ZFS is not supported for the root partition. ([flatcar/scripts#1742](https://github.com/flatcar/scripts/pull/1742))