diff options
| author | Calvin <calvinm@kissingerassoc.com> | 2026-08-16 21:43:08 -0400 |
|---|---|---|
| committer | Calvin <calvinm@kissingerassoc.com> | 2026-08-16 21:43:08 -0400 |
| commit | 1dd2bb31754781ad179d3aff7d354cc271c629b9 (patch) | |
| tree | d7aeb26d791e9f69c42f055507b61a3fd4ca1b51 | |
| parent | 147b0ca1e4e00f66abb47fff3c543b853033f609 (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-x | svc/termrc.work | 10 |
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 |
