edit pre-check
This commit is contained in:
117
start.sh
117
start.sh
@@ -1,16 +1,15 @@
|
||||
#!/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
|
||||
}
|
||||
|
||||
# Fehlende Pakete sammeln
|
||||
# Sammle fehlende Pakete
|
||||
MISSING_PKGS=()
|
||||
for cmd in "${REQUIRED_CMDS[@]}"; do
|
||||
if ! check_command "$cmd"; then
|
||||
@@ -18,35 +17,99 @@ for cmd in "${REQUIRED_CMDS[@]}"; do
|
||||
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[*]}"
|
||||
echo "Kein unterstützter Paketmanager gefunden. Bitte installiere die Pakete manuell: ${MISSING_PKGS[*]}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Installation abgebrochen. Beende."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "✅ Alle Voraussetzungen sind erfüllt."
|
||||
fi
|
||||
|
||||
# Am Ende das eigentliche Script starten
|
||||
# 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
|
||||
;;
|
||||
* )
|
||||
echo "Bitte mit Y oder N antworten."
|
||||
;;
|
||||
esac
|
||||
done
|
||||
else
|
||||
echo "✅ Alle Voraussetzungen sind bereits erfüllt."
|
||||
fi
|
||||
|
||||
# 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 "$@"
|
||||
|
||||
Reference in New Issue
Block a user