[Bug 202383] zfsboot
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Mon Aug 17 11:30:45 UTC 2015
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202383
Bug ID: 202383
Summary: zfsboot
Product: Base System
Version: 10.2-RELEASE
Hardware: i386
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: standards
Assignee: freebsd-standards at FreeBSD.org
Reporter: F.Ozhegov at yandex.ru
# uname -a
FreeBSD FreeBSD 10.2-RELEASE FreeBSD 10.2-RELEASE #0 r286666: Wed Aug 12
19:31:38 UTC 2015 root at releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC
i386
/usr/libexec/bsdinstall/zfsboot
f_isset()
{
eval [ \"\${${1%%[$IFS]*}+set}\" ] # eval [ "${ZFSBOOT_DATASETS+set}" ]
}
f_isset ZFSBOOT_DATASETS || ZFSBOOT_DATASETS="
...
"
It "keep it short and simple"?
ZFSBOOT_DATASETS= # null
f_isset ZFSBOOT_DATASETS && echo "It worked!" || echo "Error" # It worked!
I recommend do this option
if interactive zfs_create_dataset or ZFSBOOT_DATASETS="
...
"
zfs_create_datasets()
{
ZFSBOOT_DATASETS=
local zfs_create val
while [ 1 ]
do
echo "Add ZFS datasets? (yes/no)"
read val
[ -n "$val" ] || continue
if [ $val = "yes" ]; then
echo "enter ZFS datasets..."
echo "e.g.: /usr/src compression=lz4,exec=off,setuid=off"
# You can add help for options zfs
read zfs_create
if [ $zfs_create ]; then
ZFSBOOT_DATASETS="$ZFSBOOT_DATASETS
$zfs_create"
zfs_create=
else
f_show_err $msg_error
fi
continue
elif
[ $val = "no" ]; then
break
fi
done
}
Help available options zfs:
aclinherit discard | noallow | restricted | passthrough | passthrough-x
aclmode discard | groupmask | passthrough | restricted
atime on | off
canmount on | off | noauto
checksum on | off | fletcher2 | fletcher4 | sha256
compression on | off | lzjb | gzip | gzip-[1-9] | zle | lz4
copies 1 | 2 | 3
dedup on | off | verify | sha256[,verify]
devices on | off
exec on | off
jailed on | off
logbias latency | throughput
mlslabel <sensitivity label>
mountpoint <path> | legacy | none
nbmand on | off
primarycache all | none | metadata
quota <size> | none
readonly on | off
recordsize 512 to 128k, power of 2
refquota <size> | none
refreservation <size> | none
reservation <size> | none
secondarycache all | none | metadata
setuid on | off
sharenfs on | off | share(1M) options
sharesmb on | off | sharemgr(1M) options
snapdir hidden | visible
sync standard | always | disabled
version 1 | 2 | 3 | 4 | 5 | current
volsize <size>
vscan on | off
xattr on | off
userquota at ... <size> | none
groupquota at ... <size> | none
case "$ZFSBOOT_VDEV_TYPE" in
stripe) want_disks=1 ;;
mirror) want_disks=2 ;;
raidz1) want_disks=2 ;;
raidz2) want_disks=3 ;;
raidz3) want_disks=4 ;;
esac
For RAID-Z1 quite enough 2 disk devices.
For RAID-Z2 quite enough 3 disk devices.
For RAID-Z3 quite enough 4 disk devices.
invalid vdev specification: mirror requires at least 2 devices
invalid vdev specification: raidz requires at least 2 devices
invalid vdev specification: raidz2 requires at least 3 devices
invalid vdev specification: raidz3 requires at least 4 devices
f_eval_catch -d $funcname umount "$UMOUNT" /mnt
f_eval_catch -d $funcname umount "$UMOUNT" $BSDINSTALL_CHROOT # replacement
Not verification existence variable
if f_expand_number "$ZFSBOOT_SWAP_SIZE" swapsize &&
f_expand_number "$ZFSBOOT_BOOT_POOL_SIZE" bootsize
f_expand_number()
{
# echo $ZFSBOOT_SWAP_SIZE
## local var
# __string="$ZFSBOOT_SWAP_SIZE"
# echo $__string
## Remove any leading non-digits
# __cp="$__string"
# echo $__cp
# __string="${__cp#[!0-9]}"
# echo $__string
# [ "$__string" = "$__cp" ] && echo "It worked!"
It worked!
## Produce `-1' if string didn't contain any digits
# if [ ! "$__string" ]; then
> echo "It worked!"
> fi
It worked!
## Store the numbers
# __num="${__string%%[!0-9]*}"
## Shortcut
# [ $__num -eq 0 ] && echo "It worked!"
[: -eq: unexpected operator
## Determine if the wheels fall off
[ $__num -gt 1 ] && echo "It worked!"
[: -gt: unexpected operator
}
Decision
if [ -n "$ZFSBOOT_SWAP_SIZE" ] && [ -n "$ZFSBOOT_BOOT_POOL_SIZE" ]; then
if f_expand_number "$ZFSBOOT_SWAP_SIZE" swapsize &&
f_expand_number "$ZFSBOOT_BOOT_POOL_SIZE" bootsize
...
fi
else
[ -z "$ZFSBOOT_SWAP_SIZE" ] &&
f_show_err "$msg_invalid_swap_size" "$ZFSBOOT_SWAP_SIZE" &&
continue
[ -z "$ZFSBOOT_BOOT_POOL_SIZE" ] &&
f_show_err "$msg_invalid_boot_pool_size" "$ZFSBOOT_BOOT_POOL_SIZE" &&
continue
fi
Delete unnecessary:
f_dprintf "$funcname: Expanding supplied size values..."
if ! f_expand_number "$ZFSBOOT_SWAP_SIZE" swapsize; then
f_dprintf "$funcname: Invalid swap size \`%s'" \
"$ZFSBOOT_SWAP_SIZE"
f_show_err "$msg_invalid_swap_size" "$ZFSBOOT_SWAP_SIZE"
return $FAILURE
fi
if ! f_expand_number "$ZFSBOOT_BOOT_POOL_SIZE" bootsize; then
f_dprintf "$funcname: Invalid boot pool size \`%s'" \
"$ZFSBOOT_BOOT_POOL_SIZE"
f_show_err "$msg_invalid_boot_pool_size" \
"$ZFSBOOT_BOOT_POOL_SIZE"
return $FAILURE
fi
System is used all over the world.
f_dprintf "Pool name cannot be empty." # where i18n?
f_show_err "$msg_pool_name_cannot_be_empty"
msg_pool_name_cannot_be_empty="Pool name cannot be empty."
reiterate?
f_dprintf "No disk(s) present to configure" # unnecessary?
f_show_err "$msg_no_disks_present_to_configure"
msg_no_disks_present_to_configure="No disk(s) present to configure"
/usr/share/bsdconfig/dialog.subr
/usr/src/usr.sbin/bsdconfig/share/dialog.subr
Function f_dialog_line_sanitize () uses a non-existent
functionf_dialog_response_sanitize ?
# grep -R 'f_dialog_response_sanitize*(' /usr/
# empty result
f_dialog_line_sanitize()
{
if [ "$#" -eq 0 ]; then
f_dprintf "%s: called with zero arguments" \
f_dialog_response_sanitize # Use of undeclared
function f_dialog_response_sanitize?
return $FAILURE
fi
local __var_to_edit
for __var_to_edit in $*; do
# Skip warnings and trim leading/trailing whitespace
setvar $__var_to_edit "$( f_getvar $__var_to_edit | awk '
BEGIN { data = 0 }
{
if ( ! data )
{
if ( $0 ~ /^$/ ) next
if ( $0 ~ /^Gdk-WARNING \*\*:/ ) next
data = 1
}
sub(/^[[:space:]]*/, "")
sub(/[[:space:]]*$/, "")
print
}
' )"
done
}
/usr/share/bsdconfig/common.subr
/usr/src/usr.sbin/bsdconfig/share/common.subr
Function f_die() uses a non-existent function f_clean_up ?
# grep -R 'f_clean_up*(' /usr/
/usr/share/bsdconfig/common.subr: # Optionally call f_clean_up() function
if it exists
/usr/src/usr.sbin/bsdconfig/share/common.subr: # Optionally call f_clean_up()
function if it exists
f_die()
{
local status=$FAILURE
# If there is at least one argument, take it as the status
if [ $# -gt 0 ]; then
status=$1
shift 1
fi
# If there are still arguments left, pass them to f_show_msg
[ $# -gt 0 ] && f_show_msg "$@"
# Optionally call f_clean_up() function if it exists
f_have f_clean_up && f_clean_up # Optionally the use of undeclared
function f_clean_up without testing?
exit $status
}
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-standards
mailing list