#!/usr/bin/env bash # go.sh -- create a private network namespace (loopback only, no route), # run run.sh inside it, then tear the namespace down. Env knobs pass through to run.sh. export REPRO=${REPRO:-$(cd "$(dirname "$0")" && pwd)} export RUNS=${RUNS:-$HOME/fd-guard-runs} OUT=$RUNS/$1; mkdir -p "$OUT" setsid unshare -rn sh -c "ip link set lo up && echo \$\$ > $OUT/ns.pid && exec sleep infinity" /dev/null 2>&1 & for _ in 1 2 3 4 5 6 7 8 9 10; do [ -s "$OUT/ns.pid" ] && break; sleep 0.3; done NSP=$(cat "$OUT/ns.pid") cp "$REPRO/run.sh" "$OUT/run.sh.snapshot" # run a frozen copy: editing run.sh cannot disturb a live run nsenter -t "$NSP" -U -n --preserve-credentials bash "$OUT/run.sh.snapshot" "$@" > "$OUT/go.txt" 2>&1 rc=$? kill "$NSP" 2>/dev/null echo "go.sh: run.sh rc=$rc, namespace holder $NSP killed" >> "$OUT/go.txt"