Compare commits
	
		
			10 Commits
		
	
	
		
			c367be8845
			...
			1fb3cc37eb
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 1fb3cc37eb | |||
| a970a3d179 | |||
| c27f0e9c7c | |||
| 10440fc6d7 | |||
| ed737409e6 | |||
| ef03281a63 | |||
| 8d38827cd1 | |||
| 49fe3deced | |||
| b12c35ed07 | |||
| c3708a098e | 
							
								
								
									
										74
									
								
								setup.sh
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								setup.sh
									
									
									
									
									
								
							@@ -65,22 +65,21 @@ function get_parts () {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function we_have_exactly_one_part () {
 | 
					function we_have_exactly_one_part () {
 | 
				
			||||||
    declare parttype parts_list parts_count
 | 
					    local parttype parts_list parts_count
 | 
				
			||||||
    parttype="${1:?}"
 | 
					    parttype="${1:?}"
 | 
				
			||||||
    parts_list="${2:?}"
 | 
					    parts_list="${2:?}"
 | 
				
			||||||
    parts_count="$(wc -l <<<"${parts_list}")"
 | 
					    parts_count="$(wc -l <<<"${parts_list}")"
 | 
				
			||||||
    if [[ "$(wc -c <<<"${parts_list}")" -gt '1' ]]; then
 | 
					    if [[ "$(wc -c <<<"${parts_list}")" -gt '1' ]]; then
 | 
				
			||||||
        case "${parts_count}" in
 | 
					        case "${parts_count}" in
 | 
				
			||||||
            0)
 | 
					            0)
 | 
				
			||||||
                printf -- '%s\n' 'No '"${parttype}"' partition found. Exiting 1 ...'
 | 
					                printf -- '%s\n' 'No '"${parttype^^}"' partition found. Exiting 1 ...'
 | 
				
			||||||
                exit 1
 | 
					                exit 1
 | 
				
			||||||
                ;;
 | 
					                ;;
 | 
				
			||||||
            1)
 | 
					            1)
 | 
				
			||||||
                return 0
 | 
					                return 0
 | 
				
			||||||
                ;;
 | 
					                ;;
 | 
				
			||||||
            *)
 | 
					            *)
 | 
				
			||||||
                printf -- '%s\n' 'Multiple '"${parttype}"' partitions found. We expect exactly one. Cowardly exiting 1 ...'
 | 
					                return 1
 | 
				
			||||||
                exit 1
 | 
					 | 
				
			||||||
                ;;
 | 
					                ;;
 | 
				
			||||||
        esac
 | 
					        esac
 | 
				
			||||||
        printf -- '%s\n' 'Partition list does not look valid. Cowardly exiting 1 ...'
 | 
					        printf -- '%s\n' 'Partition list does not look valid. Cowardly exiting 1 ...'
 | 
				
			||||||
@@ -88,6 +87,46 @@ function we_have_exactly_one_part () {
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function get_drive_id () {
 | 
				
			||||||
 | 
					    declare drive_id
 | 
				
			||||||
 | 
					    drive_id="$(find -L /dev/disk/by-id -samefile "${1:?}")"
 | 
				
			||||||
 | 
					    if [[ "$(wc -l <<<"${drive_id}")" -eq '1' ]] && [[ "$(wc -c <<<"${drive_id}")" -gt '1' ]]; then
 | 
				
			||||||
 | 
					        printf -- '%s' "${drive_id}"
 | 
				
			||||||
 | 
					        return 0
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    printf -- '%s\n' 'Not exactly one '"'${1:?}'"' partition entry in /dev/disk/by-id, exiting 1 ...'
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function select_part () {
 | 
				
			||||||
 | 
					    local parts enriched_parts enriched_parts_count part_number part_type
 | 
				
			||||||
 | 
					    declare part
 | 
				
			||||||
 | 
					    part_type="${1:?}" # 'efi' or 'zfs'
 | 
				
			||||||
 | 
					    parts="$(get_parts "${part_type}")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if we_have_exactly_one_part "${part_type}" "${parts}"; then
 | 
				
			||||||
 | 
					        part="${parts}"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        printf -- '%s\n' 'Which '"${part_type^^}"' partition do you want us to use?'
 | 
				
			||||||
 | 
					        while IFS= read -r found_part; do
 | 
				
			||||||
 | 
					            enriched_parts+=("'${found_part}'"' (aka ID '"'$(get_drive_id "${found_part}")'"')')
 | 
				
			||||||
 | 
					        done <<<"${parts}"
 | 
				
			||||||
 | 
					        enriched_parts_count="${#enriched_parts[@]}"
 | 
				
			||||||
 | 
					        select part in "${enriched_parts[@]}"; do
 | 
				
			||||||
 | 
					            part_number="${REPLY}"
 | 
				
			||||||
 | 
					            if [[ "${part_number}" -le "${enriched_parts_count}" ]]; then
 | 
				
			||||||
 | 
					                part="$(sed "${REPLY}q;d" <<<"${parts}")"
 | 
				
			||||||
 | 
					                printf -- '%s\n' 'You'"'"'ve selected '"'${part}'"' ...'
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                printf -- '%s\n' 'Invalid option, please choose between 1 and '"${enriched_parts_count}"
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    printf -- '%s' "${part}"
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function no_zpool_exists () {
 | 
					function no_zpool_exists () {
 | 
				
			||||||
    declare zpool_list
 | 
					    declare zpool_list
 | 
				
			||||||
    zpool_list="$(zpool list -H)"
 | 
					    zpool_list="$(zpool list -H)"
 | 
				
			||||||
@@ -95,17 +134,6 @@ function no_zpool_exists () {
 | 
				
			|||||||
    return 1
 | 
					    return 1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function zpool_drive_id () {
 | 
					 | 
				
			||||||
    declare drive_id
 | 
					 | 
				
			||||||
    drive_id="$(find -L /dev/disk/by-id -samefile "${1:?}")"
 | 
					 | 
				
			||||||
    if [[ "$(wc -l <<<"${drive_id}")" -eq '1' ]]; then
 | 
					 | 
				
			||||||
        printf -- '%s' "${drive_id}"
 | 
					 | 
				
			||||||
        return 0
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    printf -- '%s\n' 'More than zpool partition entry in /dev/disk/by-id, exiting 1 ...'
 | 
					 | 
				
			||||||
    exit 1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function set_zpool_password () {
 | 
					function set_zpool_password () {
 | 
				
			||||||
    # May or may not have a newline at the end, ZFS doesn't care
 | 
					    # May or may not have a newline at the end, ZFS doesn't care
 | 
				
			||||||
    printf -- '%s' 'password' > '/etc/zfs/'"${zpool_name}"'.key'
 | 
					    printf -- '%s' 'password' > '/etc/zfs/'"${zpool_name}"'.key'
 | 
				
			||||||
@@ -162,7 +190,7 @@ function export_pool () {
 | 
				
			|||||||
function setup_zpool () {
 | 
					function setup_zpool () {
 | 
				
			||||||
    declare zpool_drive drive_by_id
 | 
					    declare zpool_drive drive_by_id
 | 
				
			||||||
    zpool_drive="${1:?}"
 | 
					    zpool_drive="${1:?}"
 | 
				
			||||||
    drive_by_id="$(zpool_drive_id "${zpool_drive}")"
 | 
					    drive_by_id="$(get_drive_id "${zpool_drive}")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    set_zpool_password
 | 
					    set_zpool_password
 | 
				
			||||||
    if no_zpool_exists; then
 | 
					    if no_zpool_exists; then
 | 
				
			||||||
@@ -182,12 +210,9 @@ function mount_system () {
 | 
				
			|||||||
    zfs mount "${zpool_name}"'/root/'"${zfs_arch_dataset_name}"
 | 
					    zfs mount "${zpool_name}"'/root/'"${zfs_arch_dataset_name}"
 | 
				
			||||||
    zfs mount -a
 | 
					    zfs mount -a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    declare efi_part
 | 
					    local efi_part="$(select_part 'efi')"
 | 
				
			||||||
    efi_part="$(get_parts 'efi')"
 | 
					 | 
				
			||||||
    if we_have_exactly_one_part 'efi' "${efi_part}"; then
 | 
					 | 
				
			||||||
    mkdir -p '/mnt/efi'
 | 
					    mkdir -p '/mnt/efi'
 | 
				
			||||||
    mount "${efi_part}" '/mnt/efi'
 | 
					    mount "${efi_part}" '/mnt/efi'
 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function copy_zpool_cache () {
 | 
					function copy_zpool_cache () {
 | 
				
			||||||
@@ -544,11 +569,11 @@ function main () {
 | 
				
			|||||||
    else
 | 
					    else
 | 
				
			||||||
        set_ntp
 | 
					        set_ntp
 | 
				
			||||||
        update_pacman_db
 | 
					        update_pacman_db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        install_pkgs 'jq'
 | 
					        install_pkgs 'jq'
 | 
				
			||||||
        declare zfs_part
 | 
					        local zfs_part
 | 
				
			||||||
        zfs_part="$(get_parts 'zfs')"
 | 
					        zfs_part="$(select_part 'zfs')"
 | 
				
			||||||
        if we_have_exactly_one_part 'zfs' "${zfs_part}"; then
 | 
					
 | 
				
			||||||
            printf -- 'Creating zpool on partition '"'"'%s'"'"' ...\n' "${zfs_part}"
 | 
					 | 
				
			||||||
        install_zfs
 | 
					        install_zfs
 | 
				
			||||||
        setup_zpool "${zfs_part}"
 | 
					        setup_zpool "${zfs_part}"
 | 
				
			||||||
        mount_system
 | 
					        mount_system
 | 
				
			||||||
@@ -564,7 +589,6 @@ function main () {
 | 
				
			|||||||
        # We're done in chroot
 | 
					        # We're done in chroot
 | 
				
			||||||
        finalize_os_setup
 | 
					        finalize_os_setup
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
main
 | 
					main
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user