From 6157d7e27d55a54a4fe01d3e9161d95db770ac2a Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Tue, 19 May 2026 22:14:51 +0200 Subject: [PATCH] KI-AGENT: Nutze Terminaleingabe im Selfhost Installer --- scripts/selfhost-install.sh | 20 +++++++++++++++++++- scripts/selfhost-setup.sh | 26 ++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/scripts/selfhost-install.sh b/scripts/selfhost-install.sh index 736da36..f60f9fe 100755 --- a/scripts/selfhost-install.sh +++ b/scripts/selfhost-install.sh @@ -6,6 +6,12 @@ FEDEO_REF="${FEDEO_REF:-dev}" FEDEO_DIR="${FEDEO_DIR:-/opt/fedeo}" SETUP_ARGS=("$@") FEDEO_USE_SUDO_DOCKER="${FEDEO_USE_SUDO_DOCKER:-false}" +TTY_INPUT="${FEDEO_TTY_INPUT:-/dev/tty}" +TTY_FD="" + +if { exec 3<"$TTY_INPUT"; } 2>/dev/null; then + TTY_FD="3" +fi SUDO="" if [[ "$(id -u)" -ne 0 ]]; then @@ -35,13 +41,21 @@ Umgebung: USAGE } +read_interactive() { + if [[ -n "$TTY_FD" ]]; then + read -u "$TTY_FD" "$@" + else + read "$@" + fi +} + yes_no() { local label="$1" local default_value="${2:-j}" local answer while true; do - read -r -p "$label [$default_value]: " answer + read_interactive -r -p "$label [$default_value]: " answer answer="${answer:-$default_value}" case "$answer" in y|Y|j|J|yes|Yes|ja|Ja) @@ -179,6 +193,10 @@ EOF echo "Starte Selfhost-Assistent..." cd "$FEDEO_DIR" export FEDEO_USE_SUDO_DOCKER + export FEDEO_TTY_INPUT="$TTY_INPUT" + if [[ "$TTY_INPUT" == "/dev/tty" && -r "$TTY_INPUT" ]]; then + exec bash scripts/selfhost-setup.sh "${SETUP_ARGS[@]}" <"$TTY_INPUT" + fi exec bash scripts/selfhost-setup.sh "${SETUP_ARGS[@]}" } diff --git a/scripts/selfhost-setup.sh b/scripts/selfhost-setup.sh index 62ab14d..70c4fe1 100755 --- a/scripts/selfhost-setup.sh +++ b/scripts/selfhost-setup.sh @@ -9,6 +9,20 @@ COMPOSE_FILE="$ROOT_DIR/docker-compose.selfhost.yml" MODE="" START_STACK="ask" FORCE="false" +TTY_INPUT="${FEDEO_TTY_INPUT:-/dev/tty}" +TTY_FD="" + +if { exec 3<"$TTY_INPUT"; } 2>/dev/null; then + TTY_FD="3" +fi + +read_interactive() { + if [[ -n "$TTY_FD" ]]; then + read -u "$TTY_FD" "$@" + else + read "$@" + fi +} compose() { if [[ "${FEDEO_USE_SUDO_DOCKER:-false}" == "true" ]]; then @@ -94,10 +108,10 @@ prompt() { local value if [[ -n "$default_value" ]]; then - read -r -p "$label [$default_value]: " value + read_interactive -r -p "$label [$default_value]: " value echo "${value:-$default_value}" else - read -r -p "$label: " value + read_interactive -r -p "$label: " value echo "$value" fi } @@ -123,11 +137,11 @@ prompt_secret() { local value if [[ -n "$default_value" ]]; then - read -r -s -p "$label [vorbelegt, Enter übernimmt]: " value + read_interactive -r -s -p "$label [vorbelegt, Enter übernimmt]: " value echo >&2 echo "${value:-$default_value}" else - read -r -s -p "$label: " value + read_interactive -r -s -p "$label: " value echo >&2 echo "$value" fi @@ -139,7 +153,7 @@ yes_no() { local answer while true; do - read -r -p "$label [$default_value]: " answer + read_interactive -r -p "$label [$default_value]: " answer answer="${answer:-$default_value}" case "$answer" in y|Y|j|J|yes|Yes|ja|Ja) @@ -168,7 +182,7 @@ choose_mode() { local choice while true; do - read -r -p "Modus wählen [1]: " choice + read_interactive -r -p "Modus wählen [1]: " choice case "${choice:-1}" in 1|einfach|simple) MODE="simple"