mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-18 08:36:13 +00:00
Bundles the install-time hygiene work for issues #268 and #250. # Install location — #268 Stock SoundTouch rootfs has only a few MB free (~4 MB on the ST20 the reporter captured); the AfterTouch binary is ~12 MB. The previous flow downloaded into tmpfs (/media/aftertouch) and then `mv`'d the binary into /opt/aftertouch on rootfs — which fails with "No space left on device" on any speaker with the standard layout. install.sh now installs to /mnt/nv/aftertouch by default (the persistent partition, ~30 MB free on the same captures) and points /opt/aftertouch at it via a symlink so the init script's hardcoded DAEMON path keeps working unchanged. Power users can override with INSTALL_DIR=/some/other/path. The interactive prompt from the community patch in #268's thread is dropped — STDIN is the curl pipe under the documented `curl | sh` invocation, so a read prompt would hang or read garbage. uninstall.sh is updated to resolve the symlink and remove the target before unlinking, so the 12 MB binary doesn't get orphaned on /mnt/nv when users uninstall. # Logging — #250 Issue #250 surfaced a "running but unreachable" state: the install script reported AfterTouch as running, the init script's status agreed, but `curl :8000` returned connection-refused. start-stop- daemon's --background detaches stdout/stderr, so any panic the daemon emitted before dying went to /dev/null with no diagnostic trail. The fix is to route the daemon's stdout/stderr through `logger -t aftertouch` so output lands in BusyBox syslog — a bounded in-memory ring buffer that never grows on disk (writing to a file in /mnt/nv would have eaten the volume over months). Diagnostic flow is now: logread | grep aftertouch | tail -20 logread -f | grep aftertouch # live tail Matches the recipe already documented in TROUBLESHOOTING.md for the speaker's own logs (Curl 7 section). Tightening on top of the syslog change: - The init script's `status` case now also curls localhost:8000 when the PID is alive — distinguishes "PID alive, listener up" from "PID alive, listener silently died" (which is what fooled everyone on #250). A bare PID-liveness check returned "running" in both cases. - install.sh's post-install verification now does its own 10s curl probe after the init script returns; on failure it tails the aftertouch syslog so the user sees the actual error rather than the install script claiming success. - `exec` is added inside the start-stop-daemon's shell wrapper so --make-pidfile records the daemon's own PID (not the shell's), which keeps `stop` semantics correct. README updated to document the install location, INSTALL_DIR override, and the syslog tag. No automated tests — these are shell scripts the install pipeline runs once on the device. All three scripts pass `bash -n` / `sh -n` syntax checks. Real validation is end-user retest, gated on the next release. Refs #268, refs #250. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
23 lines
801 B
Bash
23 lines
801 B
Bash
#!/bin/sh
|
|
# Uninstall AfterTouch on-device. Handles both the historical
|
|
# layout (/opt/aftertouch as a directory) and the post-#268 layout
|
|
# (/opt/aftertouch as a symlink into /mnt/nv/aftertouch).
|
|
set -eu
|
|
|
|
/etc/init.d/aftertouch stop || true
|
|
rm -f /etc/init.d/aftertouch
|
|
update-rc.d -f aftertouch remove
|
|
|
|
# If /opt/aftertouch is a symlink, resolve it and remove the target
|
|
# before unlinking, so we don't leave ~12 MB of orphan binary on
|
|
# /mnt/nv. Tolerate either layout — readlink -f returns the same
|
|
# path for a real directory, and rm -rf on a missing path with
|
|
# set -eu would abort.
|
|
target="$(readlink -f /opt/aftertouch 2>/dev/null || echo /opt/aftertouch)"
|
|
if [ -e "$target" ]; then
|
|
rm -rf "$target"
|
|
fi
|
|
if [ -L /opt/aftertouch ] || [ -e /opt/aftertouch ]; then
|
|
rm -rf /opt/aftertouch
|
|
fi
|