diff --git a/Ansible/requirement-check.sh b/Ansible/requirement-check.sh new file mode 100644 index 0000000..6bd69b3 --- /dev/null +++ b/Ansible/requirement-check.sh @@ -0,0 +1,251 @@ +#!/bin/sh + +# Farbdefinitionen für schönere Ausgabe +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Prüfe, ob das Script mit Root-Rechten ausgeführt wird +check_root() { + if [ "$(id -u)" != "0" ]; then + echo "${RED}Dieses Script benötigt Root-Rechte für Installationen.${NC}" + echo "Bitte starte es erneut mit: sudo $0" + exit 1 + fi +} + +# Funktion zur Erkennung des Paketmanagers +detect_package_manager() { + if command -v apt >/dev/null 2>&1; then + echo "apt" + elif command -v dnf >/dev/null 2>&1; then + echo "dnf" + elif command -v yum >/dev/null 2>&1; then + echo "yum" + elif command -v pacman >/dev/null 2>&1; then + echo "pacman" + elif command -v zypper >/dev/null 2>&1; then + echo "zypper" + elif command -v apk >/dev/null 2>&1; then + echo "apk" + else + echo "unknown" + fi +} + +# Funktion zur Installation eines Pakets +install_package() { + local pkg_manager=$1 + local pkg_name=$2 + + echo "${BLUE}Installiere $pkg_name...${NC}" + + case $pkg_manager in + apt) + apt install -y $pkg_name + ;; + dnf|yum) + $pkg_manager install -y $pkg_name + ;; + pacman) + pacman -S --noconfirm $pkg_name + ;; + zypper) + zypper install -y $pkg_name + ;; + apk) + apk add $pkg_name + ;; + *) + echo "${RED}Unbekannter Paketmanager. Installation nicht möglich.${NC}" + return 1 + ;; + esac + + if [ $? -eq 0 ]; then + echo "${GREEN}$pkg_name erfolgreich installiert.${NC}" + return 0 + else + echo "${RED}Fehler bei der Installation von $pkg_name.${NC}" + return 1 + fi +} + +# Hauptprogramm +echo "${BLUE}=== Überprüfung der Systemvoraussetzungen ===${NC}" +echo + +# Erkenne den Paketmanager +PKG_MANAGER=$(detect_package_manager) +if [ "$PKG_MANAGER" = "unknown" ]; then + echo "${RED}Konnte keinen bekannten Paketmanager erkennen.${NC}" + echo "Bitte installiere fehlende Pakete manuell." + need_manual_installation=true +else + echo "Erkannter Paketmanager: $PKG_MANAGER" + need_manual_installation=false +fi + +# Initialisiere Variable für fehlende Pakete +missing_packages="" +missing_ssh=false + +# 1. Prüfe bash +echo -n "Prüfe bash... " +if command -v bash >/dev/null 2>&1; then + echo "${GREEN}Vorhanden✓${NC}" +else + echo "${RED}Nicht gefunden✗${NC}" + missing_packages="$missing_packages bash" +fi + +# 2. Prüfe python3 +echo -n "Prüfe python3... " +if command -v python3 >/dev/null 2>&1; then + echo "${GREEN}Vorhanden✓${NC}" +else + echo "${RED}Nicht gefunden✗${NC}" + # Paketname für verschiedene Distributionen anpassen + python_pkg="python3" + if [ "$PKG_MANAGER" = "pacman" ]; then + python_pkg="python" + fi + missing_packages="$missing_packages $python_pkg" +fi + +# 3. Prüfe sudo +echo -n "Prüfe sudo... " +if command -v sudo >/dev/null 2>&1; then + echo "${GREEN}Vorhanden✓${NC}" +else + echo "${RED}Nicht gefunden✗${NC}" + missing_packages="$missing_packages sudo" +fi + +# 4. Prüfe openssh-server +echo -n "Prüfe openssh-server... " +if systemctl status sshd >/dev/null 2>&1 || service ssh status >/dev/null 2>&1 || ps aux | grep -v grep | grep -q sshd; then + echo "${GREEN}Vorhanden✓${NC}" +else + echo "${RED}Nicht gefunden✗${NC}" + missing_ssh=true + ssh_pkg="openssh-server" + if [ "$PKG_MANAGER" = "pacman" ] || [ "$PKG_MANAGER" = "apk" ]; then + ssh_pkg="openssh" + fi + missing_packages="$missing_packages $ssh_pkg" +fi + +# Installation nur durchführen, wenn tatsächlich Pakete fehlen +if [ -n "$missing_packages" ] && [ "$need_manual_installation" = "false" ]; then + echo + echo "${BLUE}Die folgenden Pakete müssen installiert werden:${NC}" + echo "$missing_packages" + echo + + # Frage nach Bestätigung + echo -n "Möchtest du diese Pakete jetzt installieren? (j/N): " + read -r answer + + if [ "$answer" = "j" ] || [ "$answer" = "J" ] || [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then + # Check for root only if we need to install + check_root + + # Paketmanager aktualisieren + echo "${BLUE}Aktualisiere Paketlisten...${NC}" + case $PKG_MANAGER in + apt) + apt update + ;; + dnf|yum) + $PKG_MANAGER check-update || true # Ignoriere Exit-Code + ;; + pacman) + pacman -Sy + ;; + zypper) + zypper refresh + ;; + apk) + apk update + ;; + esac + echo + + # Installiere alle fehlenden Pakete + for pkg in $missing_packages; do + install_package "$PKG_MANAGER" "$pkg" + done + + # SSH-Server starten falls nötig + if [ "$missing_ssh" = "true" ]; then + echo "${BLUE}Starte SSH-Server...${NC}" + if command -v systemctl >/dev/null 2>&1; then + systemctl enable --now sshd || systemctl enable --now ssh + elif command -v service >/dev/null 2>&1; then + service ssh start || service sshd start + else + echo "${YELLOW}Konnte SSH-Server nicht automatisch starten.${NC}" + echo "Bitte starte den SSH-Server manuell." + fi + fi + + echo + echo "${BLUE}=== Abschließende Überprüfung ===${NC}" + + all_requirements_met=true + + echo -n "bash: " + if command -v bash >/dev/null 2>&1; then + echo "${GREEN}Vorhanden✓${NC}" + else + echo "${RED}Fehlt trotz Installationsversuch!${NC}" + all_requirements_met=false + fi + + echo -n "python3: " + if command -v python3 >/dev/null 2>&1; then + echo "${GREEN}Vorhanden✓${NC}" + else + echo "${RED}Fehlt trotz Installationsversuch!${NC}" + all_requirements_met=false + fi + + echo -n "sudo: " + if command -v sudo >/dev/null 2>&1; then + echo "${GREEN}Vorhanden✓${NC}" + else + echo "${RED}Fehlt trotz Installationsversuch!${NC}" + all_requirements_met=false + fi + + echo -n "openssh-server: " + if systemctl status sshd >/dev/null 2>&1 || service ssh status >/dev/null 2>&1 || ps aux | grep -v grep | grep -q sshd; then + echo "${GREEN}Vorhanden✓${NC}" + else + echo "${RED}Fehlt trotz Installationsversuch!${NC}" + all_requirements_met=false + fi + + echo + if $all_requirements_met; then + echo "${GREEN}Alle Voraussetzungen sind erfüllt. System ist bereit!${NC}" + else + echo "${RED}Nicht alle Voraussetzungen konnten installiert werden.${NC}" + echo "Bitte installiere die fehlenden Pakete manuell." + exit 1 + fi + else + echo "Installation abgebrochen." + fi +elif [ -z "$missing_packages" ]; then + echo + echo "${GREEN}Alle Voraussetzungen sind bereits erfüllt. Keine Installation notwendig.${NC}" +else + echo + echo "${YELLOW}Fehlende Pakete:${NC}" + echo "$missing_packages" + echo "${YELLOW}Bitte installiere diese Pakete manuell mit deinem Paketmanager.${NC}" +fi \ No newline at end of file