feat(iso): Select correct partition for zpool on a legacy BIOS machine (#7)
This commit is contained in:
		
							
								
								
									
										22
									
								
								setup.sh
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								setup.sh
									
									
									
									
									
								
							| @@ -125,16 +125,21 @@ function get_part_parent () { | |||||||
| } | } | ||||||
|  |  | ||||||
| function get_parts () { | function get_parts () { | ||||||
|     local zfs_install_drive |     local zfs_install_drive part_type_code | ||||||
|     declare parttype parts |     declare parttype parts | ||||||
|     parttype="${1:?}" |     parttype="${1:?}" | ||||||
|     zfs_install_drive="${2:-}" |     zfs_install_drive="${2:-}" | ||||||
|     case "${parttype}" in |     case "${parttype}" in | ||||||
|         zfs) |         zfs) | ||||||
|             parts="$(get_partitions | jq --raw-output '.[][] | select(.children | length > 0) | .children[] | select(.parttype=="6a85cf4d-1dd2-11b2-99a6-080020736631") | .path')" || exit 1 |             if [[ "${part_schema}" = 'mbr' ]]; then | ||||||
|  |                 part_type_code="${partition_types[mbr_zfs]}" | ||||||
|  |             else | ||||||
|  |                 part_type_code="${partition_types[gpt_zfs]}" | ||||||
|  |             fi | ||||||
|  |             parts="$(get_partitions | jq --raw-output '.[][] | select(.children | length > 0) | .children[] | select(.parttype=="'"${part_type_code}"'") | .path')" || exit 1 | ||||||
|             ;; |             ;; | ||||||
|         efi) |         efi) | ||||||
|             parts="$(get_partitions | jq --raw-output '.[][] | select(.children | length > 0) | select(.path=="'"${zfs_install_drive:?}"'") | .children[] | select(.parttype=="c12a7328-f81f-11d2-ba4b-00a0c93ec93b") | .path')" || exit 1 |             parts="$(get_partitions | jq --raw-output '.[][] | select(.children | length > 0) | select(.path=="'"${zfs_install_drive:?}"'") | .children[] | select(.parttype=="'"${partition_types[gpt_efi]}"'") | .path')" || exit 1 | ||||||
|             ;; |             ;; | ||||||
|         *) |         *) | ||||||
|             >&3 printf -- '%s\n' 'Unknown partition type '"'"'"${parttype}"'"'"', exiting ...' |             >&3 printf -- '%s\n' 'Unknown partition type '"'"'"${parttype}"'"'"', exiting ...' | ||||||
| @@ -181,7 +186,7 @@ function get_drive_id () { | |||||||
| } | } | ||||||
|  |  | ||||||
| function select_part () { | function select_part () { | ||||||
|     local parts enriched_parts enriched_parts_count part_number part_type zfs_install_drive |     local parts enriched_parts enriched_parts_count part_number part_type zfs_install_drive part_type_code | ||||||
|     declare part |     declare part | ||||||
|     part_type="${1:?}" # 'efi' or 'zfs' |     part_type="${1:?}" # 'efi' or 'zfs' | ||||||
|     zfs_install_drive="${2:-}" |     zfs_install_drive="${2:-}" | ||||||
| @@ -198,7 +203,12 @@ function select_part () { | |||||||
|                 part_type_human_readable='EFI system partition (ESP) with partition type code EF00' |                 part_type_human_readable='EFI system partition (ESP) with partition type code EF00' | ||||||
|                 ;; |                 ;; | ||||||
|             zfs) |             zfs) | ||||||
|                 part_type_human_readable='ZFS zpool partition with partition type code BF00' |                 if [[ "${part_schema}" = 'mbr' ]]; then | ||||||
|  |                     part_type_code='bf' | ||||||
|  |                 else | ||||||
|  |                     part_type_code='BF00' | ||||||
|  |                 fi | ||||||
|  |                 part_type_human_readable='ZFS zpool partition with partition type code '"${part_type_code}" | ||||||
|                 ;; |                 ;; | ||||||
|         esac |         esac | ||||||
|         >&3 printf -- '%s\n' \ |         >&3 printf -- '%s\n' \ | ||||||
| @@ -626,7 +636,7 @@ function get_disks_with_one_efipart () { | |||||||
|     # Find disks that have exactly one EFI partition and where that EFI |     # Find disks that have exactly one EFI partition and where that EFI | ||||||
|     # partition is partition number 1. We expect exactly one disk to meet |     # partition is partition number 1. We expect exactly one disk to meet | ||||||
|     # these criteria. Anything else and we bail. |     # these criteria. Anything else and we bail. | ||||||
|     disks_with_one_efipart="$(lsblk --output PATH,PARTTYPE --json --tree | jq --raw-output '.[][] | select(.children | length > 0) | select( any (.children[]; (.path | test("^[^[:digit:]]+1")) and (.parttype=="c12a7328-f81f-11d2-ba4b-00a0c93ec93b")) and ([select(.children[].parttype=="c12a7328-f81f-11d2-ba4b-00a0c93ec93b")] | length == 1) ) | .path')" |     disks_with_one_efipart="$(lsblk --output PATH,PARTTYPE --json --tree | jq --raw-output '.[][] | select(.children | length > 0) | select( any (.children[]; (.path | test("^[^[:digit:]]+1")) and (.parttype=="'"${partition_types[gpt_efi]}"'")) and ([select(.children[].parttype=="'"${partition_types[gpt_efi]}"'")] | length == 1) ) | .path')" | ||||||
|     if [[ "$(wc -l <<<"${disks_with_one_efipart}")" -eq '1' ]] && [[ "$(wc -c <<<"${disks_with_one_efipart}")" -gt '1' ]]; then |     if [[ "$(wc -l <<<"${disks_with_one_efipart}")" -eq '1' ]] && [[ "$(wc -c <<<"${disks_with_one_efipart}")" -gt '1' ]]; then | ||||||
|         printf -- '%s' "${disks_with_one_efipart}" |         printf -- '%s' "${disks_with_one_efipart}" | ||||||
|         return 0 |         return 0 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user