Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Jun 2015 01:50:10 +0000 (UTC)
From:      Devin Teske <dteske@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r283861 - stable/10/usr.sbin/bsdinstall/scripts
Message-ID:  <201506010150.t511oAFd029014@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dteske
Date: Mon Jun  1 01:50:09 2015
New Revision: 283861
URL: https://svnweb.freebsd.org/changeset/base/283861

Log:
  MFC SVN revisions 280310-280311,281160,281167,282443,283023,283288:
  r280310: Whitespace cleanup(s)
  r280311: Update copyright(s)
  r281160: [mergeinfo only] Fix root encryption key permissions (see r281230)
  r281167: [mergeinfo only] Unbreak ZFS+GELI install option (see r281230)
  r282443: Add swap size sanity check (allanjude)
  r283023: Skip adding swap to fstab(5) if unused (allanjude)
  r283288: Fix a syntax error (allanjude)

Modified:
  stable/10/usr.sbin/bsdinstall/scripts/zfsboot
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/usr.sbin/bsdinstall/scripts/zfsboot
==============================================================================
--- stable/10/usr.sbin/bsdinstall/scripts/zfsboot	Mon Jun  1 01:31:50 2015	(r283860)
+++ stable/10/usr.sbin/bsdinstall/scripts/zfsboot	Mon Jun  1 01:50:09 2015	(r283861)
@@ -1,7 +1,7 @@
 #!/bin/sh
 #-
-# Copyright (c) 2013 Allan Jude
-# Copyright (c) 2013 Devin Teske
+# Copyright (c) 2013-2014 Allan Jude
+# Copyright (c) 2013-2015 Devin Teske
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -287,10 +287,12 @@ msg_stripe_desc="Stripe - No Redundancy"
 msg_stripe_help="[1+ Disks] Striping provides maximum storage but no redundancy"
 msg_swap_encrypt="Encrypt Swap?"
 msg_swap_encrypt_help="Encrypt swap partitions with temporary keys, discarded on reboot"
+msg_swap_invalid="The selected swap size (%s) is invalid. Enter a number optionally followed by units. Example: 2G"
 msg_swap_mirror="Mirror Swap?"
 msg_swap_mirror_help="Mirror swap partitions for redundancy, breaks crash dumps"
 msg_swap_size="Swap Size"
 msg_swap_size_help="Customize how much swap space is allocated to each selected disk"
+msg_swap_toosmall="The selected swap size (%s) is to small. Please enter a value greater than 100MB or enter 0 for no swap"
 msg_these_disks_are_too_small="These disks are too small given the amount of requested\nswap (%s) and/or geli(8) (%s) partitions, which would\ntake 50%% or more of each of the following selected disk\ndevices (not recommended):\n\n  %s\n\nRecommend changing partition size(s) and/or selecting a\ndifferent set of devices."
 msg_uefi_not_supported="The FreeBSD UEFI loader does not currently support booting root-on-ZFS. Your system will need to boot in legacy (CSM) mode.\nDo you want to continue?"
 msg_unable_to_get_disk_capacity="Unable to get disk capacity of \`%s'"
@@ -320,31 +322,34 @@ dialog_menu_main()
 	[ "$ZFSBOOT_SWAP_MIRROR" ] && swapmirror="$msg_yes"
 	local disks n disks_grammar
 	f_count n $ZFSBOOT_DISKS
-	{ [ $n -eq 1 ] && disks_grammar=$msg_disk_singular; } || 
+	{ [ $n -eq 1 ] && disks_grammar=$msg_disk_singular; } ||
 		disks_grammar=$msg_disk_plural # grammar
 	local menu_list="
-		'>>> $msg_install'        '$msg_install_desc'
-		                          '$msg_install_help'
-		'T $msg_pool_type_disks'  '$ZFSBOOT_VDEV_TYPE: $n $disks_grammar'
-                                          '$msg_pool_type_disks_help'
-		'- $msg_rescan_devices'   '*'
-		                          '$msg_rescan_devices_help'
-		'- $msg_disk_info'        '*'
-		                          '$msg_disk_info_help'
-		'N $msg_pool_name'        '$ZFSBOOT_POOL_NAME'
-		                          '$msg_pool_name_help'
-		'4 $msg_force_4k_sectors' '$force4k'
-		                          '$msg_force_4k_sectors_help'
-		'E $msg_encrypt_disks'    '$usegeli'
-		                          '$msg_encrypt_disks_help'
-		'P $msg_partition_scheme' '$ZFSBOOT_PARTITION_SCHEME'
-		                          '$msg_partition_scheme_help'
-		'S $msg_swap_size'        '$ZFSBOOT_SWAP_SIZE'
-		                          '$msg_swap_size_help'
-		'M $msg_swap_mirror'      '$swapmirror'
-		                          '$msg_swap_mirror_help'
-		'W $msg_swap_encrypt'     '$swapgeli'
-		                          '$msg_swap_encrypt_help'
+		'>>> $msg_install'      '$msg_install_desc'
+		                        '$msg_install_help'
+		'T $msg_pool_type_disks'
+		                        '$ZFSBOOT_VDEV_TYPE: $n $disks_grammar'
+		                        '$msg_pool_type_disks_help'
+		'- $msg_rescan_devices' '*'
+		                        '$msg_rescan_devices_help'
+		'- $msg_disk_info'      '*'
+		                        '$msg_disk_info_help'
+		'N $msg_pool_name'      '$ZFSBOOT_POOL_NAME'
+		                        '$msg_pool_name_help'
+		'4 $msg_force_4k_sectors'
+		                        '$force4k'
+		                        '$msg_force_4k_sectors_help'
+		'E $msg_encrypt_disks'  '$usegeli'
+		                        '$msg_encrypt_disks_help'
+		'P $msg_partition_scheme'
+		                        '$ZFSBOOT_PARTITION_SCHEME'
+		                        '$msg_partition_scheme_help'
+		'S $msg_swap_size'      '$ZFSBOOT_SWAP_SIZE'
+		                        '$msg_swap_size_help'
+		'M $msg_swap_mirror'    '$swapmirror'
+		                        '$msg_swap_mirror_help'
+		'W $msg_swap_encrypt'   '$swapgeli'
+		                        '$msg_swap_encrypt_help'
 	" # END-QUOTE
 	local defaultitem= # Calculated below
 	local hline="$hline_alnum_arrows_punc_tab_enter"
@@ -937,17 +942,19 @@ zfs_create_diskpart()
 		# 5. Add freebsd-zfs partition for zroot
 		#
 		f_eval_catch $funcname gpart "$GPART_ADD_INDEX" \
-			     $mbrindex freebsd-zfs ${disk}s1 || return $FAILURE
+		             $mbrindex freebsd-zfs ${disk}s1 || return $FAILURE
 		f_eval_catch -d $funcname zpool "$ZPOOL_LABELCLEAR_F" \
-				/dev/$disk$targetpart # Pedantic
+		                /dev/$disk$targetpart # Pedantic
 		f_eval_catch $funcname dd "$DD_WITH_OPTIONS" \
-			     /boot/zfsboot /dev/${disk}s1 count=1 ||
-			     return $FAILURE
+		             /boot/zfsboot /dev/${disk}s1 count=1 ||
+		             return $FAILURE
 		;;
 
 	esac # $ZFSBOOT_PARTITION_SCHEME
 
 	# Update fstab(5)
+	local swapsize
+	f_expand_number "$ZFSBOOT_SWAP_SIZE" swapsize
 	if [ "$isswapmirror" ]; then
 		# This is not the first disk in the mirror, do nothing
 	elif [ "$ZFSBOOT_SWAP_ENCRYPTION" -a "$ZFSBOOT_SWAP_MIRROR" ]; then
@@ -967,6 +974,8 @@ zfs_create_diskpart()
 		             /dev/$disk${swappart}.eli none swap sw 0 0 \
 		             $BSDINSTALL_TMPETC/fstab ||
 		             return $FAILURE
+	elif [ ${swapsize:-0} -eq 0 ]; then
+		# If swap is 0 sized, don't add it to fstab
 	else
 		f_eval_catch $funcname printf "$PRINTF_FSTAB" \
 		             /dev/$disk$swappart none swap sw 0 0 \
@@ -1123,7 +1132,7 @@ zfs_create_boot()
 		if [ "$ZFSBOOT_GELI_ENCRYPTION" ]; then
 			# Generate an encryption key using random(4)
 			f_eval_catch $funcname dd "$DD_WITH_OPTIONS" \
-				     /dev/random "$bootpool/$zroot_key" \
+			             /dev/random "$bootpool/$zroot_key" \
 			             "bs=4096 count=1" || return $FAILURE
 			f_eval_catch $funcname chmod "$CHMOD_MODE" \
 			             go-wrx "$bootpool/$zroot_key" ||
@@ -1180,6 +1189,7 @@ zfs_create_boot()
 			return $FAILURE
 		f_eval_catch -d $funcname umount "$UMOUNT" /mnt # tmpfs
 	fi
+
 	#
 	# Create the gmirror(8) GEOMS for swap
 	#
@@ -1260,7 +1270,7 @@ zfs_create_boot()
 	# MBR boot loader touch-up
 	if [ "$ZFSBOOT_PARTITION_SCHEME" = "MBR" ]; then
 		f_dprintf "$funcname: Updating MBR boot loader on disks..."
-		# Stick the ZFS boot loader in the "convienient hole" after 
+		# Stick the ZFS boot loader in the "convienient hole" after
 		# the ZFS internal metadata
 		for disk in $disks; do
 			f_eval_catch $funcname dd "$DD_WITH_OPTIONS" \
@@ -1299,8 +1309,10 @@ zfs_create_boot()
 	             $BSDINSTALL_TMPBOOT/loader.conf.zfs || return $FAILURE
 
 	if [ "$ZFSBOOT_SWAP_MIRROR" ]; then
-		f_eval_catch $funcname echo "$ECHO_APPEND" 'geom_mirror_load=\"YES\"' \
-		             $BSDINSTALL_TMPBOOT/loader.conf.gmirror || return $FAILURE
+		f_eval_catch $funcname echo "$ECHO_APPEND" \
+		             'geom_mirror_load=\"YES\"' \
+		             $BSDINSTALL_TMPBOOT/loader.conf.gmirror ||
+		             return $FAILURE
 	fi
 
 	# We're all done unless we should go on for boot pool
@@ -1323,8 +1335,8 @@ zfs_create_boot()
 		             return $FAILURE
 	done
 	f_eval_catch $funcname printf "$PRINTF_CONF" vfs.root.mountfrom \
-	    "\"zfs:$zroot_name/$zroot_bootfs\"" \
-	    $BSDINSTALL_TMPBOOT/loader.conf.root || return $FAILURE
+		"\"zfs:$zroot_name/$zroot_bootfs\"" \
+		$BSDINSTALL_TMPBOOT/loader.conf.root || return $FAILURE
 
 	# We're all done unless we should go on to do encryption
 	[ "$ZFSBOOT_GELI_ENCRYPTION" ] || return $SUCCESS
@@ -1334,9 +1346,9 @@ zfs_create_boot()
 	#
 	f_dprintf "$funcname: Configuring disk encryption..."
 	f_eval_catch $funcname echo "$ECHO_APPEND" 'aesni_load=\"YES\"' \
-	    $BSDINSTALL_TMPBOOT/loader.conf.aesni || return $FAILURE
+		$BSDINSTALL_TMPBOOT/loader.conf.aesni || return $FAILURE
 	f_eval_catch $funcname echo "$ECHO_APPEND" 'geom_eli_load=\"YES\"' \
-	    $BSDINSTALL_TMPBOOT/loader.conf.geli || return $FAILURE
+		$BSDINSTALL_TMPBOOT/loader.conf.geli || return $FAILURE
 	f_eval_catch $funcname echo "$ECHO_APPEND" \
 		'geom_eli_passphrase_prompt=\"YES\"' \
 		$BSDINSTALL_TMPBOOT/loader.conf.geli || return $FAILURE
@@ -1410,14 +1422,14 @@ f_dprintf "FSTAB_FMT=[%s]" "$FSTAB_FMT"
 # ZFS with UEFI yet
 #
 if f_interactive; then
-    bootmethod=$(sysctl -n machdep.bootmethod)
-    f_dprintf "machdep.bootmethod=[%s]" "$bootmethod"
-    if [ "$bootmethod" != "BIOS" ]; then
-	dialog_uefi_prompt
-	retval=$?
-	f_dprintf "uefi_prompt=[%s]" "$retval"
-	[ $retval -eq $DIALOG_OK ] || f_die
-    fi
+	bootmethod=$( sysctl -n machdep.bootmethod )
+	f_dprintf "machdep.bootmethod=[%s]" "$bootmethod"
+	if [ "$bootmethod" != "BIOS" ]; then
+		dialog_uefi_prompt
+		retval=$?
+		f_dprintf "uefi_prompt=[%s]" "$retval"
+		[ $retval -eq $DIALOG_OK ] || f_die
+	fi
 fi
 
 #
@@ -1548,10 +1560,26 @@ while :; do
 		;;
 	?" $msg_swap_size")
 		# Prompt the user to input/change the swap size for each disk
-		f_dialog_input input \
-			"$msg_please_enter_amount_of_swap_space" \
-			"$ZFSBOOT_SWAP_SIZE" &&
-			ZFSBOOT_SWAP_SIZE="${input:-0}"
+		while :; do
+		    f_dialog_input input \
+			    "$msg_please_enter_amount_of_swap_space" \
+			    "$ZFSBOOT_SWAP_SIZE" &&
+			    ZFSBOOT_SWAP_SIZE="${input:-0}"
+		    if f_expand_number "$ZFSBOOT_SWAP_SIZE" swapsize
+		    then
+			if [ $swapsize -ne 0 -a $swapsize -lt 104857600 ]; then
+			    f_show_err "$msg_swap_toosmall" \
+				       "$ZFSBOOT_SWAP_SIZE"
+			    continue;
+			else
+			    break;
+			fi
+		    else
+			f_show_err "$msg_swap_invalid" \
+				   "$ZFSBOOT_SWAP_SIZE"
+			continue;
+		    fi
+		done
 		;;
 	?" $msg_swap_mirror")
 		# Toggle the variable referenced both by the menu and later



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