Files
Boilerplates/Ansible/requirement-check.sh

246 lines
7.1 KiB
Bash

#!/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