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:
@@ -16,7 +16,11 @@ while IFS= read -r mod; do
|
||||
case "$mod" in
|
||||
'#'*|'') continue ;;
|
||||
esac
|
||||
mod="$(echo "$mod" | tr -d '[:space:]')"
|
||||
# NOTE: do NOT use tr -d '[:space:]' — Ubuntu's busybox-static 1.30.1 (used
|
||||
# in the ARM64 rootfs override) doesn't parse POSIX char classes and treats
|
||||
# them as a literal set, deleting [, :, s, p, a, c, e, ]. Use explicit
|
||||
# whitespace chars instead so the same script works under any tr.
|
||||
mod="$(printf '%s' "$mod" | tr -d ' \t\r\n')"
|
||||
if modprobe "$mod" 2>/dev/null; then
|
||||
LOADED=$((LOADED + 1))
|
||||
else
|
||||
|
||||
@@ -8,8 +8,11 @@ for conf in /etc/sysctl.d/*.conf; do
|
||||
case "$key" in
|
||||
'#'*|'') continue ;;
|
||||
esac
|
||||
key="$(echo "$key" | tr -d '[:space:]')"
|
||||
value="$(echo "$value" | tr -d '[:space:]')"
|
||||
# NOTE: do NOT use tr -d '[:space:]' — see 30-kernel-modules.sh for the
|
||||
# rationale. Use explicit whitespace chars so this works under
|
||||
# Ubuntu's busybox-static tr too.
|
||||
key="$(printf '%s' "$key" | tr -d ' \t\r\n')"
|
||||
value="$(printf '%s' "$value" | tr -d ' \t\r\n')"
|
||||
if [ -n "$key" ] && [ -n "$value" ]; then
|
||||
sysctl -w "${key}=${value}" >/dev/null 2>&1 || \
|
||||
log_warn "Failed to set sysctl: ${key}=${value}"
|
||||
|
||||
Reference in New Issue
Block a user