#!/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 printf "${RED}Dieses Script benötigt Root-Rechte für Installationen.${NC}\n" printf "Bitte starte es erneut mit: sudo $0\n" 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 printf "${BLUE}Installiere $pkg_name...${NC}\n" 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 ;; *) printf "${RED}Unbekannter Paketmanager. Installation nicht möglich.${NC}\n" return 1 ;; esac if [ $? -eq 0 ]; then printf "${GREEN}$pkg_name erfolgreich installiert.${NC}\n" return 0 else printf "${RED}Fehler bei der Installation von $pkg_name.${NC}\n" return 1 fi } # Hauptprogramm printf "${BLUE}=== Überprüfung der Systemvoraussetzungen ===${NC}\n\n" # Erkenne den Paketmanager PKG_MANAGER=$(detect_package_manager) if [ "$PKG_MANAGER" = "unknown" ]; then printf "${RED}Konnte keinen bekannten Paketmanager erkennen.${NC}\n" 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 printf "Prüfe bash... " if command -v bash >/dev/null 2>&1; then printf "${GREEN}Vorhanden ✓${NC}\n" else printf "${RED}Nicht gefunden ✗${NC}\n" missing_packages="$missing_packages bash" fi # 2. Prüfe python3 printf "Prüfe python3... " if command -v python3 >/dev/null 2>&1; then printf "${GREEN}Vorhanden ✓${NC}\n" else printf "${RED}Nicht gefunden ✗${NC}\n" python_pkg="python3" if [ "$PKG_MANAGER" = "pacman" ]; then python_pkg="python" fi missing_packages="$missing_packages $python_pkg" fi # 3. Prüfe sudo printf "Prüfe sudo... " if command -v sudo >/dev/null 2>&1; then printf "${GREEN}Vorhanden ✓${NC}\n" else printf "${RED}Nicht gefunden ✗${NC}\n" missing_packages="$missing_packages sudo" fi # 4. Prüfe openssh-server printf "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 printf "${GREEN}Vorhanden ✓${NC}\n" else printf "${RED}Nicht gefunden ✗${NC}\n" 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 printf "${BLUE}Die folgenden Pakete müssen installiert werden:${NC}\n" echo "$missing_packages" echo # Frage nach Bestätigung printf "Möchtest du diese Pakete jetzt installieren? (j/N): " read -r answer if [ "$answer" = "j" ] || [ "$answer" = "J" ] || [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then check_root printf "${BLUE}Aktualisiere Paketlisten...${NC}\n" case $PKG_MANAGER in apt) apt update ;; dnf|yum) $PKG_MANAGER check-update || true ;; pacman) pacman -Sy ;; zypper) zypper refresh ;; apk) apk update ;; esac echo for pkg in $missing_packages; do install_package "$PKG_MANAGER" "$pkg" done if [ "$missing_ssh" = "true" ]; then printf "${BLUE}Starte SSH-Server...${NC}\n" 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 printf "${YELLOW}Konnte SSH-Server nicht automatisch starten.${NC}\n" echo "Bitte starte den SSH-Server manuell." fi fi echo printf "${BLUE}=== Abschließende Überprüfung ===${NC}\n" all_requirements_met=true printf "bash: " if command -v bash >/dev/null 2>&1; then printf "${GREEN}Vorhanden ✓${NC}\n" else printf "${RED}Fehlt trotz Installationsversuch!${NC}\n" all_requirements_met=false fi printf "python3: " if command -v python3 >/dev/null 2>&1; then printf "${GREEN}Vorhanden ✓${NC}\n" else printf "${RED}Fehlt trotz Installationsversuch!${NC}\n" all_requirements_met=false fi printf "sudo: " if command -v sudo >/dev/null 2>&1; then printf "${GREEN}Vorhanden ✓${NC}\n" else printf "${RED}Fehlt trotz Installationsversuch!${NC}\n" all_requirements_met=false fi printf "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 printf "${GREEN}Vorhanden ✓${NC}\n" else printf "${RED}Fehlt trotz Installationsversuch!${NC}\n" all_requirements_met=false fi echo if $all_requirements_met; then printf "${GREEN}Alle Voraussetzungen sind erfüllt. System ist bereit!${NC}\n" else printf "${RED}Nicht alle Voraussetzungen konnten installiert werden.${NC}\n" echo "Bitte installiere die fehlenden Pakete manuell." exit 1 fi else echo "Installation abgebrochen." fi elif [ -z "$missing_packages" ]; then echo printf "${GREEN}Alle Voraussetzungen sind bereits erfüllt. Keine Installation notwendig.${NC}\n" else echo printf "${YELLOW}Fehlende Pakete:${NC}\n" echo "$missing_packages" printf "${YELLOW}Bitte installiere diese Pakete manuell mit deinem Paketmanager.${NC}\n" fi