Gentoo Archives: gentoo-commits

From: Georgy Yakovlev <gyakovlev@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-fs/zfs/, sys-fs/zfs/files/
Date: Fri, 27 Sep 2019 19:16:33
Message-Id: 1569611779.c87de1ae3f3027a29c7d1db353c5faa17442a21b.gyakovlev@gentoo
1 commit: c87de1ae3f3027a29c7d1db353c5faa17442a21b
2 Author: Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
3 AuthorDate: Fri Sep 27 18:28:37 2019 +0000
4 Commit: Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
5 CommitDate: Fri Sep 27 19:16:19 2019 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c87de1ae
7
8 sys-fs/zfs: bump to 0.8.2
9
10 Package-Manager: Portage-2.3.76, Repoman-2.3.17
11 RepoMan-Options: --ignore-arches
12 Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>
13
14 sys-fs/zfs/Manifest | 1 +
15 .../files/0.8.2-ZPOOL_IMPORT_UDEV_TIMEOUT_MS.patch | 68 +++++++
16 sys-fs/zfs/zfs-0.8.2.ebuild | 223 +++++++++++++++++++++
17 3 files changed, 292 insertions(+)
18
19 diff --git a/sys-fs/zfs/Manifest b/sys-fs/zfs/Manifest
20 index daccededfad..1c908ae93b7 100644
21 --- a/sys-fs/zfs/Manifest
22 +++ b/sys-fs/zfs/Manifest
23 @@ -1,2 +1,3 @@
24 DIST zfs-0.7.13.tar.gz 6614047 BLAKE2B c59c46287715779eb04d69333b0a417fa9865eb0d61c642b043188c4c97d4eed369f76a48327326ed1d4dd608ff95d91d20d26c80ed0b120a8fcd5f83cea638f SHA512 457d8f110b68c9656194cd3738b216d5d807d680e5cfc6ed1f3cf5ebde67860476387c6b862ba3ba7f972d8945075963e6c325543ab84468e3eff5dbce68476e
25 DIST zfs-0.8.1.tar.gz 8668360 BLAKE2B f18268656381c20af6bd18421636a1c56633c7eafaf91b1308d15508d5f4bdcfa5dfbb4e09d0302ac3de9d6a4f69718fe9c3d083ed5b3ab2a32c6fb7a1db624b SHA512 1fb3957f65dbe94edaffcedb5b2694390dc14e472c11f7e63184a9ea6a774e79a43d47a2d789b7ced233fc67c76583bf7d5c1bda0692bb07929673e2a57f4667
26 +DIST zfs-0.8.2.tar.gz 8738111 BLAKE2B 5c15f6664ca70f0deeb5b9e32f2bcff68f9821529e5203ff18612ce88473fee9af369354c442f3db7882d301cf17c805c9635b05bfd3460833ed8e5ff8004dd0 SHA512 1424b1a030b814f812b5da422100669db5b8c3ccae14c2fdd62a5e0df28e7255247fe5ca99c95a14f08c92cc1574c22dd132093e4a1dd81e38c95b10cc5e2496
27
28 diff --git a/sys-fs/zfs/files/0.8.2-ZPOOL_IMPORT_UDEV_TIMEOUT_MS.patch b/sys-fs/zfs/files/0.8.2-ZPOOL_IMPORT_UDEV_TIMEOUT_MS.patch
29 new file mode 100644
30 index 00000000000..6c4054ddb66
31 --- /dev/null
32 +++ b/sys-fs/zfs/files/0.8.2-ZPOOL_IMPORT_UDEV_TIMEOUT_MS.patch
33 @@ -0,0 +1,68 @@
34 +From d7037d2a2fd57504070eba14634b8a7ea159de32 Mon Sep 17 00:00:00 2001
35 +From: Richard Yao <ryao@g.o>
36 +Date: Thu, 1 Aug 2019 15:54:30 -0400
37 +Subject: [PATCH] Implement ZPOOL_IMPORT_UDEV_TIMEOUT_MS
38 +
39 +Since 0.7.0, zpool import would unconditionally block on udev for 30
40 +seconds. This introduced a regression in initramfs environments that
41 +lack udev (particularly mdev based environments), yet use a zfs userland
42 +tools intended for the system that had been built against udev. Gentoo's
43 +genkernel is the main example, although custom user initramfs
44 +environments would be similarly impacted unless special builds of the
45 +ZFS userland utilities were done for them. Such environments already
46 +have their own mechanisms for blocking until device nodes are ready
47 +(such as genkernel's scandelay parameter), so it is unnecessary for
48 +zpool import to block on a non-existent udev until a timeout is reached
49 +inside of them.
50 +
51 +Rather than trying to intelligently determine whether udev is avaliable
52 +on the system to avoid unnecessarily blocking in such environments, it
53 +seems best to just allow the environment to override the timeout. I
54 +propose that we add an environment variable called
55 +ZPOOL_IMPORT_UDEV_TIMEOUT_MS. Setting it to 0 would restore the 0.6.x
56 +behavior that was more desireable in mdev based initramfs environments.
57 +This allows the system userland utilities to be reused when building
58 +mdev-based initramfs archives.
59 +
60 +Reviewed-by: Georgy Yakovlev <gyakovlev@g.o>
61 +Signed-off-by: Richard Yao <ryao@g.o>
62 +---
63 + lib/libzutil/zutil_import.c | 10 +++++++++-
64 + 1 file changed, 9 insertions(+), 1 deletion(-)
65 +
66 +diff --git a/lib/libzutil/zutil_import.c b/lib/libzutil/zutil_import.c
67 +index e82744383dc..8c4d8c5cb5c 100644
68 +--- a/lib/libzutil/zutil_import.c
69 ++++ b/lib/libzutil/zutil_import.c
70 +@@ -58,6 +58,7 @@
71 + #endif
72 + #include <stddef.h>
73 + #include <stdlib.h>
74 ++#include <stdio.h>
75 + #include <string.h>
76 + #include <sys/stat.h>
77 + #include <unistd.h>
78 +@@ -1653,15 +1654,22 @@ zpool_open_func(void *arg)
79 + char *devid = NULL;
80 + rdsk_node_t *slice;
81 + avl_index_t where;
82 ++ char *env;
83 ++ int timeout;
84 + int error;
85 +
86 + if (label_paths(rn->rn_hdl, rn->rn_config, &path, &devid))
87 + return;
88 +
89 ++ env = getenv("ZPOOL_IMPORT_UDEV_TIMEOUT_MS");
90 ++
91 ++ if ((env == NULL) || sscanf(env, "%d", &timeout) != 1)
92 ++ timeout = DISK_LABEL_WAIT;
93 ++
94 + /*
95 + * Allow devlinks to stabilize so all paths are available.
96 + */
97 +- zpool_label_disk_wait(rn->rn_name, DISK_LABEL_WAIT);
98 ++ zpool_label_disk_wait(rn->rn_name, timeout);
99 +
100 + if (path != NULL) {
101 + slice = zfs_alloc(hdl, sizeof (rdsk_node_t));
102
103 diff --git a/sys-fs/zfs/zfs-0.8.2.ebuild b/sys-fs/zfs/zfs-0.8.2.ebuild
104 new file mode 100644
105 index 00000000000..dd0ca35654d
106 --- /dev/null
107 +++ b/sys-fs/zfs/zfs-0.8.2.ebuild
108 @@ -0,0 +1,223 @@
109 +# Copyright 1999-2019 Gentoo Authors
110 +# Distributed under the terms of the GNU General Public License v2
111 +
112 +EAPI=7
113 +
114 +DISTUTILS_OPTIONAL=1
115 +PYTHON_COMPAT=( python{2_7,3_{5,6,7}} )
116 +
117 +inherit bash-completion-r1 flag-o-matic linux-info linux-mod distutils-r1 systemd toolchain-funcs udev usr-ldscript
118 +
119 +DESCRIPTION="Userland utilities for ZFS Linux kernel module"
120 +HOMEPAGE="https://zfsonlinux.org/"
121 +
122 +if [[ ${PV} == "9999" ]] ; then
123 + inherit autotools git-r3
124 + EGIT_REPO_URI="https://github.com/zfsonlinux/zfs.git"
125 +else
126 + SRC_URI="https://github.com/zfsonlinux/${PN}/releases/download/${P}/${P}.tar.gz"
127 + KEYWORDS="~amd64 ~arm64 ~ppc64"
128 +fi
129 +
130 +LICENSE="BSD-2 CDDL MIT"
131 +SLOT="0"
132 +IUSE="custom-cflags debug kernel-builtin libressl python +rootfs test-suite static-libs"
133 +
134 +DEPEND="
135 + ${PYTHON_DEPS}
136 + net-libs/libtirpc[static-libs?]
137 + sys-apps/util-linux[static-libs?]
138 + sys-libs/zlib[static-libs(+)?]
139 + virtual/awk
140 + virtual/libudev[static-libs?]
141 + libressl? ( dev-libs/libressl:0=[static-libs?] )
142 + !libressl? ( dev-libs/openssl:0=[static-libs?] )
143 + python? (
144 + virtual/python-cffi[${PYTHON_USEDEP}]
145 + )
146 +"
147 +
148 +BDEPEND="virtual/awk
149 + virtual/pkgconfig
150 + python? (
151 + dev-python/setuptools[${PYTHON_USEDEP}]
152 + )
153 +"
154 +
155 +RDEPEND="${DEPEND}
156 + !=sys-apps/grep-2.13*
157 + !kernel-builtin? ( ~sys-fs/zfs-kmod-${PV} )
158 + !sys-fs/zfs-fuse
159 + !prefix? ( virtual/udev )
160 + sys-fs/udev-init-scripts
161 + rootfs? (
162 + app-arch/cpio
163 + app-misc/pax-utils
164 + !<sys-boot/grub-2.00-r2:2
165 + !<sys-kernel/genkernel-3.5.1.1
166 + !<sys-kernel/genkernel-next-67
167 + !<sys-kernel/bliss-initramfs-7.1.0
168 + !<sys-kernel/dracut-044-r1
169 + )
170 + test-suite? (
171 + sys-apps/util-linux
172 + sys-devel/bc
173 + sys-block/parted
174 + sys-fs/lsscsi
175 + sys-fs/mdadm
176 + sys-process/procps
177 + virtual/modutils
178 + )
179 +"
180 +
181 +REQUIRED_USE="${PYTHON_REQUIRED_USE}"
182 +
183 +RESTRICT="test"
184 +
185 +PATCHES=(
186 + "${FILESDIR}/bash-completion-sudo.patch"
187 + "${FILESDIR}/0.8.2-ZPOOL_IMPORT_UDEV_TIMEOUT_MS.patch" # https://github.com/zfsonlinux/zfs/pull/9109
188 +)
189 +
190 +pkg_setup() {
191 + if use kernel_linux && use test-suite; then
192 + linux-info_pkg_setup
193 +
194 + if ! linux_config_exists; then
195 + ewarn "Cannot check the linux kernel configuration."
196 + else
197 + if use test-suite; then
198 + if linux_chkconfig_present BLK_DEV_LOOP; then
199 + eerror "The ZFS test suite requires loop device support enabled."
200 + eerror "Please enable it:"
201 + eerror " CONFIG_BLK_DEV_LOOP=y"
202 + eerror "in /usr/src/linux/.config or"
203 + eerror " Device Drivers --->"
204 + eerror " Block devices --->"
205 + eerror " [X] Loopback device support"
206 + fi
207 + fi
208 + fi
209 + fi
210 +}
211 +
212 +src_prepare() {
213 + default
214 +
215 + if [[ ${PV} == "9999" ]]; then
216 + eautoreconf
217 + else
218 + # Set revision number
219 + sed -i "s/\(Release:\)\(.*\)1/\1\2${PR}-gentoo/" META || die "Could not set Gentoo release"
220 + fi
221 +
222 + if use python; then
223 + pushd contrib/pyzfs >/dev/null || die
224 + distutils-r1_src_prepare
225 + popd >/dev/null || die
226 + fi
227 +
228 + # prevent errors showing up on zfs-mount stop, #647688
229 + # openrc will unmount all filesystems anyway.
230 + sed -i "/^ZFS_UNMOUNT=/ s/yes/no/" etc/init.d/zfs.in || die
231 +}
232 +
233 +src_configure() {
234 + use custom-cflags || strip-flags
235 +
236 + local myconf=(
237 + --bindir="${EPREFIX}/bin"
238 + --enable-shared
239 + --enable-systemd
240 + --enable-sysvinit
241 + --localstatedir="${EPREFIX}/var"
242 + --sbindir="${EPREFIX}/sbin"
243 + --with-config=user
244 + --with-dracutdir="${EPREFIX}/usr/lib/dracut"
245 + --with-linux="${KV_DIR}"
246 + --with-linux-obj="${KV_OUT_DIR}"
247 + --with-udevdir="$(get_udevdir)"
248 + --with-systemdunitdir="$(systemd_get_systemunitdir)"
249 + --with-systemdpresetdir="${EPREFIX}/lib/systemd/system-preset"
250 + $(use_enable debug)
251 + $(use_enable python pyzfs)
252 + $(use_enable static-libs static)
253 + )
254 +
255 + econf "${myconf[@]}"
256 +}
257 +
258 +src_compile() {
259 + default
260 + if use python; then
261 + pushd contrib/pyzfs >/dev/null || die
262 + distutils-r1_src_compile
263 + popd >/dev/null || die
264 + fi
265 +}
266 +
267 +src_install() {
268 + default
269 +
270 + gen_usr_ldscript -a uutil nvpair zpool zfs zfs_core
271 +
272 + use test-suite || rm -rf "${ED}/usr/share/zfs"
273 +
274 + if ! use static-libs; then
275 + find "${ED}/" -name '*.la' -delete || die
276 + fi
277 +
278 + dobashcomp contrib/bash_completion.d/zfs
279 + bashcomp_alias zfs zpool
280 +
281 + # strip executable bit from conf.d file
282 + fperms 0644 /etc/conf.d/zfs
283 +
284 + if use python; then
285 + pushd contrib/pyzfs >/dev/null || die
286 + distutils-r1_src_install
287 + popd >/dev/null || die
288 + fi
289 +
290 + # enforce best available python implementation
291 + python_setup
292 + python_fix_shebang "${ED}/bin"
293 +}
294 +
295 +pkg_postinst() {
296 + if use rootfs; then
297 + if ! has_version sys-kernel/genkernel && ! has_version sys-kernel/dracut; then
298 + elog "root on zfs requires initramfs to boot"
299 + elog "the following packages known to provide one and tested on regular basis:"
300 + elog " sys-kernel/dracut"
301 + elog " sys-kernel/genkernel"
302 + fi
303 +
304 + if has_version "<=sys-kernel/genkernel-3.5.3.3"; then
305 + einfo "genkernel version 3.5.3.3 and earlier does NOT support"
306 + einfo " unlocking pools with native zfs encryption enabled at boot"
307 + einfo " use dracut or >=genkernel-4 if you requre this functionality"
308 + fi
309 + fi
310 +
311 + if ! use kernel-builtin && [[ ${PV} = "9999" ]]; then
312 + einfo "Adding ${P} to the module database to ensure that the"
313 + einfo "kernel modules and userland utilities stay in sync."
314 + update_moduledb
315 + fi
316 +
317 + [[ -e "${EROOT}/etc/runlevels/boot/zfs-import" ]] || \
318 + einfo "You should add zfs-import to the boot runlevel."
319 + [[ -e "${EROOT}/etc/runlevels/boot/zfs-mount" ]]|| \
320 + einfo "You should add zfs-mount to the boot runlevel."
321 + [[ -e "${EROOT}/etc/runlevels/default/zfs-share" ]] || \
322 + einfo "You should add zfs-share to the default runlevel."
323 + [[ -e "${EROOT}/etc/runlevels/default/zfs-zed" ]] || \
324 + einfo "You should add zfs-zed to the default runlevel."
325 +}
326 +
327 +pkg_postrm() {
328 + if ! use kernel-builtin && [[ ${PV} == "9999" ]]; then
329 + remove_moduledb
330 + fi
331 +}