From aad7f5bfb0139e51ea2a987d843ebf65aa104cbf Mon Sep 17 00:00:00 2001 From: Ivan Li Date: Thu, 11 Dec 2025 23:14:18 +0800 Subject: [PATCH] fix: make init script interactive over tty Signed-off-by: Ivan Li --- alpine/init.sh | 59 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/alpine/init.sh b/alpine/init.sh index 4c78a3c..03fd391 100755 --- a/alpine/init.sh +++ b/alpine/init.sh @@ -11,6 +11,35 @@ set -u +read_tty() { + # Usage: read_tty VAR "prompt" + local __varname="$1" + shift + local __prompt="$*" + + if [ -n "$__prompt" ]; then + if [ -r /dev/tty ]; then + printf '%s' "$__prompt" > /dev/tty + else + printf '%s' "$__prompt" + fi + fi + + if [ -r /dev/tty ]; then + if ! read -r "$__varname" < /dev/tty; then + eval "$__varname=''" + return 1 + fi + else + if ! read -r "$__varname"; then + eval "$__varname=''" + return 1 + fi + fi + + return 0 +} + SSH_AUTH_KEYS_URL="https://webdav-syncthing.ivanli.cc/Ivan-Personal/Credentials/Public/authorized_keys-uys8y1bkrxi55v0gOJWtrKJ2uM9TLsUq" info() { @@ -80,12 +109,15 @@ configure_timezone() { set_root_password() { info "Now setting root password (you will be prompted by passwd)." while :; do - if passwd root; then + if [ -r /dev/tty ]; then + if passwd root