Date: Sat, 7 Jul 2018 22:40:26 +0200 From: Michael Grimm <trashcan@ellael.org> To: Mailing List FreeBSD Ports <freebsd-ports@FreeBSD.org> Cc: bdrewery@FreeBSD.org Subject: beadm-1.2.8: erroneous beadm create Message-ID: <5A4EB662-9562-47E4-A436-FAAAFFF524C6@ellael.org>
next in thread | raw e-mail | index | archive | help
Hi --
I happen to run a boot environment with two zfs filesystems without any =
zfs property defined that trigger an error with the latest beadm-1.2.8.
Example BE of mine:
zp0/ROOT/11r336056 13.5G 463M 95.1M 27.2G =
972M 2.15x /
zp0/ROOT/11r336056/_jails 672M 672M 0 1.09G =
1.09G 1.75x /usr/home/jails
zp0/ROOT/11r336056/usr 11.7G 6.42G 3.40G 24.2G =
13.7G 2.22x /usr
zp0/ROOT/11r336056/usr/local 321M 299M 21.8M 505M =
484M 1.77x /usr/local
zp0/ROOT/11r336056/usr/src 1.60G 1.51G 96.2M 2.91G =
2.82G 2.13x /usr/src
zp0/ROOT/11r336056/var 586M 577M 8.64M 779M =
764M 1.33x /var
Both zp0/ROOT/11r336056/usr/local and zp0/ROOT/11r336056/usr/src do not =
have any zfs property defined, thus the new beadm-1.2.8 will run into an =
error when trying to create a new BE:
root> beadm create B1
cannot create 'zp0/ROOT/B1/usr/local': invalid property ''
Ok, after adding some debugging code and a comparison with the previous =
version I found the cause:
root> ./beadm-1.2.8-patched create B1
zp0/ROOT/11r336056 | -o snapdir=3D"hidden" -o mountpoint=3D"/"
zp0/ROOT/11r336056 | -o mountpoint=3D"/usr/home/jails"
zp0/ROOT/11r336056 | -o snapdir=3D"hidden" -o setuid=3D"on" -o =
mountpoint=3D"/usr"
zp0/ROOT/11r336056 | -o =3D""
cannot create 'zp0/ROOT/B1/usr/local': invalid property ''
The previous version didn't trigger missing zfs properties because it =
doesn't add an empty string "" to '-o':
root> ./beadm-1.2.8-patched create B1
zp0/ROOT/11r336056 | -o snapdir=3Dhidden -o mountpoint=3D/
zp0/ROOT/11r336056 | -o mountpoint=3D/usr/home/jails
zp0/ROOT/11r336056 | -o snapdir=3Dhidden -o setuid=3Don -o =
mountpoint=3D/usr
zp0/ROOT/11r336056 | -o =3D
zp0/ROOT/11r336056 | -o mountpoint=3D/usr/src
zp0/ROOT/11r336056 | -o snapdir=3Dhidden -o mountpoint=3D/var
Created successfully
Workaround to me is the following patch (beadm-1.2.7 approach):
[snip]
root> diff -u beadm-1.2.8 beadm-1.2.8-patched
--- beadm-1.2.8 2018-07-07 16:17:19.231902000 +0200
+++ beadm-1.2.8-patched 2018-07-07 22:00:19.740611000 +0200
@@ -213,7 +213,7 @@
local OPTS=3D""
while read NAME PROPERTY VALUE
do
- local OPTS=3D"-o ${PROPERTY}=3D\"${VALUE}\" ${OPTS}"
+ local OPTS=3D"-o ${PROPERTY}=3D${VALUE} ${OPTS}"
done << EOF
$( zfs get -o name,property,value -s local,received -H all ${FS} | awk =
'!/[\t ]canmount[\t ]/' )
EOF
[snap]
Well, I do see the point of embedding variables with ", but I do also =
believe that checking for a null string and removing that resulting =E2=80=
=A6
-o =3D""
=E2=80=A6 before applying the final 'zfs clone' command with it would be =
a much better patch.=20
Regards,
Michael
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5A4EB662-9562-47E4-A436-FAAAFFF524C6>
