diff --git a/usr/bin/archboot-km.sh b/usr/bin/archboot-km.sh index e49d4fa04..704879367 100755 --- a/usr/bin/archboot-km.sh +++ b/usr/bin/archboot-km.sh @@ -15,8 +15,7 @@ _dialog() { return $? } -_abort() -{ +_abort() { if _dialog --yesno "Abort Arch Linux Console Configuration?" 5 60; then [[ -e /tmp/.km-running ]] && rm /tmp/.km-running [[ -e /tmp/.km ]] && rm /tmp/.km diff --git a/usr/bin/archboot-locale.sh b/usr/bin/archboot-locale.sh index b37fa8b6e..bc56254da 100755 --- a/usr/bin/archboot-locale.sh +++ b/usr/bin/archboot-locale.sh @@ -14,8 +14,7 @@ _dialog() { return $? } -_abort() -{ +_abort() { _dialog --yesno "Abort Arch Linux System Wide Locale Setting?" 5 60 || return 0 [[ -e /tmp/.locale-running ]] && rm /tmp/.locale-running [[ -e /tmp/.locale ]] && rm /tmp/.locale diff --git a/usr/bin/archboot-network.sh b/usr/bin/archboot-network.sh index 2ae30f684..5199dc004 100755 --- a/usr/bin/archboot-network.sh +++ b/usr/bin/archboot-network.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: GPL-2.0-only -# created by Tobias Powalowski +# written by Tobias Powalowski _ANSWER="/tmp/.net" _RUNNING_ARCH="$(uname -m)" _TITLE="Archboot ${_RUNNING_ARCH} | Arch Linux Setup | Network Configuration" @@ -16,6 +16,17 @@ _dialog() { return $? } +_abort() { + if _dialog --yesno "Abort Arch Linux Network Configuration?" 5 60; then + [[ -e /tmp/.net-running ]] && rm /tmp/.net-running + [[ -e /tmp/.net ]] && rm /tmp/.net + clear + exit 1 + else + _CONTINUE="" + fi +} + _net_interfaces() { find /sys/class/net/* -type l ! -name 'lo' -printf '%f ' -exec cat {}/address \; } @@ -42,18 +53,31 @@ _do_wireless() { iwctl station "${_INTERFACE}" disconnect &>"${_NO_LOG}" # clean old keys first! rm -f /var/lib/iwd/* &>"${_NO_LOG}" - #shellcheck disable=SC2086,SC2046 - _dialog --menu "Choose your SSID:\n(Empty spaces in your SSID are replaced by '+' char)" 14 60 7 \ - $(_essid_scan _) \ - "Hidden" "_" 2>"${_ANSWER}" || return 1 - _WLAN_SSID=$(cat "${_ANSWER}") + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + #shellcheck disable=SC2086,SC2046 + if _dialog --menu "Choose your SSID:\n(Empty spaces in your SSID are replaced by '+' char)" 14 60 7 \ + $(_essid_scan _) \ + "Hidden" "_" 2>"${_ANSWER}"; then + _WLAN_SSID=$(cat "${_ANSWER}") + _CONTINUE=1 + else + _abort + fi _WLAN_CONNECT="connect" if [[ "${_WLAN_SSID}" == "Hidden" ]]; then - _dialog --inputbox "Enter the hidden SSID:" 8 65 \ - "secret" 2>"${_ANSWER}" || return 1 - _WLAN_SSID=$(cat "${_ANSWER}") - _WLAN_CONNECT="connect-hidden" - _WLAN_HIDDEN=1 + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + if _dialog --inputbox "Enter the hidden SSID:" 8 65 \ + "secret" 2>"${_ANSWER}"; then + _WLAN_SSID=$(cat "${_ANSWER}") + _WLAN_CONNECT="connect-hidden" + _WLAN_HIDDEN=1 + _CONTINUE=1 + else + _abort + fi + done fi # replace # with spaces again #shellcheck disable=SC2001,SC2086 @@ -62,9 +86,17 @@ _do_wireless() { while [[ -z "${_WLAN_AUTH}" ]]; do # expect hidden network has a WLAN_KEY #shellcheck disable=SC2143 - if ! [[ "$(iwctl station "${_INTERFACE}" get-networks | grep -w "${_WLAN_SSID}" | cut -c 42-49 | grep -q 'open')" ]] || [[ "${_WLAN_CONNECT}" == "connect-hidden" ]]; then - _dialog --inputbox "Enter your KEY for SSID='${_WLAN_SSID}'" 8 50 "SecretWirelessKey" 2>"${_ANSWER}" || return 1 - _WLAN_KEY=$(cat "${_ANSWER}") + if ! [[ "$(iwctl station "${_INTERFACE}" get-networks | grep -w "${_WLAN_SSID}" | cut -c 42-49 | grep -q 'open')" ]] \ + || [[ "${_WLAN_CONNECT}" == "connect-hidden" ]]; then + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + _dialog --inputbox "Enter your KEY for SSID='${_WLAN_SSID}'" 8 50 "SecretWirelessKey" 2>"${_ANSWER}"; then + _WLAN_KEY=$(cat "${_ANSWER}") + _CONTINUE=1 + else + _abort + fi + done fi # time to connect _dialog --infobox "Connection to SSID='${_WLAN_SSID}' with interface ${_INTERFACE}..." 3 70 @@ -96,7 +128,7 @@ _donetwork() { #shellcheck disable=SC2086 _dialog --ok-label "Select" --menu "Select a network interface:" 12 40 6 ${_INTERFACES} 2>"${_ANSWER}" case $? in - 1) return 1 ;; + 1) _abort ;; 0) _INTERFACE=$(cat "${_ANSWER}") ;; esac done @@ -109,31 +141,70 @@ _donetwork() { fi # profile name _NETWORK_PROFILE="" - _dialog --inputbox "Enter your network profile name:" 7 40 "${_INTERFACE}-${_CONNECTION}" 2>"${_ANSWER}" || return 1 - _NETWORK_PROFILE=/etc/systemd/network/$(cat "${_ANSWER}").network + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + if _dialog --inputbox "Enter your network profile name:" 7 40 "${_INTERFACE}-${_CONNECTION}" 2>"${_ANSWER}"; then + _NETWORK_PROFILE=/etc/systemd/network/$(cat "${_ANSWER}").network + _CONTINUE=1 + else + _abort + fi + done # wifi setup first - _do_wireless || return 1 + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + if _do_wireless; then + _CONTINUE=1 + else + _abort + fi # dhcp switch _IP="" - _dialog --yesno "Do you want to use DHCP?" 5 40 - #shellcheck disable=SC2181 - if [[ $? -eq 0 ]]; then + if _dialog --yesno "Do you want to use DHCP?" 5 40; then _IP="dhcp" _IPADDR="" _GW="" _DNS="" else _IP="static" - _dialog --inputbox "Enter your IP address and netmask:" 8 40 "192.168.1.23/24" 2>"${_ANSWER}" || return 1 - _IPADDR=$(cat "${_ANSWER}") - _dialog --inputbox "Enter your gateway:" 8 40 "192.168.1.1" 2>"${_ANSWER}" || return 1 - _GW=$(cat "${_ANSWER}") - _dialog --inputbox "Enter your DNS server IP:" 8 40 "192.168.1.1" 2>"${_ANSWER}" || return 1 - _DNS=$(cat "${_ANSWER}") + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + if _dialog --inputbox "Enter your IP address and netmask:" 8 40 "192.168.1.23/24" 2>"${_ANSWER}"; then + _IPADDR=$(cat "${_ANSWER}") + _CONTINUE=1 + else + _abort + fi + done + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + if _dialog --inputbox "Enter your gateway:" 8 40 "192.168.1.1" 2>"${_ANSWER}"; then + _GW=$(cat "${_ANSWER}") + _CONTINUE=1 + else + _abort + fi + done + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + if _dialog --inputbox "Enter your DNS server IP:" 8 40 "192.168.1.1" 2>"${_ANSWER}", then + _DNS=$(cat "${_ANSWER}") + _CONTINUE=1 + else + _abort + fi + done fi - # http/ftp proxy settings - _dialog --inputbox "Enter your proxy server, for example:\nhttp://name:port\nhttp://ip:port\nhttp://username:password@ip:port\n\n Leave the field empty if no proxy is needed to install." 13 65 "" 2>"${_ANSWER}" || return 1 - _PROXY=$(cat "${_ANSWER}") + # http/ftp proxy settings + _CONTINUE="" + while [[ -z "${_CONTINUE}" ]]; do + if _dialog --inputbox "Enter your proxy server, for example:\nhttp://name:port\nhttp://ip:port\nhttp://username:password@ip:port\n\n Leave the field empty if no proxy is needed to install." 13 65 "" 2>"${_ANSWER}"; then + _PROXY=$(cat "${_ANSWER}") + _CONTINUE=1 + else + _abort + fi + done _PROXIES="http_proxy https_proxy ftp_proxy rsync_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY RSYNC_PROXY" _dialog --yesno "Are these settings correct?\n\nInterface: ${_INTERFACE}\nConnection: ${_CONNECTION}\nNetwork profile: ${_NETWORK_PROFILE}\nSSID: ${_WLAN_SSID}\nHidden: ${_WLAN_HIDDEN}\nKey: ${_WLAN_KEY}\ndhcp or static: ${_IP}\nIP address: ${_IPADDR}\nGateway: ${_GW}\nDNS server: ${_DNS}\nProxy setting: ${_PROXY}" 0 0 case $? in