edit pre-check
This commit is contained in:
111
start.sh
111
start.sh
@@ -1,16 +1,15 @@
|
|||||||
#!/usr/bin/env bash
|
#!/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
|
# Prüft, ob ein Kommando existiert
|
||||||
REQUIRED_CMDS=("jq" "whiptail" "dialog" "sudo")
|
|
||||||
|
|
||||||
# Funktion: prüfen ob Kommando existiert
|
|
||||||
check_command() {
|
check_command() {
|
||||||
command -v "$1" >/dev/null 2>&1
|
command -v "$1" >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fehlende Pakete sammeln
|
# Sammle fehlende Pakete
|
||||||
MISSING_PKGS=()
|
MISSING_PKGS=()
|
||||||
for cmd in "${REQUIRED_CMDS[@]}"; do
|
for cmd in "${REQUIRED_CMDS[@]}"; do
|
||||||
if ! check_command "$cmd"; then
|
if ! check_command "$cmd"; then
|
||||||
@@ -18,35 +17,99 @@ for cmd in "${REQUIRED_CMDS[@]}"; do
|
|||||||
fi
|
fi
|
||||||
done
|
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
|
if [ ${#MISSING_PKGS[@]} -ne 0 ]; then
|
||||||
echo "❌ Folgende Pakete fehlen: ${MISSING_PKGS[*]}"
|
echo "❌ Fehlende Pakete: ${MISSING_PKGS[*]}"
|
||||||
|
# Interaktive Abfrage (CLI only)
|
||||||
if whiptail --title "Fehlende Pakete" \
|
while true; do
|
||||||
--yesno "Die folgenden Pakete fehlen:\n\n${MISSING_PKGS[*]}\n\nSollen diese jetzt installiert werden?" 15 60; then
|
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
|
# Paketmanager erkennen
|
||||||
if command -v apt-get >/dev/null 2>&1; then
|
if command -v apt-get >/dev/null 2>&1; then
|
||||||
sudo apt-get update
|
INSTALL_CMD=(apt-get install -y)
|
||||||
sudo apt-get install -y "${MISSING_PKGS[@]}"
|
PREPARE_CMD=(apt-get update)
|
||||||
elif command -v yum >/dev/null 2>&1; then
|
|
||||||
sudo yum install -y "${MISSING_PKGS[@]}"
|
|
||||||
elif command -v dnf >/dev/null 2>&1; then
|
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
|
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
|
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
|
exit 1
|
||||||
fi
|
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
|
exit 1
|
||||||
fi
|
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
|
else
|
||||||
echo "✅ Alle Voraussetzungen sind erfüllt."
|
echo "✅ Alle Voraussetzungen sind bereits erfüllt."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Am Ende das eigentliche Script starten
|
# Am Ende image-builder.sh starten (das Script soll Docker/Buildx selbst behandeln)
|
||||||
echo "🚀 Starte image-builder.sh..."
|
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 "$@"
|
exec ./scripts/image-builder.sh "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user