From c45aaa5bced5984cfbf047e53589089b4167384f Mon Sep 17 00:00:00 2001 From: pi-farm Date: Fri, 26 Sep 2025 12:51:00 +0200 Subject: [PATCH] edit pre-check --- start.sh | 123 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 93 insertions(+), 30 deletions(-) diff --git a/start.sh b/start.sh index 322d2d8..698cfd1 100755 --- a/start.sh +++ b/start.sh @@ -1,52 +1,115 @@ #!/usr/bin/env bash +set -euo pipefail -set -e +# Benötigte Kommandos (auch als Paketnamen verwendet) +REQUIRED_CMDS=(jq whiptail dialog sudo) -# Liste der benötigten Pakete -REQUIRED_CMDS=("jq" "whiptail" "dialog" "sudo") - -# Funktion: prüfen ob Kommando existiert +# Prüft, ob ein Kommando existiert check_command() { - command -v "$1" >/dev/null 2>&1 + command -v "$1" >/dev/null 2>&1 } -# Fehlende Pakete sammeln +# Sammle fehlende Pakete MISSING_PKGS=() for cmd in "${REQUIRED_CMDS[@]}"; do - if ! check_command "$cmd"; then - MISSING_PKGS+=("$cmd") - fi + if ! check_command "$cmd"; then + MISSING_PKGS+=("$cmd") + fi done -# Wenn etwas fehlt, Installation vorschlagen +# Helper: führe Befehl als root aus (wenn möglich) +run_as_root() { + if [ "$(id -u)" -eq 0 ]; then + "$@" + elif command -v sudo >/dev/null 2>&1; then + sudo "$@" + elif command -v su >/dev/null 2>&1; then + # su -c nimmt eine String-Command; wir bauen sie aus den args + su -c "$*" + else + echo "Fehler: Keine Möglichkeit, Befehle als root auszuführen (weder sudo noch su)." + return 2 + fi +} + if [ ${#MISSING_PKGS[@]} -ne 0 ]; then - echo "❌ Folgende Pakete fehlen: ${MISSING_PKGS[*]}" - - if whiptail --title "Fehlende Pakete" \ - --yesno "Die folgenden Pakete fehlen:\n\n${MISSING_PKGS[*]}\n\nSollen diese jetzt installiert werden?" 15 60; then - + echo "❌ Fehlende Pakete: ${MISSING_PKGS[*]}" + # Interaktive Abfrage (CLI only) + while true; do + read -r -p "Möchtest du diese jetzt automatisch installieren? [Y/n] " REPLY + REPLY=${REPLY:-Y} + case "$REPLY" in + [Yy]|[Yy][Ee][Ss] ) # Paketmanager erkennen if command -v apt-get >/dev/null 2>&1; then - sudo apt-get update - sudo apt-get install -y "${MISSING_PKGS[@]}" - elif command -v yum >/dev/null 2>&1; then - sudo yum install -y "${MISSING_PKGS[@]}" + INSTALL_CMD=(apt-get install -y) + PREPARE_CMD=(apt-get update) elif command -v dnf >/dev/null 2>&1; then - sudo dnf install -y "${MISSING_PKGS[@]}" + INSTALL_CMD=(dnf install -y) + elif command -v yum >/dev/null 2>&1; then + INSTALL_CMD=(yum install -y) + elif command -v pacman >/dev/null 2>&1; then + INSTALL_CMD=(pacman -S --noconfirm) elif command -v zypper >/dev/null 2>&1; then - sudo zypper install -y "${MISSING_PKGS[@]}" + INSTALL_CMD=(zypper install -y) + elif command -v apk >/dev/null 2>&1; then + INSTALL_CMD=(apk add --no-cache) + elif command -v brew >/dev/null 2>&1; then + INSTALL_CMD=(brew install) else - echo "Kein unterstützter Paketmanager gefunden! Bitte installiere die Pakete manuell: ${MISSING_PKGS[*]}" - exit 1 + echo "Kein unterstützter Paketmanager gefunden. Bitte installiere die Pakete manuell: ${MISSING_PKGS[*]}" + exit 1 fi - else - echo "Installation abgebrochen. Beende." + + # Falls apt-get: update vorher ausführen + if [ "${INSTALL_CMD[0]}" = "apt-get" ]; then + echo "Führe apt-get update aus..." + if ! run_as_root "${PREPARE_CMD[@]}"; then + echo "Konnte 'apt-get update' nicht als root ausführen." + exit 1 + fi + fi + + echo "Starte Installation: ${MISSING_PKGS[*]}" + if ! run_as_root "${INSTALL_CMD[@]}" "${MISSING_PKGS[@]}"; then + echo "Installation fehlgeschlagen. Bitte installiere die Pakete manuell oder führe das Script als root aus." + exit 1 + fi + + # Erneut prüfen + STILL_MISSING=() + for cmd in "${MISSING_PKGS[@]}"; do + if ! check_command "$cmd"; then + STILL_MISSING+=("$cmd") + fi + done + + if [ ${#STILL_MISSING[@]} -ne 0 ]; then + echo "Die folgenden Pakete konnten nicht installiert werden: ${STILL_MISSING[*]}" + echo "Bitte prüfe manuell oder installiere sie und starte das Script erneut." + exit 1 + fi + + echo "✅ Fehlende Pakete wurden installiert." + break + ;; + [Nn]|[Nn][Oo] ) + echo "Abbruch durch Benutzer. Bitte installiere die benötigten Pakete manuell: ${MISSING_PKGS[*]}" exit 1 - fi + ;; + * ) + echo "Bitte mit Y oder N antworten." + ;; + esac + done else - echo "✅ Alle Voraussetzungen sind erfüllt." + echo "✅ Alle Voraussetzungen sind bereits erfüllt." fi -# Am Ende das eigentliche Script starten -echo "🚀 Starte image-builder.sh..." +# Am Ende image-builder.sh starten (das Script soll Docker/Buildx selbst behandeln) +if [ ! -x ./image-builder.sh ]; then + echo "Warnung: ./image-builder.sh nicht gefunden oder nicht ausführbar. Stelle sicher, dass image-builder.sh vorhanden ist und ausführbar ist." +fi + +echo "🚀 Starte image-builder.sh ..." exec ./scripts/image-builder.sh "$@"