diff --git a/packages/bsp/common/usr/lib/armbian/armbian-firstlogin b/packages/bsp/common/usr/lib/armbian/armbian-firstlogin index 6ec596665a..5e75a3e1b6 100755 --- a/packages/bsp/common/usr/lib/armbian/armbian-firstlogin +++ b/packages/bsp/common/usr/lib/armbian/armbian-firstlogin @@ -139,6 +139,41 @@ do_firstrun_automated_network_configuration() fi } #do_firstrun_automated_network_configuration +# Try to retrieve the local IP address to display +get_local_ip_addr() { + # IP of the QUAD9 DNS resolver https://quad9.net/ + PingServerAddress="9.9.9.9" + # How many times to ping before the script can continue (1 ping is about 1 second) + pingcount=6 + + # First ping + ping -c 1 ${PingServerAddress} > /dev/null 2>&1 + + while [ $? -ne 0 ] && [ ${pingcount} -gt 0 ]; do + pingcount=$((pingcount - 1)) + GET_IP=$(ip -4 addr show scope global | grep inet | awk '{print $2}' | cut -d/ -f1) + + # Set retry message if no IP address has been found yet + if [[ -z "$GET_IP" ]]; then + MESSAGE="\e[1m\e[97mWaiting for local connection\x1B[0m! Retrying... (${pingcount})" + fi + + # Set timeout message if no retries are left + if [[ $pingcount -eq 0 ]]; then + MESSAGE="\e[1m\e[31mNetwork connection timeout\x1B[0m!" + fi + + # Display the message + echo -e "\e[1A\e[KIP address: \x1B[92m${GET_IP}\x1B[0m ${MESSAGE}" + + [[ -n "$GET_IP" ]] && break + + # Wait for 1 second and ping the server address again + sleep 1 + ping -c 1 $PingServerAddress > /dev/null 2>&1 + done +} + read_password() { unset password @@ -510,53 +545,9 @@ if [[ -f /root/.not_logged_in_yet && -n $(tty) ]]; then echo -e "Documentation: \e[1m\e[92m${VENDORDOCS}\x1B[0m | Community support: \e[1m\e[92m${VENDORSUPPORT}\x1B[0m\n" echo "" # empty line - # IP of the QUAD9 DNS resolver https://quad9.net/ - PingServerAddress="9.9.9.9" - pingcount=11 - # Try to retrieve the local IP address to display - retrieve_ip_addr() { - # First ping - ping -c 1 ${PingServerAddress} > /dev/null 2>&1 - - while [ $? -ne 0 ] && [ ${pingcount} -gt 0 ]; do - pingcount=$((pingcount - 1)) - GET_IP=$(ip -4 addr show scope global | grep inet | awk '{print $2}' | cut -d/ -f1) - - # Check if the IP address has been found - if [[ -z "$GET_IP" ]]; then - RETRY="\e[1m\e[97mWaiting for connection\x1B[0m! Retrying (${pingcount})" - fi - - # Set the retry message - if [[ $pingcount -eq 0 ]]; then - RETRY="\e[1m\e[31mNetwork connection timeout\x1B[0m!" - fi - - # Save the current cursor position - echo -ne "\e[s" - - # Move the cursor to the fixed IP address row and clear the line - echo -ne "\e[${ip_address_row};0H\e[K" - - # Display the retry message - echo -e "\e[1A\e[KIP address: \x1B[92m${GET_IP}\x1B[0m ${RETRY}" - - # Restore the cursor position - echo -ne "\e[u" - - [[ -n "$GET_IP" ]] && break - - # Wait for 1 second and ping the server address again - sleep 1 - ping -c 1 $PingServerAddress > /dev/null 2>&1 - done - } - - # Save the row number after the last output - ip_address_row=$(($(tput lines) - 1)) - # Run the IP retrieval function in the background - retrieve_ip_addr & + # Try to get the local IP address (script halts until IP was found or x retries were done) + get_local_ip_addr echo "" # empty line