blancco-init: use the cabled NIC, and stop hanging on a dead link
The UEFI init took the first interface in /sys/class/net and put 172.16.9.250 on it. On a PC with a second port, dock or USB NIC that can be the unplugged one; wget then sat at "Connecting to 172.16.9.1:80" forever (seen 2026-10-05 on a Dell, serial GGX6BN4). Bring every wired interface up and use the first with carrier; with no link anywhere, list the interfaces and drop to a shell. wget calls get -T 30 so a stalled transfer fails loudly instead of hanging. Live kexec-initrd.img was rebuilt with only init swapped (backup kexec-initrd.img.bak-20261005-pre-carrier).
This commit is contained in:
@@ -76,7 +76,38 @@ if [ -z "$IFACE" ]; then
|
||||
exec /bin/sh
|
||||
fi
|
||||
|
||||
echo " IFACE=$IFACE, bringing up..."
|
||||
# The first interface to appear is not necessarily the cabled one: a
|
||||
# second onboard port, a dock or a USB NIC can come first, and a static
|
||||
# IP on a dead port leaves wget at "Connecting" forever. Bring every
|
||||
# wired interface up and use the first with carrier.
|
||||
for n in /sys/class/net/*; do
|
||||
name="${n##*/}"
|
||||
case "$name" in lo|wl*) continue ;; esac
|
||||
ip link set "$name" up 2>/dev/null || ifconfig "$name" up 2>/dev/null || true
|
||||
done
|
||||
echo " Waiting up to 30s for a cabled interface..."
|
||||
CARRIER=""
|
||||
for i in $(seq 1 30); do
|
||||
for n in /sys/class/net/*; do
|
||||
name="${n##*/}"
|
||||
case "$name" in lo|wl*) continue ;; esac
|
||||
[ "$(cat "$n/carrier" 2>/dev/null)" = "1" ] && CARRIER="$name" && break 2
|
||||
done
|
||||
sleep 1
|
||||
echo -n "."
|
||||
done
|
||||
echo ""
|
||||
if [ -z "$CARRIER" ]; then
|
||||
echo "ERROR: no wired interface has link. Interfaces seen:"
|
||||
for n in /sys/class/net/*; do
|
||||
echo " ${n##*/} carrier=$(cat "$n/carrier" 2>/dev/null)"
|
||||
done
|
||||
echo "Check the cable, then type 'exit' to reboot."
|
||||
exec /bin/sh
|
||||
fi
|
||||
IFACE="$CARRIER"
|
||||
|
||||
echo " IFACE=$IFACE (has link), bringing up..."
|
||||
ip link set "$IFACE" up || ifconfig "$IFACE" up
|
||||
sleep 2
|
||||
|
||||
@@ -87,7 +118,7 @@ echo " IP: 172.16.9.250 SERVER: $SERVER"
|
||||
ip addr
|
||||
|
||||
echo "[3/5] Downloading airootfs.sfs (~756 MB)..."
|
||||
wget -O /tmp/airootfs.sfs http://$SERVER/blancco/arch/x86_64/airootfs.sfs 2>&1
|
||||
wget -T 30 -O /tmp/airootfs.sfs http://$SERVER/blancco/arch/x86_64/airootfs.sfs 2>&1
|
||||
[ -s /tmp/airootfs.sfs ] || { echo "ERROR: download failed"; exec /bin/sh; }
|
||||
|
||||
echo "[4/5] Mounting rootfs + overlay..."
|
||||
@@ -101,7 +132,7 @@ mkdir -p /run/upper/upper /run/upper/work
|
||||
mount -t overlay overlay -o lowerdir=/run/lower,upperdir=/run/upper/upper,workdir=/run/upper/work /run/newroot
|
||||
|
||||
echo "[5/5] Fetching kmod tarball + config..."
|
||||
wget -O /tmp/kmod.tar.gz http://$SERVER/blancco/kmod.tar.gz 2>&1
|
||||
wget -T 30 -O /tmp/kmod.tar.gz http://$SERVER/blancco/kmod.tar.gz 2>&1
|
||||
[ -s /tmp/kmod.tar.gz ] && (cd /run/newroot && gunzip -c /tmp/kmod.tar.gz | tar xf - && rm -f /tmp/kmod.tar.gz)
|
||||
|
||||
mkdir -p /run/newroot/albus
|
||||
@@ -111,7 +142,7 @@ mkdir -p /run/newroot/albus
|
||||
# /albus/preferences.save (factory defaults, empty network_share) so
|
||||
# erasure reports never reach SMB. Fail loud here instead.
|
||||
PREFS=/run/newroot/albus/preferences.xml
|
||||
if ! wget -O "$PREFS" "http://$SERVER/blancco/preferences.xml"; then
|
||||
if ! wget -T 30 -O "$PREFS" "http://$SERVER/blancco/preferences.xml"; then
|
||||
echo "ERROR: preferences.xml download failed from http://$SERVER/blancco/preferences.xml"
|
||||
echo "Reports would fall back to factory defaults (no SMB target)."
|
||||
echo "Dropping to shell - check Apache + network."
|
||||
@@ -132,7 +163,7 @@ fi
|
||||
# fires, we want the fallback to still have the right SMB target.
|
||||
cp -f "$PREFS" /run/newroot/albus/preferences.save
|
||||
|
||||
if ! wget -O /run/newroot/albus/config.xml "http://$SERVER/blancco/config-clean.xml"; then
|
||||
if ! wget -T 30 -O /run/newroot/albus/config.xml "http://$SERVER/blancco/config-clean.xml"; then
|
||||
echo "ERROR: config.xml (license container) download failed."
|
||||
exec /bin/sh
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user