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="hidden" -o mountpoint="/"
        zp0/ROOT/11r336056  |  -o mountpoint="/usr/home/jails"
        zp0/ROOT/11r336056  |  -o snapdir="hidden" -o setuid="on" -o 
mountpoint="/usr"
        zp0/ROOT/11r336056  |  -o =""
        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=hidden -o mountpoint=/
        zp0/ROOT/11r336056  |  -o mountpoint=/usr/home/jails
        zp0/ROOT/11r336056  |  -o snapdir=hidden -o setuid=on -o mountpoint=/usr
        zp0/ROOT/11r336056  |  -o =
        zp0/ROOT/11r336056  |  -o mountpoint=/usr/src
        zp0/ROOT/11r336056  |  -o snapdir=hidden -o mountpoint=/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=""
         while read NAME PROPERTY VALUE
         do
-          local OPTS="-o ${PROPERTY}=\"${VALUE}\" ${OPTS}"
+          local OPTS="-o ${PROPERTY}=${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 …
        -o =""
… before applying the final 'zfs clone' command with it would be a much better 
patch. 

Regards,
Michael

_______________________________________________
freebsd-ports@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to