fix(arm64): tr -d '[:space:]' is parsed as literal char-set by busybox 1.30.1
Ubuntu's busybox-static 1.30.1 (which we use for the ARM64 rootfs after piCore64's BusyBox crashes in QEMU virt) doesn't recognize POSIX character classes. `tr -d '[:space:]'` is interpreted as "delete any of the literal characters [, :, s, p, a, c, e, ]" — so every s/p/a/c/e in module names and sysctl keys gets eaten. Symptoms in the boot log: virtio_net -> virtio_nt (e dropped) overlay -> ovrly (e, a dropped) bridge -> bridg (e dropped) nf_conntrack -> nf_onntrk (c, a, c dropped) net.bridge.bridge-nf-call-iptables -> nt.bridg.bridg-nf-ll-itbl Fix: use explicit whitespace chars `tr -d ' \t\r\n'` in both 30-kernel-modules.sh and 40-sysctl.sh. Works under any tr implementation. Also: filter functions.sh out of the init.d stage-copy loop. It's a shared library (sourced by init.sh), not a numbered stage. With it in init.d the main loop runs it as a stage after stage 90, then panics with "Init completed without exec'ing KubeSolo". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -84,10 +84,15 @@ if [ "$INJECT_ARCH" = "arm64" ] && [ -x /bin/busybox ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Init stages
|
||||
# Init stages — copy NN-name.sh files only. functions.sh is a shared library
|
||||
# (sourced by init.sh proper), not a numbered stage; if it ends up in init.d
|
||||
# the main loop will try to run it as a stage and fail.
|
||||
mkdir -p "$ROOTFS/usr/lib/kubesolo-os/init.d"
|
||||
for stage in "$PROJECT_ROOT"/init/lib/*.sh; do
|
||||
[ -f "$stage" ] || continue
|
||||
case "$(basename "$stage")" in
|
||||
functions.sh) continue ;;
|
||||
esac
|
||||
cp "$stage" "$ROOTFS/usr/lib/kubesolo-os/init.d/"
|
||||
chmod +x "$ROOTFS/usr/lib/kubesolo-os/init.d/$(basename "$stage")"
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user