summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalvin <calvinm@kissingerassoc.com>2026-08-16 21:43:08 -0400
committerCalvin <calvinm@kissingerassoc.com>2026-08-16 21:43:08 -0400
commit1dd2bb31754781ad179d3aff7d354cc271c629b9 (patch)
treed7aeb26d791e9f69c42f055507b61a3fd4ca1b51
parent147b0ca1e4e00f66abb47fff3c543b853033f609 (diff)
termrc: add unsupervised rescue shell on /dev/eia1
eia0 cannot be interrupted -- a plain uart turns DEL into a byte, not a note -- so a command blocked on eia0 can only be killed from an independent shell. Both serial shells are deliberately not services: they are the channel you need when the supervisor is what is broken, so they start above svcinit and do not depend on it.
-rwxr-xr-xsvc/termrc.work10
1 files changed, 10 insertions, 0 deletions
diff --git a/svc/termrc.work b/svc/termrc.work
index 9c12bf0..627c8b4 100755
--- a/svc/termrc.work
+++ b/svc/termrc.work
@@ -15,6 +15,16 @@ mount -qb /srv/cons /dev
# serial shell for host-side control
while(){ rc -i </dev/eia0 >/dev/eia0 >[2=1]; sleep 1 }&
+# rescue shell on the second uart. eia0 cannot be interrupted: it is a plain
+# uart, not the console, so DEL over it is only a byte and the kernel never
+# turns it into a note. A command blocked on eia0 can therefore be killed
+# only from an independent shell, which is this one.
+#
+# Both of these are deliberately NOT services. They are the channel you need
+# when the supervisor is the thing that is broken, so they must not depend on
+# it -- note they start here, above svcinit.
+while(){ rc -i </dev/eia1 >/dev/eia1 >[2=1]; sleep 1 }&
+
# mount points (if not done by bootrc already)
>[2]/dev/null {
mntgen -s slashn /n && chmod 666 /srv/slashn