Two critical bugs fixed:
1. Install scripts (80+) using 'read' for interactive prompts all fail because
lxc-attach stdin was redirected from /dev/null. Change to /dev/tty so install
scripts like immich, elementsynapse, etc. can prompt the user interactively.
2. Recovery menu read gets 'Input/output error' from /dev/tty after the
lxc-attach|tee pipeline corrupts the terminal state. Pre-open a separate
file descriptor to /dev/tty BEFORE the pipeline starts. This fd survives
any tty corruption and is used as fallback for the recovery menu read.
Fixes the 'command not found' issue where user input falls through to the
parent shell.
Both build.func (main install + APT retry) and error_handler.func (fallback
cleanup prompt) are updated with the same pattern.