Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Oct 2013 23:20:00 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-sysinstall@FreeBSD.org
Subject:   Re: bin/161547: commit references a PR
Message-ID:  <201310112320.r9BNK01g065043@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/161547; it has been noted by GNATS.

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/161547: commit references a PR
Date: Fri, 11 Oct 2013 23:12:16 +0000 (UTC)

 Author: dteske
 Date: Fri Oct 11 23:12:05 2013
 New Revision: 256361
 URL: http://svnweb.freebsd.org/changeset/base/256361
 
 Log:
   MFC revisions 256321-256323,256331,256333,256335,256343:
   Bring in a new zfsboot auto script for performing automatic setup of a boot
   pool (optionally encrypted) with many other options, validations, features.
   Originally submitted by Allan Jude; modified in collaboration.
   
   MFC revisions 256325,256330,256345:
   Rewrite the keymap selection menu to display keymaps and provide a test
   mechanism. Test mechanism originally submitted by Warren Block; modified.
   
   MFC r256347:
   Prominently display "Wireless" for each wireless network interface. Part
   of PR bin/161547; submitted by Warren Block; slightly modified.
   
   MFC r256348:
   Remove the dumpdev configuration dialog, merge it into the regular
   services configuration and enable it by default. Originally submitted by
   Allan Jude; slightly modified.
   
   PR:		bin/161547
   Submitted by:	Allan Jude, Warren Block <wblock@wonkity.com>
   In collaboration with:	Allan Jude <freebsd@allanjude.com>
   Approved by:	re (glebius)
 
 Added:
   stable/10/usr.sbin/bsdconfig/share/keymap.subr
      - copied unchanged from r256325, head/usr.sbin/bsdconfig/share/keymap.subr
   stable/10/usr.sbin/bsdinstall/scripts/zfsboot
      - copied unchanged from r256343, head/usr.sbin/bsdinstall/scripts/zfsboot
 Modified:
   stable/10/usr.sbin/bsdconfig/include/messages.subr
   stable/10/usr.sbin/bsdconfig/share/Makefile
   stable/10/usr.sbin/bsdconfig/share/device.subr
   stable/10/usr.sbin/bsdconfig/share/dialog.subr
   stable/10/usr.sbin/bsdconfig/share/strings.subr
   stable/10/usr.sbin/bsdconfig/share/variable.subr
   stable/10/usr.sbin/bsdinstall/bsdinstall
   stable/10/usr.sbin/bsdinstall/scripts/Makefile
   stable/10/usr.sbin/bsdinstall/scripts/auto
   stable/10/usr.sbin/bsdinstall/scripts/config
   stable/10/usr.sbin/bsdinstall/scripts/keymap
   stable/10/usr.sbin/bsdinstall/scripts/netconfig
   stable/10/usr.sbin/bsdinstall/scripts/services
 Directory Properties:
   stable/10/usr.sbin/bsdconfig/   (props changed)
   stable/10/usr.sbin/bsdinstall/   (props changed)
 
 Modified: stable/10/usr.sbin/bsdconfig/include/messages.subr
 ==============================================================================
 --- stable/10/usr.sbin/bsdconfig/include/messages.subr	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdconfig/include/messages.subr	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -201,6 +201,7 @@ msg_lithuania="Lithuania"
  msg_loading_of_dependent_package_failed="Loading of dependent package %s failed"
  msg_located_index_now_reading_package_data_from_it="Located INDEX, now reading package data from it..."
  msg_logging_in_to_user_at_host="Logging in to %s@%s.."
 +msg_looking_for_keymap_files="Looking for keymap files..."
  msg_looking_up_host="Looking up host %s"
  msg_mail_desc="Electronic mail packages and utilities."
  msg_main_menu="Main Menu"
 
 Modified: stable/10/usr.sbin/bsdconfig/share/Makefile
 ==============================================================================
 --- stable/10/usr.sbin/bsdconfig/share/Makefile	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdconfig/share/Makefile	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -5,8 +5,9 @@ NO_OBJ=
  SUBDIR=	media packages
  
  FILESDIR=	${SHAREDIR}/bsdconfig
 -FILES=		common.subr device.subr dialog.subr mustberoot.subr \
 -		script.subr strings.subr struct.subr sysrc.subr variable.subr
 +FILES=		common.subr device.subr dialog.subr keymap.subr \
 +		mustberoot.subr script.subr strings.subr struct.subr \
 +		sysrc.subr variable.subr
  
  beforeinstall:
  	mkdir -p ${DESTDIR}${FILESDIR}
 
 Modified: stable/10/usr.sbin/bsdconfig/share/device.subr
 ==============================================================================
 --- stable/10/usr.sbin/bsdconfig/share/device.subr	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdconfig/share/device.subr	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -49,6 +49,7 @@ f_struct_define DEVICE \
  	desc		\
  	devname		\
  	type		\
 +	capacity	\
  	enabled		\
  	init		\
  	get		\
 @@ -114,7 +115,7 @@ f_device_try()
  }
  
  # f_device_register $name $desc $devname $type $enabled $init_function \
 -#                   $get_function $shutdown_function $private
 +#                   $get_function $shutdown_function $private $capacity
  #
  # Register a device. A `structure' (see struct.subr) is created with the name
  # device_$name (so make sure $name contains only alpha-numeric characters or
 @@ -128,6 +129,7 @@ f_device_register()
  {
  	local name="$1" desc="$2" devname="$3" type="$4" enabled="$5"
  	local init_func="$6" get_func="$7" shutdown_func="$8" private="$9"
 +	local capacity="${10}"
  
  	f_struct_new DEVICE "device_$name" || return $FAILURE
  	device_$name set name     "$name"
 @@ -139,6 +141,7 @@ f_device_register()
  	device_$name set get      "$get_func"
  	device_$name set shutdown "$shutdown_func"
  	device_$name set private  "$private"
 +	device_$name set capacity "$capacity"
  
  	# Scan our global register to see if it needs ammending
  	local dev found=
 @@ -196,7 +199,7 @@ f_device_get_all()
  		f_dprintf "Found a network device named %s" "$devname"
  		f_device_register $devname \
  			"$desc" "$devname" $DEVICE_TYPE_NETWORK 1 \
 -			f_media_init_network "" f_media_shutdown_network ""
 +			f_media_init_network "" f_media_shutdown_network "" -1
  	done
  
  	# Next, try to find all the types of devices one might use
 @@ -208,6 +211,10 @@ f_device_get_all()
  		n=$(( $n + 1 ))
  		# Get the desc, type, and max (with debugging disabled)
  		# NOTE: Bypassing f_device_name_get() for efficiency
 +		# ASIDE: This would be equivalent to the following:
 +		# 	debug= f_device_name_get $dev desc
 +		# 	debug= f_device_name_get $dev type
 +		# 	debug= f_device_name_get $dev max
  		debug= f_getvar _device_desc$n desc
  		debug= f_getvar _device_type$n type
  		debug= f_getvar _device_max$n max
 @@ -222,7 +229,8 @@ f_device_get_all()
  				f_device_register "${devname##*/}" "$desc" \
  					"$devname" $DEVICE_TYPE_CDROM 1 \
  					f_media_init_cdrom f_media_get_cdrom \
 -					f_media_shutdown_cdrom ""
 +					f_media_shutdown_cdrom "" \
 +					"$( f_device_capacity "$devname" )"
  				f_dprintf "Found a CDROM device for %s" \
  				          "$devname"
  				;;
 @@ -232,7 +240,8 @@ f_device_get_all()
  					"$devname" $DEVICE_TYPE_FLOPPY 1 \
  					f_media_init_floppy \
  					f_media_get_floppy \
 -					f_media_shutdown_floppy ""
 +					f_media_shutdown_floppy "" \
 +					"$( f_device_capacity "$devname" )"
  				f_dprintf "Found a floppy device for %s" \
  				          "$devname"
  				;;
 @@ -241,7 +250,8 @@ f_device_get_all()
  				f_device_register "${devname##*/}" "$desc" \
  					"$devname" $DEVICE_TYPE_USB 1 \
  					f_media_init_usb f_media_get_usb \
 -					f_media_shutdown_usb ""
 +					f_media_shutdown_usb "" \
 +					"$( f_device_capacity "$devname" )"
  				f_dprintf "Found a USB disk for %s" "$devname"
  				;;
  			esac
 @@ -254,7 +264,8 @@ f_device_get_all()
  		f_device_register "${devname##*/}" "ISO9660 file system" \
  			"$devname" $DEVICE_TYPE_CDROM 1 \
  			f_media_init_cdrom f_media_get_cdrom \
 -			f_media_shutdown_cdrom ""
 +			f_media_shutdown_cdrom "" \
 +			"$( f_device_capacity "$devname" )"
  		f_dprintf "Found a CDROM device for %s" "$devname"
  	done
  
 @@ -281,7 +292,8 @@ f_device_get_all()
  				"md(4) vnode file system" \
  				"$devname" $DEVICE_TYPE_CDROM 1 \
  				f_media_init_cdrom f_media_get_cdrom \
 -				f_media_shutdown_cdrom ""
 +				f_media_shutdown_cdrom "" \
 +				"$( f_device_capacity "$devname" )"
  			f_dprintf "Found a CDROM device for %s" "$devname"
  			;;
  		esac
 @@ -313,8 +325,13 @@ f_device_get_all()
  			continue
  		fi
  
 -		f_device_register "$diskname" "" \
 -		                  "/dev/$diskname" $DEVICE_TYPE_DISK 0
 +		# Try and find its description
 +		f_device_desc "$diskname" $DEVICE_TYPE_DISK desc
 +
 +		f_device_register "$diskname" "$desc" \
 +		                  "/dev/$diskname" $DEVICE_TYPE_DISK 0 \
 +		                  "" "" "" "" \
 +		                  "$( f_device_capacity "$diskname" )"
  		f_dprintf "Found a disk device named %s" "$diskname"
  
  		# Look for existing partitions to register
 @@ -327,7 +344,8 @@ f_device_get_all()
  				f_device_register "$slice" "" \
  					"/dev/$slice" $DEVICE_TYPE_DOS 1 \
  					f_media_init_dos f_media_get_dos \
 -					f_media_shutdown_dos ""
 +					f_media_shutdown_dos "" \
 +					"$( f_device_capacity "/dev/$slice" )"
  				f_dprintf "Found a DOS partition %s" "$slice"
  				;;
  			0xa5) # FreeBSD partition
 @@ -347,7 +365,9 @@ f_device_get_all()
  						$DEVICE_TYPE_UFS 1 \
  						f_media_init_ufs \
  						f_media_get_ufs \
 -						f_media_shutdown_ufs ""
 +						f_media_shutdown_ufs "" \
 +						"$( f_device_capacity \
 +							"$/dev/$part" )"
  					f_dprintf "Found a UFS partition %s" \
  					          "$part"
  				done # parts
 @@ -379,10 +399,27 @@ f_device_name_get()
  	case "$__prop" in type|desc|max) : good ;;
  	*) return $FAILURE; esac
  
 +	#
 +	# Attempt to create an alternate-form of $__name that contains the
 +	# first contiguous string of numbers replaced with `%d' for comparison
 +	# against stored pattern names (see MAIN).
 +	#
 +	local __left="${__name%%[0-9]*}" __right="${__name#*[0-9]}" __dname=
 +	if [ "$__left" != "$__name" ]; then
 +		# Chop leading digits from right 'til we hit first non-digit
 +		while :; do
 +			case "$__right" in
 +			[0-9]*) __right="${__right#[0-9]}" ;;
 +			     *) break
 +			esac
 +		done
 +		__dname="${__left}%d$__right"
 +	fi
 +
  	[ "$__type" = "$DEVICE_TYPE_ANY" ] && __type=
  	for __dev in $DEVICE_NAMES; do
  		__n=$(( $__n + 1 ))
 -		[ "$__dev" = "$__name" ] || continue
 +		[ "$__dev" = "$__name" -o "$__dev" = "$__dname" ] || continue
  		f_getvar _device_type$__n __devtype
  		[ "${__type:-$__devtype}" = "$__devtype" ] || continue
  		f_getvar _device_$__prop$__n $__var_to_set
 @@ -463,6 +500,39 @@ f_device_desc()
  		fi
  	fi
  
 +	#
 +	# For disks, attempt to return camcontrol(8) descriptions.
 +	# Otherwise fall through to below static list.
 +	#
 +	f_have camcontrol &&
 +	[ "${__type:-$DEVICE_TYPE_DISK}" = "$DEVICE_TYPE_DISK" ] &&
 +	__cp=$( camcontrol devlist 2> /dev/null | awk -v disk="$__name" '
 +		$0~"(\\(|,)"disk"(,|\\))" {
 +			if (!match($0, "<[^>]+>")) next
 +			print substr($0, RSTART+1, RLENGTH-2)
 +			found = 1
 +			exit
 +		}
 +		END { exit ! found }
 +	' ) && setvar "$__var_to_set" "$__cp" && return $SUCCESS
 +
 +	#
 +	# Attempt to create an alternate-form of $__name that contains the
 +	# first contiguous string of numbers replaced with `%d' for comparison
 +	# against stored pattern names (see MAIN).
 +	#
 +	local __left="${__name%%[0-9]*}" __right="${__name#*[0-9]}" __dname=
 +	if [ "$__left" != "$__name" ]; then
 +		# Chop leading digits from right 'til we hit first non-digit
 +		while :; do
 +			case "$__right" in
 +			[0-9]*) __right="${__right#[0-9]}" ;;
 +			     *) break
 +			esac
 +		done
 +		__dname="${__left}%d$__right"
 +	fi
 +
  	local __dev __devtype __n=0
  	for __dev in $DEVICE_NAMES; do
  		__n=$(( $__n + 1 ))
 @@ -472,11 +542,8 @@ f_device_desc()
  			__devname=$( f_substr "$__name" 0 ${#__dev} )
  			[ "$__devname" = "$__dev" ] || continue
  		else
 -			__devname="${__name%%[0-9]*}"
 -			__devunit="${__name#$__devname}"
 -			__devunit="${__devunit%%[!0-9]*}"
 -			__devname=$( printf "$__dev" $__devunit )
 -			[ "$__devname" = "$__name" ] || continue
 +			[ "$__dev" = "$__name" -o "$__dev" = "$__dname" ] ||
 +				continue
  		fi
  		debug= f_getvar _device_desc$__n $__var_to_set
  		return $?
 @@ -655,6 +722,25 @@ f_device_menu()
  	return $retval
  }
  
 +# f_device_capacity $device [$var_to_set]
 +#
 +# Return the capacity of $device in bytes.
 +#
 +f_device_capacity()
 +{
 +	local __dev="$1" __var_to_set="$2"
 +	local __bytes
 +
 +	__bytes=$( diskinfo -v "$__dev" 2> /dev/null |
 +		awk '/# mediasize in bytes/{print $1}' ) || __bytes=-1
 +
 +	if [ "$__var_to_set" ]; then
 +		setvar "$__var_to_set" "$__bytes"
 +	else
 +		echo "$__bytes"
 +	fi
 +}
 +
  #
  # Short-hand
  #
 @@ -680,6 +766,7 @@ f_disk   "ipsd%d" "IBM ServeRAID RAID ar
  f_disk   "mfid%d" "LSI MegaRAID SAS array"            4
  f_disk   "mlxd%d" "Mylex RAID disk"                   4
  f_disk   "twed%d" "3ware ATA RAID array"              4
 +f_disk   "vtbd%d" "VirtIO Block Device"               16
  f_floppy "fd%d"   "Floppy Drive unit A"               4
  f_serial "cuau%d" "%s on device %s (COM%d)"           16
  f_usb    "da%da"  "USB Mass Storage Device"           16
 
 Modified: stable/10/usr.sbin/bsdconfig/share/dialog.subr
 ==============================================================================
 --- stable/10/usr.sbin/bsdconfig/share/dialog.subr	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdconfig/share/dialog.subr	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -415,8 +415,8 @@ f_dialog_size_constrain()
  
  	if [ "$debug" ]; then
  		# Print final constrained values to debugging
 -		f_quietly f_getvar "$__var_height"
 -		f_quietly f_getvar "$__var_width"
 +		[ "$__var_height" ] && f_quietly f_getvar "$__var_height"
 +		[ "$__var_width"  ] && f_quietly f_getvar "$__var_width"
  	fi
  
  	return $__retval # success if no debug warnings were printed
 @@ -532,10 +532,10 @@ f_dialog_menu_constrain()
  	fi
  
  	if [ "$debug" ]; then
 -		# Print final constrained values to debuggin
 -		f_quietly f_getvar "$__var_height"
 -		f_quietly f_getvar "$__var_width"
 -		f_quietly f_getvar "$__var_rows"
 +		# Print final constrained values to debugging
 +		[ "$__var_height" ] && f_quietly f_getvar "$__var_height"
 +		[ "$__var_width"  ] && f_quietly f_getvar "$__var_width"
 +		[ "$__var_rows"   ] && f_quietly f_getvar "$__var_rows"
  	fi
  
  	return $__retval # success if no debug warnings were printed
 @@ -2044,6 +2044,7 @@ f_dialog_menutag2index_with_help()
  f_dialog_init()
  {
  	DIALOG_SELF_INITIALIZE=
 +	USE_DIALOG=1
  
  	#
  	# Clone terminal stdout so we can redirect to it from within sub-shells
 @@ -2087,7 +2088,7 @@ f_dialog_init()
  	#
  	# Process `-X' command-line option
  	#
 -	[ "$USE_XDIALOG" ] && DIALOG=Xdialog
 +	[ "$USE_XDIALOG" ] && DIALOG=Xdialog USE_DIALOG=
  
  	#
  	# Sanity check, or die gracefully
 
 Copied: stable/10/usr.sbin/bsdconfig/share/keymap.subr (from r256325, head/usr.sbin/bsdconfig/share/keymap.subr)
 ==============================================================================
 --- /dev/null	00:00:00 1970	(empty, because file is newly added)
 +++ stable/10/usr.sbin/bsdconfig/share/keymap.subr	Fri Oct 11 23:12:05 2013	(r256361, copy of r256325, head/usr.sbin/bsdconfig/share/keymap.subr)
 @@ -0,0 +1,262 @@
 +if [ ! "$_KEYMAP_SUBR" ]; then _KEYMAP_SUBR=1
 +#
 +# Copyright (c) 2013 Devin Teske
 +# All rights reserved.
 +#
 +# Redistribution and use in source and binary forms, with or without
 +# modification, are permitted provided that the following conditions
 +# are met:
 +# 1. Redistributions of source code must retain the above copyright
 +#    notice, this list of conditions and the following disclaimer.
 +# 2. Redistributions in binary form must reproduce the above copyright
 +#    notice, this list of conditions and the following disclaimer in the
 +#    documentation and/or other materials provided with the distribution.
 +#
 +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 +# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 +# SUCH DAMAGE.
 +#
 +# $FreeBSD$
 +#
 +############################################################ INCLUDES
 +
 +BSDCFG_SHARE="/usr/share/bsdconfig"
 +. $BSDCFG_SHARE/common.subr || exit 1
 +f_dprintf "%s: loading includes..." keymap.subr
 +f_include $BSDCFG_SHARE/struct.subr
 +
 +############################################################ CONFIGURATION
 +
 +#
 +# Defaults taken from usr.sbin/kbdmap/kbdmap.h
 +#
 +: ${DEFAULT_LANG:=en}
 +: ${DEFAULT_KEYMAP_DIR:=/usr/share/syscons/keymaps}
 +
 +############################################################ GLOBALS
 +
 +KEYMAPS=
 +
 +# A "keymap" from kbdmap's point of view
 +f_struct_define KEYMAP \
 +	desc \
 +	keym \
 +	mark
 +
 +#
 +# Default behavior is to call f_keymap_get_all() automatically when loaded.
 +#
 +: ${KEYMAP_SELF_SCAN_ALL=1}
 +
 +############################################################ FUNCTIONS
 +
 +# f_keymap_register $name $desc $keym $mark
 +#
 +# Register a keymap. A `structure' (see struct.subr) is created with the name
 +# keymap_$name (so make sure $name contains only alpha-numeric characters or
 +# the underscore, `_'). The remaining arguments after $name correspond to the
 +# propertise of the `KEYMAP' structure-type (defined above).
 +#
 +# If not already registered, the keymap is then appended to the KEYMAPS
 +# environment variable, a space-separated list of all registered keymaps.
 +#
 +f_keymap_register()
 +{
 +	local name="$1" desc="$2" keym="$3" mark="$4"
 +
 +	f_struct_new KEYMAP "keymap_$name" || return $FAILURE
 +	keymap_$name set desc "$desc"
 +	keymap_$name set keym "$keym"
 +	keymap_$name set mark "$mark"
 +
 +	# Scan our global register to see if needs ammending
 +	local k found=
 +	for k in $KEYMAPS; do
 +		[ "$k" = "$name" ] || continue
 +		found=1 && break
 +	done
 +	[ "$found" ] || KEYMAPS="$KEYMAPS $name"
 +
 +	return $SUCCESS
 +}
 +
 +# f_keymap_checkfile $keymap
 +#
 +# Check that $keymap is a readable kbdmap(5) file. Returns success if $keymap
 +# is a file, is readable, and exists in $DEFAULT_KEYMAP_DIR; otherwise failure.
 +# If debugging is enabled, an appropriate debug error message is printed if
 +# $keymap is not available.
 +#
 +f_keymap_checkfile()
 +{
 +	local keym="$1"
 +	
 +	# Fixup keymap if it doesn't already contain at least one `/'
 +	[ "${keym#*/}" = "$keym" ] && keym="$DEFAULT_KEYMAP_DIR/$keym"
 +
 +	# Short-cuts
 +	[ -f "$keym" -a -r "$keym" ] && return $SUCCESS
 +	f_debugging || return $FAILURE
 +
 +	# Print an appropriate debug error message
 +	if [ ! -e "$keym" ]; then
 +		f_dprintf "%s: No such file or directory" "$keym"
 +	elif [ ! -f "$keym" ]; then
 +		f_dprintf "%s: Not a file!" "$keym"
 +	elif [ ! -r "$keym" ]; then
 +		f_dprintf "%s: Permission denied" "$keym"
 +	fi
 +
 +	return $FAILURE
 +}
 +
 +# f_keymap_get_all
 +#
 +# Get all keymap information for kbdmap(5) entries both in the database and
 +# loosely existing in $DEFAULT_KEYMAP_DIR.
 +#
 +f_keymap_get_all()
 +{
 +	local fname=f_keymap_get_all
 +	local lang="${LC_ALL:-${LC_CTYPE:-${LANG:-$DEFAULT_LANG}}}"
 +	[ "$lang" = "C" ] && lang="$DEFAULT_LANG"
 +
 +	f_dprintf "%s: Looking for keymap files..." $fname
 +	f_dialog_info "$msg_looking_for_keymap_files"
 +	f_dprintf "DEFAULT_LANG=[%s]" "$DEFAULT_LANG"
 +
 +	eval "$( awk -F: -v lang="$lang" -v lang_default="$DEFAULT_LANG" '
 +		BEGIN {
 +			# en_US.ISO8859-1 -> en_..\.ISO8859-1
 +			dialect = lang
 +			if (length(dialect) >= 6 &&
 +			    substr(dialect, 3, 1) == "_")
 +				dialect = substr(dialect, 1, 3) ".." \
 +				          substr(dialect, 6)
 +			printf "f_dprintf \"dialect=[%%s]\" \"%s\";\n", dialect
 +
 +			# en_US.ISO8859-1 -> en
 +			lang_abk = lang
 +			if (length(lang_abk) >= 3 &&
 +			    substr(lang_abk, 3, 1) == "_")
 +				lang_abk = substr(lang_abk, 1, 2)
 +			printf "f_dprintf \"lang_abk=[%%s]\" \"%s\";\n",
 +			       lang_abk
 +		}
 +		function find_token(buffer, token)
 +		{
 +			if (split(buffer, tokens, /,/) == 0) return 0
 +			found = 0
 +			for (t in tokens)
 +				if (token == tokens[t]) { found = 1; break }
 +			return found
 +		}
 +		function add_keymap(desc,mark,keym)
 +		{
 +			marks[keym] = mark
 +			name = keym
 +			gsub(/[^[:alnum:]_]/, "_", name)
 +			gsub(/'\''/, "'\''\\'\'''\''", desc);
 +			printf "f_keymap_checkfile %s && " \
 +			       "f_keymap_register %s '\'%s\'' %s %u\n",
 +			       keym, name, desc, keym, mark
 +		}
 +		!/^[[:space:]]*(#|$)/ {
 +			sub(/^[[:space:]]*/, "", $0)
 +			keym = $1
 +			if (keym ~ /^(MENU|FONT)$/) next
 +			lg = ($2 == "" ? lang_default : $2)
 +
 +			# Match the entry and store the type of match we made
 +			# as the mark value (so that if we make a better match
 +			# later on with a higher mark, it overwrites previous)
 +
 +			mark = marks[keym];
 +			if (find_token(lg, lang))
 +				add_keymap($3, 4, keym) # Best match
 +			else if (mark <= 3 && find_token(lg, dialect))
 +				add_keymap($3, 3, keym)
 +			else if (mark <= 2 && find_token(lg, lang_abk))
 +				add_keymap($3, 2, keym)
 +			else if (mark <= 1 && find_token(lg, lang_default))
 +				add_keymap($3, 1, keym)
 +			else if (mark <= 0)
 +				add_keymap($3, 0, keym)
 +		}
 +	' "$DEFAULT_KEYMAP_DIR/INDEX.${DEFAULT_KEYMAP_DIR##*/}" )"
 +
 +
 +	#
 +	# Look for keymaps not in database
 +	#
 +	local direntry keym name
 +	set +f # glob
 +	for direntry in "$DEFAULT_KEYMAP_DIR"/*; do
 +		[ "${direntry##*.}" = ".kbd" ] || continue
 +		keym="${direntry##*/}"
 +		f_str2varname "$keym" name
 +		f_struct keymap_$name && continue
 +		f_keymap_checkfile "$keym" &&
 +			f_keymap_register $name "${keym%.*}" "$keym" 0
 +		f_dprintf "%s: not in kbdmap(5) database" "$keym"
 +	done
 +
 +	#
 +	# Sort the items by their descriptions
 +	#
 +	f_dprintf "%s: Sorting keymap entries by description..." $fname
 +	KEYMAPS=$(
 +		for k in $KEYMAPS; do
 +			echo -n "$k "
 +			# NOTE: Translate '8x8' to '8x08' before sending to
 +			# sort(1) so that things work out as we might expect.
 +			debug= keymap_$k get desc | sed -e 's/8x8/8x08/g'
 +		done | sort -k2 | awk '{
 +			printf "%s%s", (started ? " " : ""), $1; started = 1
 +		}'
 +	)
 +
 +	return $SUCCESS
 +}
 +
 +# f_keymap_kbdcontrol $keymap
 +#
 +# Install keyboard map file from $keymap.
 +#
 +f_keymap_kbdcontrol()
 +{
 +	local keymap="$1"
 +
 +	[ "$keymap" ] || return $SUCCESS
 +
 +	# Fixup keymap if it doesn't already contain at least one `/'
 +	[ "${keymap#*/}" = "$keymap" ] && keymap="$DEFAULT_KEYMAP_DIR/$keymap"
 +
 +	[ "$USE_XDIALOG" ] || kbdcontrol -l "$keymap"
 +}
 +
 +############################################################ MAIN
 +
 +#
 +# Scan for keymaps unless requeted otherwise
 +#
 +f_dprintf "%s: KEYMAP_SELF_SCAN_ALL=[%s]" keymap.subr "$KEYMAP_SELF_SCAN_ALL"
 +case "$KEYMAP_SELF_SCAN_ALL" in
 +""|0|[Nn][Oo]|[Oo][Ff][Ff]|[Ff][Aa][Ll][Ss][Ee]) : do nothing ;;
 +*) f_keymap_get_all
 +esac
 +
 +f_dprintf "%s: Found %u keymap file(s)." keymap.subr \
 +          "$( set -- $KEYMAPS; echo $# )"
 +
 +f_dprintf "%s: Successfully loaded." keymap.subr
 +
 +fi # ! $_KEYMAP_SUBR
 
 Modified: stable/10/usr.sbin/bsdconfig/share/strings.subr
 ==============================================================================
 --- stable/10/usr.sbin/bsdconfig/share/strings.subr	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdconfig/share/strings.subr	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -26,6 +26,11 @@ if [ ! "$_STRINGS_SUBR" ]; then _STRINGS
  #
  # $FreeBSD$
  #
 +############################################################ INCLUDES
 +
 +BSDCFG_SHARE="/usr/share/bsdconfig"
 +. $BSDCFG_SHARE/common.subr || exit 1
 +
  ############################################################ GLOBALS
  
  #
 @@ -319,6 +324,112 @@ f_shell_unescape()
  	f_replaceall "$__string" "'\\''" "'" "$__var_to_set"
  }
  
 +# f_expand_number $string [$var_to_set]
 +#
 +# Unformat $string into a number, optionally to be stored in $var_to_set. This
 +# function follows the SI power of two convention.
 +#
 +# The prefixes are:
 +#
 +# 	Prefix	Description	Multiplier
 +# 	k	kilo		1024
 +# 	M	mega		1048576
 +# 	G	giga		1073741824
 +# 	T	tera		1099511627776
 +# 	P	peta		1125899906842624
 +# 	E	exa		1152921504606846976
 +#
 +# NOTE: Prefixes are case-insensitive.
 +#
 +# Upon successful completion, the value 0 is returned (or stored to
 +# $var_to_set); otherwise -1. Reasons for a -1 return include:
 +#
 +# 	Given $string contains no digits.
 +# 	An unrecognized prefix was given.
 +# 	Result too large to calculate.
 +#
 +f_expand_number()
 +{
 +	local __string="$1" __var_to_set="$2"
 +	local __cp __num
 +
 +	# Remove any leading non-digits
 +	while :; do
 +		__cp="$__string"
 +		__string="${__cp#[!0-9]}"
 +		[ "$__string" = "$__cp" ] && break
 +	done
 +
 +	# Return `-1' if string didn't contain any digits
 +	if [ ! "$__string" ]; then
 +		if [ "$__var_to_set" ]; then
 +			setvar "$__var_to_set" -1
 +		else
 +			echo -1
 +		fi
 +		return $FAILURE
 +	fi
 +
 +	# Store the numbers
 +	__num="${__string%%[!0-9]*}"
 +
 +	# Shortcut
 +	if [ $__num -eq 0 ]; then
 +		if [ "$__var_to_set" ]; then
 +			setvar "$__var_to_set" 0
 +		else
 +			echo 0
 +		fi
 +		return $SUCCESS
 +	fi
 +
 +	# Remove all the leading numbers from the string to get at the prefix
 +	while :; do
 +		__cp="$__string"
 +		__string="${__cp#[0-9]}"
 +		[ "$__string" = "$__cp" ] && break
 +	done
 +
 +	# Test for invalid prefix
 +	case "$__string" in
 +	""|[KkMmGgTtPpEe]*) : known prefix ;;
 +	*)
 +		# Unknown prefix
 +		if [ "$__var_to_set" ]; then
 +			setvar "$__var_to_set" -1
 +		else
 +			echo -1
 +		fi
 +		return $FAILURE
 +	esac
 +
 +	# Multiply the number out
 +	case "$__string" in
 +	[Kk]) __num=$(( $__num * 1024 )) ;;
 +	[Mm]) __num=$(( $__num * 1048576 )) ;;
 +	[Gg]) __num=$(( $__num * 1073741824 )) ;;
 +	[Tt]) __num=$(( $__num * 1099511627776 )) ;;
 +	[Pp]) __num=$(( $__num * 1125899906842624 )) ;;
 +	[Ee]) __num=$(( $__num * 1152921504606846976 )) ;;
 +	esac
 +	if [ $__num -le 0 ]; then
 +		# Arithmetic overflow
 +		if [ "$__var_to_set" ]; then
 +			setvar "$__var_to_set" -1
 +		else
 +			echo -1
 +		fi
 +		return $FAILURE
 +	fi
 +
 +	# Return the number
 +	if [ "$__var_to_set" ]; then
 +		setvar "$__var_to_set" $__num
 +	else
 +		echo $__num
 +	fi
 +}
 +
  ############################################################ MAIN
  
  f_dprintf "%s: Successfully loaded." strings.subr
 
 Modified: stable/10/usr.sbin/bsdconfig/share/variable.subr
 ==============================================================================
 --- stable/10/usr.sbin/bsdconfig/share/variable.subr	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdconfig/share/variable.subr	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -205,6 +205,21 @@ f_netinteractive()
  	f_getvar $VAR_NETINTERACTIVE value && [ "$value" ]
  }
  
 +# f_zfsinteractive()
 +#
 +# Has the user specifically requested the ZFS-portion of configuration and
 +# setup to be performed interactively? Returns success if the user has asked
 +# for the ZFS configuration to be done interactively even if perhaps overall
 +# non-interactive mode has been requested (by setting nonInteractive).
 +#
 +# Returns success if $zfsInteractive is set and non-NULL.
 +#
 +f_zfsinteractive()
 +{
 +	local value
 +	f_getvar $VAR_ZFSINTERACTIVE value && [ "$value" ]
 +}
 +
  ############################################################ MAIN
  
  #
 @@ -240,6 +255,7 @@ f_variable_new VAR_IFCONFIG		ifconfig_
  f_variable_new VAR_IPADDR		ipaddr
  f_variable_new VAR_IPV6ADDR		ipv6addr
  f_variable_new VAR_IPV6_ENABLE		ipv6_activate_all_interfaces
 +f_variable_new VAR_KEYMAP		keymap
  f_variable_new VAR_MEDIA_TIMEOUT	MEDIA_TIMEOUT
  f_variable_new VAR_MEDIA_TYPE		mediaType
  f_variable_new VAR_NAMESERVER		nameserver
 @@ -263,6 +279,7 @@ f_variable_new VAR_SLOW_ETHER		slowEther
  f_variable_new VAR_TRY_DHCP		tryDHCP
  f_variable_new VAR_TRY_RTSOL		tryRTSOL
  f_variable_new VAR_UFS_PATH		ufs
 +f_variable_new VAR_ZFSINTERACTIVE	zfsInteractive
  
  #
  # Self-initialize unless requested otherwise
 
 Modified: stable/10/usr.sbin/bsdinstall/bsdinstall
 ==============================================================================
 --- stable/10/usr.sbin/bsdinstall/bsdinstall	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdinstall/bsdinstall	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -28,6 +28,7 @@
  
  : ${BSDINSTALL_LOG="/tmp/bsdinstall_log"}; export BSDINSTALL_LOG
  : ${BSDINSTALL_TMPETC="/tmp/bsdinstall_etc"}; export BSDINSTALL_TMPETC
 +: ${BSDINSTALL_TMPBOOT="/tmp/bsdinstall_boot"}; export BSDINSTALL_TMPBOOT
  : ${PATH_FSTAB="$BSDINSTALL_TMPETC/fstab"}; export PATH_FSTAB
  : ${BSDINSTALL_DISTDIR="/usr/freebsd-dist"}; export BSDINSTALL_DISTDIR
  : ${BSDINSTALL_CHROOT="/mnt"}; export BSDINSTALL_CHROOT
 @@ -35,5 +36,6 @@
  VERB=${1:-auto}; shift
  
  [ -d "$BSDINSTALL_TMPETC" ] || mkdir -p "$BSDINSTALL_TMPETC"
 +[ -d "$BSDINSTALL_TMPBOOT" ] || mkdir -p "$BSDINSTALL_TMPBOOT"
  echo "Running installation step: $VERB $@" >> "$BSDINSTALL_LOG"
  exec "/usr/libexec/bsdinstall/$VERB" "$@" 2>> "$BSDINSTALL_LOG"
 
 Modified: stable/10/usr.sbin/bsdinstall/scripts/Makefile
 ==============================================================================
 --- stable/10/usr.sbin/bsdinstall/scripts/Makefile	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdinstall/scripts/Makefile	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -2,7 +2,7 @@
  
  SCRIPTS= auto adduser checksum config docsinstall entropy hostname jail \
  	 keymap mirrorselect mount netconfig netconfig_ipv4 netconfig_ipv6 \
 -	 rootpass script services time umount wlanconfig
 +	 rootpass script services time umount wlanconfig zfsboot
  BINDIR= /usr/libexec/bsdinstall
  
  NO_MAN=	true
 
 Modified: stable/10/usr.sbin/bsdinstall/scripts/auto
 ==============================================================================
 --- stable/10/usr.sbin/bsdinstall/scripts/auto	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdinstall/scripts/auto	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -93,24 +93,46 @@ fi
  rm $PATH_FSTAB
  touch $PATH_FSTAB
  
 -dialog --backtitle "FreeBSD Installer" --title "Partitioning" --extra-button \
 -    --extra-label "Manual" --ok-label "Guided" --cancel-label "Shell" \
 -    --yesno "Would you like to use the guided partitioning tool (recommended for beginners) or to set up partitions manually (experts)? You can also open a shell and set up partitions entirely by hand." 0 0
 +PMODES="\
 +Guided \"Partitioning Tool (Recommended for Beginners)\" \
 +Manual \"Manually Configure Partitions (Expert)\" \
 +Shell \"Open a shell and partition by hand\""
 +
 +CURARCH=$( uname -m )
 +case $CURARCH in
 +	amd64|i386)	# Booting ZFS Supported
 +		PMODES="$PMODES ZFS \"Automatic Root-on-ZFS (Experimental)\""
 +		;;
 +	*)		# Booting ZFS Unspported
 +		;;
 +esac
  
 -case $? in
 -0)	# Guided
 +exec 3>&1
 +PARTMODE=`echo $PMODES | xargs dialog --backtitle "FreeBSD Installer" \
 +	--title "Partitioning" \
 +	--menu "How would you like to partition your disk?" \
 +	0 0 0 2>&1 1>&3`
 +if [ $? -eq $DIALOG_CANCEL ]; then exit 1; fi
 +exec 3>&-
 +
 +case "$PARTMODE" in
 +"Guided")	# Guided
  	bsdinstall autopart || error
  	bsdinstall mount || error
  	;;
 -1)	# Shell
 +"Shell")	# Shell
  	clear
  	echo "Use this shell to set up partitions for the new system. When finished, mount the system at $BSDINSTALL_CHROOT and place an fstab file for the new system at $PATH_FSTAB. Then type 'exit'. You can also enter the partition editor at any time by entering 'bsdinstall partedit'."
  	sh 2>&1
  	;;
 -3)	# Manual
 +"Manual")	# Manual
  	bsdinstall partedit || error
  	bsdinstall mount || error
  	;;
 +"ZFS")	# ZFS
 +	bsdinstall zfsboot || error
 +	bsdinstall mount || error
 +	;;
  *)
  	error
  	;;
 
 Modified: stable/10/usr.sbin/bsdinstall/scripts/config
 ==============================================================================
 --- stable/10/usr.sbin/bsdinstall/scripts/config	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdinstall/scripts/config	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -31,6 +31,11 @@ rm $BSDINSTALL_TMPETC/rc.conf.*
  
  cp $BSDINSTALL_TMPETC/* $BSDINSTALL_CHROOT/etc
  
 +cat $BSDINSTALL_TMPBOOT/loader.conf.* >> $BSDINSTALL_TMPBOOT/loader.conf
 +rm $BSDINSTALL_TMPBOOT/loader.conf.*
 +
 +cp $BSDINSTALL_TMPBOOT/* $BSDINSTALL_CHROOT/boot
 +
  # Set up other things from installed config
  chroot $BSDINSTALL_CHROOT /usr/bin/newaliases
  
 
 Modified: stable/10/usr.sbin/bsdinstall/scripts/keymap
 ==============================================================================
 --- stable/10/usr.sbin/bsdinstall/scripts/keymap	Fri Oct 11 23:11:33 2013	(r256360)
 +++ stable/10/usr.sbin/bsdinstall/scripts/keymap	Fri Oct 11 23:12:05 2013	(r256361)
 @@ -1,6 +1,7 @@
  #!/bin/sh
  #-
  # Copyright (c) 2011 Nathan Whitehorn
 +# Copyright (c) 2013 Devin Teske
  # All rights reserved.
  #
  # Redistribution and use in source and binary forms, with or without
 @@ -25,11 +26,212 @@
  # SUCH DAMAGE.
  #
  # $FreeBSD$
 +#
 +############################################################ INCLUDES
 + 
 +BSDCFG_SHARE="/usr/share/bsdconfig"
 +. $BSDCFG_SHARE/common.subr || exit 1
 +f_dprintf "%s: loading includes..." "$0"
 +f_include $BSDCFG_SHARE/dialog.subr
 +f_include $BSDCFG_SHARE/keymap.subr
 +f_include $BSDCFG_SHARE/sysrc.subr
 +
 +############################################################ CONFIGURATION
 +
 +#
 +# Default file to store keymap selection in
 +#
 +: ${KEYMAPFILE:=$BSDINSTALL_TMPETC/rc.conf.keymap}
 +
 +#
 +# Default path to keymap INDEX containing descriptions
 +#
 +: ${MAPDESCFILE:=/usr/share/syscons/keymaps/INDEX.keymaps}
 +
 +############################################################ GLOBALS
 +
 +#
 +# Strings that should be moved to an i18n file and loaded with f_include_lang()
 +#
 +hline_arrows_tab_enter="Press arrows, TAB or ENTER"
 +msg_continue_with_keymap="Continue with %s keymap"
 +msg_default="default"
 +msg_error="Error"
 +msg_freebsd_installer="FreeBSD Installer"
 +msg_keymap_menu_text="The system console driver for FreeBSD defaults to standard \"US\"\nkeyboard map. Other keymaps can be chosen below."
 +msg_keymap_selection="Keymap Selection"
 +msg_ok="OK"
 +msg_select="Select"
 +msg_test_keymap="Test %s keymap"
 +msg_test_the_currently_selected_keymap="Test the currently selected keymap"
 +msg_test_the_keymap_by_typing="Test the keymap by typing letters, numbers, and symbols. Characters\nshould match labels on the keyboard keys. Press Enter to stop testing."
 +
 +############################################################ FUNCTIONS
 +
 +# dialog_keymap_test $keymap
 +#
 +# Activate $keymap and display an input box (without cancel button) for the
 +# user to test keyboard input and return. Always returns success.
 +#
 +dialog_keymap_test()
 +{
 +	local keym="$1"
 +	local title= # Calculated below
 +	local btitle= # Calculated below
 +	local prompt="$msg_test_the_keymap_by_typing"
 +	local hline=
 +
 +	# Attempt to activate the keymap
 +	if [ "$keym" ]; then
 +		local err
 +		err=$( f_keymap_kbdcontrol "$keym" 2>&1 > /dev/null )
 +		if [ "$err" ]; then
 +			f_dialog_title "$msg_error"
 +			f_dialog_msgbox "$err"
 +			f_dialog_title_restore
 +			return $FAILURE
 +		fi
 +	fi
 +
 +	f_dialog_title "$( printf "$msg_test_keymap" "${keym:-$msg_default}" )"
 +	title="$DIALOG_TITLE"
 +	btitle="$DIALOG_BACKTITLE"
 +	f_dialog_title_restore
 +
 +	local height width
 +	f_dialog_inputbox_size height width \
 +		"$title" "$btitle" "$prompt" "" "$hline"
 +
 +	$DIALOG \
 +		--title "$title"      \
 +		--backtitle "$btitle" \
 +		--hline "$hline"      \
 +		--ok-label "$msg_ok"  \
 +		--no-cancel           \
 +		--inputbox "$prompt"  \
 +		$height $width        \
 +		2>/dev/null >&$DIALOG_TERMINAL_PASSTHRU_FD
  
 -kbdcontrol -d >/dev/null 2>&1
 -if [ $? -eq 0 ]; then
 -	dialog --backtitle "FreeBSD Installer" --title "Keymap Selection" \
 -	    --yesno "Would you like to set a non-default key mapping for your keyboard?" 0 0 || exit 0
 -	exec 3>&1
 -	kbdmap 2>&1 1>&3 | grep 'keymap=' > $BSDINSTALL_TMPETC/rc.conf.keymap
 +	return $DIALOG_OK
 +}
 +
 +############################################################ MAIN
 +
 +#
 +# Initialize
 +#
 +f_dialog_title "$msg_keymap_selection"
 +f_dialog_backtitle "$msg_freebsd_installer"
 +
 +#
 +# Die immediately if we can't dump the current keyboard map
 +#
 +#error=$( kbdcontrol -d 2>&1 > /dev/null ) || f_die $FAILURE "%s" "$error"
 +
 +# Capture Ctrl-C for clean-up
 +trap 'rm -f $KEYMAPFILE; exit $FAILURE' SIGINT
 +
 +# Get a value from rc.conf(5) as initial value (if not being scripted)
 +f_getvar $VAR_KEYMAP keymap
 +if [ ! "$keymap" ]; then
 +	keymap=$( f_sysrc_get keymap )
 +	case "$keymap" in [Nn][Oo]) keymap="";; esac
  fi
 +
 +#
 +# Loop until the user has finalized their selection (by clicking the
 +# [relabeled] Cancel button).
 +#
 +width=67 first_pass=1 back_from_testing=
 +[ "$USE_XDIALOG" ] && width=70
 +prompt="$msg_keymap_menu_text"
 +hline="$hline_arrows_tab_enter"
 +while :; do
 +	#
 
 *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310112320.r9BNK01g065043>