diff --git a/setup.sh b/setup.sh index 17c38b6..a8ea41d 100644 --- a/setup.sh +++ b/setup.sh @@ -34,7 +34,7 @@ partition_types[mbr_boot]='0x83' set -E trap '[ "$?" -ne 77 ] || exit 77' ERR -declare zpool_drive efi_drive part_schema +declare zpool_drive efi_drive boot_drive part_schema function we_are_changerooted () { if [ "$(stat -c '%d:%i' '/')" != "$(stat -c '%d:%i' '/proc/1/root/.')" ]; then @@ -138,6 +138,9 @@ function get_parts () { fi parts="$(get_partitions | jq --raw-output '.[][] | select(.children | length > 0) | .children[] | select(.parttype=="'"${part_type_code}"'") | .path')" || exit 1 ;; + boot) + parts="$(get_partitions | jq --raw-output '.[][] | select(.children | length > 0) | select(.path=="'"${zfs_install_drive:?}"'") | .children[] | select(.parttype=="'"${partition_types[mbr_boot]}"'") | .path')" || exit 1 + ;; efi) 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 ;; @@ -186,15 +189,22 @@ function get_drive_id () { } function select_part () { - local parts enriched_parts enriched_parts_count part_number part_type zfs_install_drive part_type_code + local parts enriched_parts enriched_parts_count part_number part_type zfs_install_drive part_type_code specific_part_type declare part - part_type="${1:?}" # 'efi' or 'zfs' + part_type="${1:?}" # 'boot' or 'zfs' zfs_install_drive="${2:-}" - if [[ "${zfs_install_drive}" ]]; then - # This is intended to find correct EFI partition - parts="$(get_parts "${part_type}" "${zfs_install_drive}")" + + if [[ "${part_schema}" = 'mbr' ]]; then + specific_part_type='boot' else - parts="$(get_parts "${part_type}")" + specific_part_type='efi' + fi + + if [[ "${zfs_install_drive}" ]]; then + # This is intended to find correct boot/EFI partition + parts="$(get_parts "${specific_part_type}" "${zfs_install_drive}")" + else + parts="$(get_parts "${specific_part_type}")" fi if [[ ! "${parts}" ]]; then @@ -324,12 +334,20 @@ function mount_system () { zfs mount "${zpool_name}"'/root/'"${zfs_arch_dataset_name}" zfs mount -a - local zfs_parent efi_part + local zfs_parent efi_part boot_part zfs_parent="$(get_part_parent "${zpool_drive:?}")" - efi_drive="${zfs_parent}" - efi_part="$(select_part 'efi' "${zfs_parent:?}")" - mkdir -p '/mnt/efi' - mount "${efi_part}" '/mnt/efi' + + if [[ "${part_schema}" = 'mbr' ]]; then + boot_drive="${zfs_parent}" + boot_part="$(select_part 'boot' "${zfs_parent:?}")" + mkdir -p '/mnt/boot/syslinux' + mount "${boot_part}" '/mnt/boot/syslinux' + else + efi_drive="${zfs_parent}" + efi_part="$(select_part 'boot' "${zfs_parent:?}")" + mkdir -p '/mnt/efi' + mount "${efi_part}" '/mnt/efi' + fi } function copy_zpool_cache () {