From b53ffaec4491bfde5fb53c90077e2d9e23d0595d Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Tue, 1 Apr 2025 12:30:47 +0200 Subject: [PATCH] =?UTF-8?q?F=C3=BCge=20Raspberry=20Pi=20Bereinigungsskript?= =?UTF-8?q?=20hinzu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Entfernt alte Docker-Installationen und Überbleibsel - Installiert Docker und Docker Compose mit ARM-Unterstützung - Installiert notwendige Abhängigkeiten für Frontend und Backend - Optimiert Raspberry Pi Konfiguration (Swap, cgroups) - Konfiguriert DNS für bessere Netzwerkkompatibilität 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- raspi-cleanup.sh | 225 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100755 raspi-cleanup.sh diff --git a/raspi-cleanup.sh b/raspi-cleanup.sh new file mode 100755 index 0000000..de3a251 --- /dev/null +++ b/raspi-cleanup.sh @@ -0,0 +1,225 @@ +#!/bin/bash + +# Raspberry Pi Bereinigungsskript für MYP-Projekt +# Dieses Skript bereinigt alte Docker-Installationen und installiert alle erforderlichen Abhängigkeiten + +# Farbcodes für Ausgabe +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Funktion zur Ausgabe mit Zeitstempel +log() { + echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" +} + +error_log() { + echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] FEHLER:${NC} $1" >&2 +} + +# Prüfen, ob das Skript mit Root-Rechten ausgeführt wird +if [ "$EUID" -ne 0 ]; then + error_log "Dieses Skript muss mit Root-Rechten ausgeführt werden (sudo)." + exit 1 +fi + +log "${YELLOW}=== MYP Raspberry Pi Bereinigung und Setup ===${NC}" +log "Diese Skript wird alle alten Docker-Installationen entfernen und die erforderlichen Abhängigkeiten neu installieren." + +# Sicherstellen, dass apt funktioniert +log "Aktualisiere apt-Paketindex..." +apt-get update || { + error_log "Konnte apt-Paketindex nicht aktualisieren." + exit 1 +} + +# Installiere grundlegende Abhängigkeiten +log "Installiere grundlegende Abhängigkeiten..." +apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + wget \ + git \ + jq \ + || { + error_log "Konnte grundlegende Abhängigkeiten nicht installieren." + exit 1 +} + +# Stoppe alle laufenden Docker-Container +log "${YELLOW}Stoppe alle laufenden Docker-Container...${NC}" +if command -v docker &> /dev/null; then + docker stop $(docker ps -aq) 2>/dev/null || true + log "Alle Docker-Container gestoppt." +else + log "Docker ist nicht installiert, keine Container zu stoppen." +fi + +# Entferne alte Docker-Installation +log "${YELLOW}Entferne alte Docker-Installation...${NC}" +apt-get remove -y docker docker-engine docker.io containerd runc docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose || true +apt-get autoremove -y || true +rm -rf /var/lib/docker /var/lib/containerd /var/run/docker.sock /etc/docker /usr/local/bin/docker-compose 2>/dev/null || true +log "${GREEN}Alte Docker-Installation entfernt.${NC}" + +# Entferne alte Projektcontainer und -Dateien +log "${YELLOW}Entferne alte MYP-Projektcontainer und -Dateien...${NC}" +if command -v docker &> /dev/null; then + # Entferne Container + docker rm -f myp-frontend myp-backend 2>/dev/null || true + # Entferne Images + docker rmi -f myp-frontend myp-backend 2>/dev/null || true + # Entferne unbenutzte Volumes und Netzwerke + docker system prune -af --volumes 2>/dev/null || true +fi + +# Erkennen der Raspberry Pi-Architektur +log "Erkenne Systemarchitektur..." +ARCH=$(dpkg --print-architecture) +log "Erkannte Architektur: ${ARCH}" + +# Installiere Docker mit dem offiziellen Convenience-Skript +log "${YELLOW}Installiere Docker mit dem offiziellen Convenience-Skript...${NC}" +curl -fsSL https://get.docker.com -o get-docker.sh +sh get-docker.sh --channel stable + +# Überprüfen, ob Docker erfolgreich installiert wurde +if ! command -v docker &> /dev/null; then + error_log "Docker-Installation fehlgeschlagen!" + exit 1 +fi + +log "${GREEN}Docker erfolgreich installiert!${NC}" + +# Füge den aktuellen Benutzer zur Docker-Gruppe hinzu +if [ "$SUDO_USER" ]; then + log "Füge Benutzer $SUDO_USER zur Docker-Gruppe hinzu..." + usermod -aG docker $SUDO_USER + log "${YELLOW}Hinweis: Eine Neuanmeldung ist erforderlich, damit die Gruppenänderung wirksam wird.${NC}" +fi + +# Konfiguriere Docker mit DNS-Servern für bessere Netzwerkkompatibilität +log "Konfiguriere Docker mit Google DNS..." +mkdir -p /etc/docker +cat > /etc/docker/daemon.json << EOL +{ + "dns": ["8.8.8.8", "8.8.4.4"] +} +EOL + +# Starte Docker-Dienst neu +log "Starte Docker-Dienst neu..." +systemctl restart docker +systemctl enable docker +log "${GREEN}Docker-Dienst neu gestartet und für den Autostart aktiviert.${NC}" + +# Installiere Docker Compose v2 +log "${YELLOW}Installiere Docker Compose...${NC}" + +# Bestimme die passende Docker Compose-Version für die Architektur +if [ "$ARCH" = "armhf" ]; then + log "Installiere Docker Compose für armhf (32-bit)..." + curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-armv7" -o /usr/local/bin/docker-compose +elif [ "$ARCH" = "arm64" ]; then + log "Installiere Docker Compose für arm64 (64-bit)..." + curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose +else + log "Unbekannte Architektur, verwende automatische Erkennung..." + curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +fi + +chmod +x /usr/local/bin/docker-compose + +# Überprüfe, ob Docker Compose installiert wurde +if ! command -v docker-compose &> /dev/null; then + error_log "Docker Compose-Installation fehlgeschlagen!" + exit 1 +fi + +# Installiere Docker Compose Plugin (neuere Methode) +log "Installiere Docker Compose Plugin..." +apt-get update +apt-get install -y docker-compose-plugin + +log "${GREEN}Docker Compose erfolgreich installiert!${NC}" +docker compose version || docker-compose --version + +# Installiere zusätzliche Abhängigkeiten für die Projektunterstützung +log "${YELLOW}Installiere zusätzliche Projektabhängigkeiten...${NC}" +apt-get install -y \ + python3 \ + python3-pip \ + sqlite3 \ + build-essential \ + libffi-dev \ + libssl-dev \ + || { + error_log "Konnte zusätzliche Abhängigkeiten nicht installieren." + exit 1 +} + +# Optimieren des Raspberry Pi für Docker-Workloads +log "${YELLOW}Optimiere Raspberry Pi für Docker-Workloads...${NC}" + +# Swap erhöhen für bessere Performance bei begrenztem RAM +log "Konfiguriere Swap-Größe..." +CURRENT_SWAP=$(grep "CONF_SWAPSIZE" /etc/dphys-swapfile | cut -d= -f2) +log "Aktuelle Swap-Größe: ${CURRENT_SWAP}" + +# Erhöhe Swap auf 2GB, wenn weniger +if [ "$CURRENT_SWAP" -lt 2048 ]; then + sed -i 's/^CONF_SWAPSIZE=.*/CONF_SWAPSIZE=2048/' /etc/dphys-swapfile + log "Swap-Größe auf 2048MB erhöht, Neustart des Swap-Dienstes erforderlich." + + # Neustart des Swap-Dienstes + /etc/init.d/dphys-swapfile restart +else + log "Swap-Größe ist bereits ausreichend." +fi + +# Konfiguriere cgroup für Docker +if ! grep -q "cgroup_enable=memory" /boot/cmdline.txt; then + log "Konfiguriere cgroup für Docker..." + CMDLINE=$(cat /boot/cmdline.txt) + echo "$CMDLINE cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1" > /boot/cmdline.txt + log "${YELLOW}WICHTIG: Ein Systemneustart ist erforderlich, damit die cgroup-Änderungen wirksam werden.${NC}" +fi + +# Prüfe, ob docker-compose.yml und Dockerfile im aktuellen Projektverzeichnis vorhanden sind +FRONTEND_DIR="$(pwd)/packages/reservation-platform" +BACKEND_DIR="$(pwd)/backend" + +if [ -d "$FRONTEND_DIR" ] && [ -f "$FRONTEND_DIR/docker-compose.yml" ]; then + log "${GREEN}Frontend-Projektdateien gefunden in $FRONTEND_DIR${NC}" +else + log "${YELLOW}Warnung: Frontend-Projektdateien nicht gefunden in $FRONTEND_DIR${NC}" +fi + +if [ -d "$BACKEND_DIR" ] && [ -f "$BACKEND_DIR/docker-compose.yml" ]; then + log "${GREEN}Backend-Projektdateien gefunden in $BACKEND_DIR${NC}" +else + log "${YELLOW}Warnung: Backend-Projektdateien nicht gefunden in $BACKEND_DIR${NC}" +fi + +# Abschlussmeldung +log "${GREEN}=== Bereinigung und Setup abgeschlossen ===${NC}" +log "${YELLOW}WICHTIGE HINWEISE:${NC}" +log "1. Ein ${RED}SYSTEMNEUSTART${NC} ist ${RED}DRINGEND ERFORDERLICH${NC}, damit alle Änderungen wirksam werden." +log "2. Nach dem Neustart können Sie die Installationsskripte ausführen:" +log " - Frontend: ./install-frontend.sh" +log " - Backend: ./install-backend.sh" +log "3. Bei Problemen mit Docker-Berechtigungen stellen Sie sicher, dass Sie sich neu angemeldet haben." + +echo "" +read -p "Möchten Sie das System jetzt neu starten? (j/n): " REBOOT_CHOICE +if [[ "$REBOOT_CHOICE" == "j" ]]; then + log "System wird neu gestartet..." + reboot +else + log "Bitte starten Sie das System manuell neu, bevor Sie die Installationsskripte ausführen." +fi \ No newline at end of file