summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2020-12-13 20:20:37 +0000
committerBen Hutchings <ben@decadent.org.uk>2020-12-13 20:20:37 +0000
commit9e13d886dfcd0c0791611ed7b87a79560553ef8b (patch)
treec7812243dd78e6e385820c76b4d2c59bfb29ee0b
parent7bb534066d40009c16ae03460ffe7a716ad3ea43 (diff)
parent947717dc0c9aa1a1c116121f616cc7f5408cb8bf (diff)
Merge branch 'net-wait' into 'master'
configure_networking(): Wait for specified network device See merge request kernel-team/initramfs-tools!32
-rwxr-xr-xinit5
-rw-r--r--scripts/functions34
-rw-r--r--scripts/local17
3 files changed, 42 insertions, 14 deletions
diff --git a/init b/init
index 0eaee1c..b7f1cc7 100755
--- a/init
+++ b/init
@@ -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