#!/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." exit 1 else echo "Erkannter Paketmanager: $PKG_MANAGER" 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" [ "$PKG_MANAGER" = "pacman" ] && python_pkg="python" 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" case $PKG_MANAGER in pacman|apk) ssh_pkg="openssh" ;; esac missing_packages="$missing_packages $ssh_pkg" fi # Installation der fehlenden Pakete (ohne Rückfrage) if [ -n "$missing_packages" ]; then echo printf "${BLUE}Starte Installation der fehlenden Pakete...${NC}\n\n" check_root # Bei Alpine: community-Repo für sudo aktivieren if [ "$PKG_MANAGER" = "apk" ]; then printf "${BLUE}Aktiviere community-Repository für sudo...${NC}\n" # Alpine-Version ermitteln, z.B. "3.18" ALPINE_VER=$(cut -d. -f1-2 /etc/alpine-release) REPO_URL="http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VER}/community" # Falls noch nicht vorhanden, hinzufügen grep -qxF "$REPO_URL" /etc/apk/repositories || \ echo "$REPO_URL" >> /etc/apk/repositories fi 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 # SSH-Server starten, falls nötig 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 # Abschließende Überprüfung echo printf "${BLUE}=== Abschließende Überprüfung ===${NC}\n\n" all_requirements_met=true printf "bash: " command -v bash >/dev/null 2>&1 \ && printf "${GREEN}Vorhanden ✓${NC}\n" \ || { printf "${RED}Fehlt trotz Installationsversuch!${NC}\n"; all_requirements_met=false; } printf "python3: " command -v python3 >/dev/null 2>&1 \ && printf "${GREEN}Vorhanden ✓${NC}\n" \ || { printf "${RED}Fehlt trotz Installationsversuch!${NC}\n"; all_requirements_met=false; } printf "sudo: " command -v sudo >/dev/null 2>&1 \ && printf "${GREEN}Vorhanden ✓${NC}\n" \ || { printf "${RED}Fehlt trotz Installationsversuch!${NC}\n"; all_requirements_met=false; } printf "openssh-server: " ( systemctl status sshd >/dev/null 2>&1 \ || service ssh status >/dev/null 2>&1 \ || ps aux | grep -v grep | grep -q sshd ) \ && printf "${GREEN}Vorhanden ✓${NC}\n" \ || { printf "${RED}Fehlt trotz Installationsversuch!${NC}\n"; all_requirements_met=false; } 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 printf "${GREEN}Alle Voraussetzungen sind bereits erfüllt. Keine Installation notwendig.${NC}\n" fi