mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-11 16:54:07 +01:00
Shell redirections are builtins, so no PATH stub can intercept `cat > /etc/modprobe.d/x.conf`. That left installer scripts unverifiable: stub cp/chmod/ln and the trace is nearly empty, don't and the run rewrites the live system. --prefix redirects HOME and every XDG_* base into a temp tree. XDG_DATA_HOME is exported explicitly, not left to default off HOME: install_leechblock.sh reads it directly and then runs `rsync -a --delete` at it. --bind-abs binds hardcoded absolutes via bwrap --unshare-user --uid 0, leaf directories only. uid 0 is load-bearing beyond permissions: common.sh's require_root does `exec sudo "$0"`, and under the sudo stub that truncated the whole run to one recorded call -- a trace that diffs clean against any split. Binding /etc wholesale was measured to shadow /etc/passwd, collapse $SUDO_USER to /home//, and mask a nested bind, so the scanner never emits it. The trace gains a manifest of every file written, with content hashes. That section is the point: with it, a dropped write in the fixture pair is a one-line diff; with it stripped, the two traces are identical, i.e. the old harness passed that broken split. Hashes normalize the prefix to @PREFIX@ because install_usage_monitoring.sh writes an unquoted heredoc that bakes $HOME into the artifact. Verified: ~/.config/systemd/user, ~/.local/bin, ~/.local/share and /etc/modprobe.d byte-identical before and after; usage-report units still 2. The three prior regressions are now committed fixtures rather than ad-hoc -- one was silently neutered mid-change when a trailing echo added for SC2034 became the function's last statement and turned exit 1 into exit 0. Stub generation moved to lib/ because --prefix pushed the harness to 252 lines, over the cap it exists to serve. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
36 lines
953 B
Bash
Executable File
36 lines
953 B
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Fixture: the BROKEN split of dropped_write_before.sh.
|
|
#
|
|
# The .timer write was lost -- the kind of thing that happens when a heredoc
|
|
# falls across a seam during a split. Everything else is identical: same exit
|
|
# status, same stubbed systemctl call, same stdout "install complete".
|
|
#
|
|
# Diffing a --prefix trace of this against its partner must show the missing
|
|
# demo-agent.timer line. That diff is the whole point of the manifest.
|
|
|
|
set -euo pipefail
|
|
|
|
bin_dir="$HOME/.local/bin"
|
|
unit_dir="$HOME/.config/systemd/user"
|
|
mkdir -p "$bin_dir" "$unit_dir"
|
|
|
|
cat >"$bin_dir/demo-agent.sh" <<'SCRIPT'
|
|
#!/usr/bin/env bash
|
|
echo "demo agent running"
|
|
SCRIPT
|
|
chmod +x "$bin_dir/demo-agent.sh"
|
|
|
|
cat >"$unit_dir/demo-agent.service" <<'UNIT'
|
|
[Unit]
|
|
Description=Demo agent
|
|
|
|
[Service]
|
|
ExecStart=%h/.local/bin/demo-agent.sh
|
|
UNIT
|
|
|
|
# The .timer heredoc that belongs here was dropped by the split.
|
|
|
|
systemctl --user daemon-reload
|
|
echo "install complete"
|