diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2020-12-13 20:20:37 +0000 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2020-12-13 20:20:37 +0000 |
commit | 9e13d886dfcd0c0791611ed7b87a79560553ef8b (patch) | |
tree | c7812243dd78e6e385820c76b4d2c59bfb29ee0b | |
parent | 7bb534066d40009c16ae03460ffe7a716ad3ea43 (diff) | |
parent | 947717dc0c9aa1a1c116121f616cc7f5408cb8bf (diff) |
Merge branch 'net-wait' into 'master'
configure_networking(): Wait for specified network device
See merge request kernel-team/initramfs-tools!32
-rwxr-xr-x | init | 5 | ||||
-rw-r--r-- | scripts/functions | 34 | ||||
-rw-r--r-- | scripts/local | 17 |
3 files changed, 42 insertions, 14 deletions
@@ -217,6 +217,10 @@ maybe_break modules load_modules [ "$quiet" != "y" ] && log_end_msg +starttime="$(_uptime)" +starttime=$((starttime + 1)) # round up +export starttime + if [ "$ROOTDELAY" ]; then sleep "$ROOTDELAY" fi @@ -309,6 +313,7 @@ unset noresume unset fastboot unset forcefsck unset fsckfix +unset starttime # Move virtual filesystems over to the real filesystem mount -n -o move /sys ${rootmnt}/sys diff --git a/scripts/functions b/scripts/functions index eccad66..53dcb96 100644 --- a/scripts/functions +++ b/scripts/functions @@ -144,6 +144,25 @@ load_modules() fi } +_uptime() { + local uptime + uptime="$(cat /proc/uptime)" + uptime="${uptime%%[. ]*}" + echo "$uptime" +} + +time_elapsed() { + # shellcheck disable=SC2154 + if [ -z "$starttime" ]; then + log_failure_msg "time_elapsed() called before \$starttime initialized" + echo 0 + fi + local delta + delta="$(_uptime)" + delta=$((delta - starttime)) + echo "$delta" +} + # lilo compatibility parse_numeric() { case $1 in @@ -257,6 +276,21 @@ configure_networking() # networking already configured thus bail out [ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ] && return 0 + if [ -n "${DEVICE}" ]; then + local netdevwait=180 + log_begin_msg "Waiting up to ${netdevwait} secs for ${DEVICE} to become available" + while [ "$(time_elapsed)" -lt "$netdevwait" ]; do + if [ -e "/sys/class/net/${DEVICE}" ]; then + break + fi + sleep 1 + done + if [ ! -e "/sys/class/net/${DEVICE}" ]; then + log_failure_msg "Interface ${DEVICE} did not appear in time" + fi + log_end_msg + fi + wait_for_udev 10 # support ip options see linux sources diff --git a/scripts/local b/scripts/local index a103e68..becb798 100644 --- a/scripts/local +++ b/scripts/local @@ -8,14 +8,6 @@ local_top() [ "$quiet" != "y" ] && log_end_msg fi local_top_used=yes - - # Start time for measuring elapsed time in local_device_setup - if [ -z "${local_top_time}" ]; then - local_top_time="$(cat /proc/uptime)" - local_top_time="${local_top_time%%[. ]*}" - local_top_time=$((local_top_time + 1)) # round up - export local_top_time - fi } local_block() @@ -44,7 +36,6 @@ local_bottom() fi local_premount_used=no local_top_used=no - unset local_top_time } # $1=device ID to mount @@ -94,9 +85,7 @@ local_device_setup() while true; do sleep 1 - time_elapsed="$(cat /proc/uptime)" - time_elapsed="${time_elapsed%%[. ]*}" - time_elapsed=$((time_elapsed - local_top_time)) + time_elapsed="$(time_elapsed)" local_block "${dev_id}" @@ -113,7 +102,7 @@ local_device_setup() else break fi - if [ ${count} -ge ${time_elapsed} ]; then + if [ "${count}" -ge "${time_elapsed}" ]; then break; fi /scripts/local-block/mdadm "${dev_id}" @@ -125,7 +114,7 @@ local_device_setup() log_end_msg 0 break fi - if [ ${time_elapsed} -ge "${slumber}" ]; then + if [ "${time_elapsed}" -ge "${slumber}" ]; then log_end_msg 1 || true break fi |