From 64eabbbbaaa2cdd3099028eb35a8df170baeaf03 Mon Sep 17 00:00:00 2001 From: "Gerd v. Egidy" Date: Sat, 4 Jun 2022 17:10:43 +0200 Subject: [PATCH] wait until we are online before doing a http/https load-srm There is no dependency on NetworkManager being actually online when sysrescue-initialize.py calls load-srm to honor the late_load_srm config option. So without this patch this can fail when the network takes a few seconds until the link is actually up. Fixes #288 --- airootfs/usr/share/sysrescue/bin/load-srm | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/airootfs/usr/share/sysrescue/bin/load-srm b/airootfs/usr/share/sysrescue/bin/load-srm index 81ca393..bf1adaf 100755 --- a/airootfs/usr/share/sysrescue/bin/load-srm +++ b/airootfs/usr/share/sysrescue/bin/load-srm @@ -243,6 +243,41 @@ curl_download() return 0 } +wait_online() +{ + # timeout in seconds + local timeout=$1 + + # 4 tests per second + local tries=$[$timeout*4] + local online=0 + + while [[ $tries -gt 0 ]]; do + if /usr/bin/nm-online --timeout=0 --quiet; then + # we are online + online=1 + break + fi + tries=$[$tries-1] + if [[ $tries -eq 0 ]]; then + # no unnecessary sleep+message at the end + continue + fi + + # print a message every 5 seconds (=20 tests) to not spam the console + if [[ $(expr $tries % 20) == "0" ]]; then + echo "Waiting for network connection ($[tries/4]s of ${timeout}s left)..." + fi + + sleep 0.25 + done + + if [[ $online -eq 0 ]]; then + # the user could have circumvented NetworkManager + echo "No network connection detected by NetworkManager, trying download anyway" + fi +} + ################################# # execution begins here @@ -251,6 +286,10 @@ parse_args "$@" [[ $VERBOSE -eq 1 ]] && echo "URL/path: $URL" if [[ $URL_PROTO == "http" ]] || [[ $URL_PROTO == "https" ]]; then + # wait until we have some kind on network connection before trying the download + # waiting is important even if we try downloading anyways: the network may take some time to get up + wait_online 30 + curl_download # replace the URL parameter with the location we downloaded the file to URL="$TMPDIR/srm"