chore: Änderungen commited

This commit is contained in:
2025-06-16 06:47:24 +02:00
parent f9853e6396
commit 0b2ea1c73d
4 changed files with 1277 additions and 1 deletions

View File

@ -0,0 +1,335 @@
#!/bin/bash
#######################################################################
# MYP AIO-Installer - Environment Setup Module
#
# Dieses Modul behandelt die grundlegende Umgebungseinrichtung:
# - Kopieren der Projektdaten von relativen zu absoluten Pfaden
# - Setzen der korrekten Berechtigungen
# - Deinstallation bestehender Desktop-Environments
# - Vorbereitung des Zielsystems
#######################################################################
# Funktionsdeklarationen für Environment Setup
setup_environment() {
log "INFO" "=== UMGEBUNGSEINRICHTUNG STARTEN ==="
# Grundlegende Verzeichnisstruktur erstellen
create_directory_structure
# Projektdateien kopieren
copy_project_files
# Berechtigungen setzen
set_file_permissions
# Bestehende Desktop-Environments entfernen
remove_existing_desktop_environments
# Hostname konfigurieren
configure_hostname
log "INFO" "Umgebungseinrichtung abgeschlossen"
}
create_directory_structure() {
log "INFO" "Erstelle Verzeichnisstruktur..."
# Hauptinstallationsverzeichnis
mkdir -p "$INSTALL_PATH"
mkdir -p "$INSTALL_PATH/backend"
mkdir -p "$INSTALL_PATH/logs"
mkdir -p "$INSTALL_PATH/uploads"
mkdir -p "$INSTALL_PATH/instance/backups"
mkdir -p "$INSTALL_PATH/instance/sessions"
mkdir -p "$INSTALL_PATH/database"
mkdir -p "$INSTALL_PATH/certs"
mkdir -p "$INSTALL_PATH/static"
mkdir -p "$INSTALL_PATH/templates"
# System-Verzeichnisse
mkdir -p "/var/log/myp"
mkdir -p "/etc/myp"
mkdir -p "/usr/local/bin/myp"
# Desktop-Konfiguration Verzeichnisse
mkdir -p "/home/$PROJECT_USER/.config"
mkdir -p "/home/$PROJECT_USER/.local/share/applications"
mkdir -p "/home/$PROJECT_USER/Desktop"
log "INFO" "Verzeichnisstruktur erstellt"
}
copy_project_files() {
log "INFO" "Kopiere Projektdateien von $PROJECT_ROOT nach $INSTALL_PATH..."
# Prüfe ob Quelldateien existieren
if [[ ! -d "$PROJECT_ROOT" ]]; then
log "ERROR" "Projekt-Quellverzeichnis nicht gefunden: $PROJECT_ROOT"
return 1
fi
# Kopiere alle Projektdateien (außer temporäre/cache Dateien)
rsync -av --progress \
--exclude="__pycache__" \
--exclude="*.pyc" \
--exclude=".git" \
--exclude="node_modules" \
--exclude="*.log" \
--exclude="database/myp.db*" \
--exclude="instance/sessions/*" \
"$PROJECT_ROOT/" "$INSTALL_PATH/"
# Spezielle Dateien individuell behandeln
cp "$PROJECT_ROOT/requirements.txt" "$INSTALL_PATH/" 2>/dev/null || true
cp "$PROJECT_ROOT/package.json" "$INSTALL_PATH/" 2>/dev/null || true
cp "$PROJECT_ROOT/package-lock.json" "$INSTALL_PATH/" 2>/dev/null || true
cp "$PROJECT_ROOT/tailwind.config.js" "$INSTALL_PATH/" 2>/dev/null || true
cp "$PROJECT_ROOT/postcss.config.js" "$INSTALL_PATH/" 2>/dev/null || true
# Version-Datei erstellen
echo "1.0.0-$(date +%Y%m%d)" > "$INSTALL_PATH/VERSION"
log "INFO" "Projektdateien erfolgreich kopiert"
}
set_file_permissions() {
log "INFO" "Setze Dateiberechtigungen..."
# Besitzer für Installationsverzeichnis
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$INSTALL_PATH"
# Grundlegende Verzeichnisberechtigungen
find "$INSTALL_PATH" -type d -exec chmod 755 {} \;
find "$INSTALL_PATH" -type f -exec chmod 644 {} \;
# Ausführbare Dateien
find "$INSTALL_PATH" -name "*.sh" -exec chmod +x {} \;
find "$INSTALL_PATH" -name "*.py" -exec chmod +x {} \;
# Spezielle Berechtigungen für sensible Verzeichnisse
chmod 700 "$INSTALL_PATH/instance"
chmod 700 "$INSTALL_PATH/database"
chmod 700 "$INSTALL_PATH/certs"
chmod 755 "$INSTALL_PATH/uploads"
chmod 755 "$INSTALL_PATH/static"
# Log-Verzeichnis Berechtigungen
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/var/log/myp"
chmod 755 "/var/log/myp"
# Konfigurationsverzeichnis
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/etc/myp"
chmod 755 "/etc/myp"
log "INFO" "Dateiberechtigungen gesetzt"
}
remove_existing_desktop_environments() {
log "INFO" "Entferne bestehende Desktop-Environments..."
# Liste der zu entfernenden Desktop-Environments
local desktop_packages=(
# GNOME
"gnome-shell"
"gnome-session"
"gnome-desktop3"
"gnome-core"
"gnome-minimal"
"gdm3"
# KDE/Plasma
"kde-plasma-desktop"
"plasma-desktop"
"kde-full"
"kde-standard"
"sddm"
# XFCE
"xfce4"
"xfce4-session"
"xfce4-panel"
"lightdm"
# MATE
"mate-desktop-environment"
"mate-session-manager"
# Cinnamon
"cinnamon-desktop-environment"
"cinnamon-session"
# Unity (falls noch vorhanden)
"unity"
"unity-session"
# Andere Display Manager
"slim"
"nodm"
"xdm"
)
# Stoppe alle Desktop-Services
systemctl stop gdm3 2>/dev/null || true
systemctl stop sddm 2>/dev/null || true
systemctl stop lightdm 2>/dev/null || true
systemctl stop slim 2>/dev/null || true
systemctl stop xdm 2>/dev/null || true
# Deaktiviere Desktop-Services
systemctl disable gdm3 2>/dev/null || true
systemctl disable sddm 2>/dev/null || true
systemctl disable lightdm 2>/dev/null || true
systemctl disable slim 2>/dev/null || true
systemctl disable xdm 2>/dev/null || true
# Entferne Desktop-Packages
for package in "${desktop_packages[@]}"; do
if dpkg -l | grep -q "^ii.*$package"; then
log "INFO" "Entferne Desktop-Package: $package"
apt-get remove --purge -y "$package" 2>/dev/null || true
fi
done
# Autoremove nicht mehr benötigte Pakete
apt-get autoremove --purge -y 2>/dev/null || true
# Bereinige Desktop-Konfigurationsdateien
rm -rf /etc/gdm3 2>/dev/null || true
rm -rf /etc/sddm* 2>/dev/null || true
rm -rf /etc/lightdm 2>/dev/null || true
rm -rf /etc/X11/default-display-manager 2>/dev/null || true
log "INFO" "Desktop-Environment Bereinigung abgeschlossen"
}
configure_hostname() {
log "INFO" "Konfiguriere Hostname..."
local current_hostname=$(hostname)
local new_hostname="$HOSTNAME_DEFAULT"
# Frage nach gewünschtem Hostname (außer bei automatischer Installation)
if [[ "${FORCE_YES:-}" != "true" ]]; then
read -p "Hostname [$HOSTNAME_DEFAULT]: " input_hostname
if [[ -n "$input_hostname" ]]; then
new_hostname="$input_hostname"
fi
fi
if [[ "$current_hostname" != "$new_hostname" ]]; then
log "INFO" "Ändere Hostname von '$current_hostname' zu '$new_hostname'"
# Hostname setzen
echo "$new_hostname" > /etc/hostname
hostnamectl set-hostname "$new_hostname"
# /etc/hosts aktualisieren
sed -i "s/127.0.1.1.*/127.0.1.1\t$new_hostname/" /etc/hosts
# Füge Eintrag hinzu falls nicht vorhanden
if ! grep -q "127.0.1.1" /etc/hosts; then
echo "127.0.1.1 $new_hostname" >> /etc/hosts
fi
log "INFO" "Hostname konfiguriert: $new_hostname"
else
log "INFO" "Hostname bereits korrekt konfiguriert: $current_hostname"
fi
}
update_project_files() {
log "INFO" "Aktualisiere Projektdateien..."
# Backup der aktuellen Konfiguration
if [[ -f "$INSTALL_PATH/config/settings.py" ]]; then
cp "$INSTALL_PATH/config/settings.py" "$INSTALL_PATH/config/settings.py.backup.$(date +%Y%m%d-%H%M%S)"
fi
# Neue Dateien kopieren (ohne Konfigurationsdateien zu überschreiben)
rsync -av --progress \
--exclude="__pycache__" \
--exclude="*.pyc" \
--exclude=".git" \
--exclude="node_modules" \
--exclude="*.log" \
--exclude="database/myp.db*" \
--exclude="instance/sessions/*" \
--exclude="config/settings.py" \
"$PROJECT_ROOT/" "$INSTALL_PATH/"
# Berechtigungen wieder setzen
set_file_permissions
log "INFO" "Projektdateien aktualisiert"
}
cleanup_environment() {
log "INFO" "Bereinige temporäre Dateien..."
# Temporäre Python-Dateien
find "$INSTALL_PATH" -name "*.pyc" -delete 2>/dev/null || true
find "$INSTALL_PATH" -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
# Alte Log-Dateien (älter als 30 Tage)
find "/var/log/myp" -name "*.log" -mtime +30 -delete 2>/dev/null || true
# Alte Session-Dateien
find "$INSTALL_PATH/instance/sessions" -name "*.pkl" -mtime +7 -delete 2>/dev/null || true
# Package-Cache bereinigen
apt-get clean
apt-get autoclean
log "INFO" "Umgebung bereinigt"
}
verify_environment() {
log "INFO" "Überprüfe Umgebungseinrichtung..."
local errors=0
# Verzeichnisse prüfen
local required_dirs=(
"$INSTALL_PATH"
"$INSTALL_PATH/backend"
"/var/log/myp"
"/etc/myp"
)
for dir in "${required_dirs[@]}"; do
if [[ ! -d "$dir" ]]; then
log "ERROR" "Erforderliches Verzeichnis fehlt: $dir"
errors=$((errors + 1))
fi
done
# Wichtige Dateien prüfen
local required_files=(
"$INSTALL_PATH/app.py"
"$INSTALL_PATH/requirements.txt"
"$INSTALL_PATH/models.py"
)
for file in "${required_files[@]}"; do
if [[ ! -f "$file" ]]; then
log "ERROR" "Erforderliche Datei fehlt: $file"
errors=$((errors + 1))
fi
done
# Berechtigungen prüfen
if [[ ! -O "$INSTALL_PATH" ]]; then
log "ERROR" "Falscher Besitzer für $INSTALL_PATH"
errors=$((errors + 1))
fi
if [[ $errors -eq 0 ]]; then
log "INFO" "Umgebungsverifikation erfolgreich"
return 0
else
log "ERROR" "Umgebungsverifikation fehlgeschlagen ($errors Fehler)"
return 1
fi
}

View File

@ -0,0 +1,496 @@
#!/bin/bash
#######################################################################
# MYP AIO-Installer - System Packages Module
#
# Dieses Modul behandelt die Installation und Aktualisierung von:
# - System-Updates und Upgrades
# - Grundlegende System-Packages
# - Zusätzliche Sources und Repositories
# - Abhängigkeiten für das MYP-System
#######################################################################
# Funktionsdeklarationen für Package Management
update_system_packages() {
log "INFO" "=== SYSTEM-PACKAGES AKTUALISIEREN ==="
# APT Sources konfigurieren
configure_apt_sources
# System-Update durchführen
perform_system_update
# Grundlegende Packages installieren
install_base_packages
# Spezielle Repositories hinzufügen
add_additional_repositories
# Cleanup durchführen
cleanup_packages
log "INFO" "System-Package-Aktualisierung abgeschlossen"
}
configure_apt_sources() {
log "INFO" "Konfiguriere APT-Sources..."
# Backup der aktuellen sources.list
cp /etc/apt/sources.list /etc/apt/sources.list.backup.$(date +%Y%m%d)
# Detect Debian/Ubuntu Version
local os_id=$(lsb_release -si)
local os_codename=$(lsb_release -sc)
log "INFO" "Erkanntes System: $os_id $os_codename"
case "$os_id" in
"Debian")
configure_debian_sources "$os_codename"
;;
"Ubuntu"|"Raspbian")
configure_ubuntu_sources "$os_codename"
;;
*)
log "WARN" "Unbekanntes System, verwende Standard-Konfiguration"
;;
esac
# Sicherstellen dass Universe und Multiverse aktiviert sind (Ubuntu/Raspbian)
if [[ "$os_id" == "Ubuntu" ]] || [[ "$os_id" == "Raspbian" ]]; then
add-apt-repository universe -y 2>/dev/null || true
add-apt-repository multiverse -y 2>/dev/null || true
fi
log "INFO" "APT-Sources konfiguriert"
}
configure_debian_sources() {
local codename="$1"
log "INFO" "Konfiguriere Debian Sources für $codename"
# Standard Debian Sources
cat > /etc/apt/sources.list << EOF
# Debian $codename - Hauptrepositories
deb http://deb.debian.org/debian $codename main contrib non-free
deb-src http://deb.debian.org/debian $codename main contrib non-free
# Debian $codename - Updates
deb http://deb.debian.org/debian $codename-updates main contrib non-free
deb-src http://deb.debian.org/debian $codename-updates main contrib non-free
# Debian $codename - Security Updates
deb http://security.debian.org/debian-security $codename-security main contrib non-free
deb-src http://security.debian.org/debian-security $codename-security main contrib non-free
# Debian $codename - Backports (falls verfügbar)
deb http://deb.debian.org/debian $codename-backports main contrib non-free
deb-src http://deb.debian.org/debian $codename-backports main contrib non-free
EOF
}
configure_ubuntu_sources() {
local codename="$1"
log "INFO" "Konfiguriere Ubuntu/Raspbian Sources für $codename"
# Ubuntu/Raspbian Sources
cat > /etc/apt/sources.list << EOF
# Ubuntu/Raspbian $codename - Hauptrepositories
deb http://archive.ubuntu.com/ubuntu $codename main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu $codename main restricted universe multiverse
# Ubuntu/Raspbian $codename - Updates
deb http://archive.ubuntu.com/ubuntu $codename-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu $codename-updates main restricted universe multiverse
# Ubuntu/Raspbian $codename - Security Updates
deb http://security.ubuntu.com/ubuntu $codename-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu $codename-security main restricted universe multiverse
# Ubuntu/Raspbian $codename - Backports
deb http://archive.ubuntu.com/ubuntu $codename-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu $codename-backports main restricted universe multiverse
EOF
}
perform_system_update() {
log "INFO" "Führe System-Update durch..."
# APT-Cache aktualisieren
log "INFO" "Aktualisiere APT-Cache..."
apt-get update -y || {
log "ERROR" "APT-Update fehlgeschlagen"
return 1
}
# Upgrade durchführen
log "INFO" "Führe System-Upgrade durch..."
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y || {
log "ERROR" "APT-Upgrade fehlgeschlagen"
return 1
}
# Dist-Upgrade für kritische Updates
log "INFO" "Führe Distribution-Upgrade durch..."
DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y || {
log "WARN" "Dist-Upgrade hatte Probleme, fortfahren..."
}
log "INFO" "System-Update abgeschlossen"
}
install_base_packages() {
log "INFO" "Installiere grundlegende System-Packages..."
# Essentielle System-Tools
local base_packages=(
# Grundlegende Tools
"curl"
"wget"
"git"
"unzip"
"zip"
"tar"
"gzip"
"rsync"
"htop"
"tree"
"nano"
"vim-tiny"
# Netzwerk-Tools
"net-tools"
"iputils-ping"
"dnsutils"
"ssh"
"openssh-server"
# Build-Tools
"build-essential"
"gcc"
"g++"
"make"
"cmake"
"pkg-config"
# Python-Grundlagen
"python3"
"python3-pip"
"python3-dev"
"python3-venv"
"python3-setuptools"
"python3-wheel"
# SSL/TLS
"ca-certificates"
"openssl"
# System-Utilities
"systemd"
"systemctl"
"cron"
"logrotate"
"sudo"
# Raspberry Pi spezifisch
"rpi-update"
"raspberrypi-kernel-headers"
# Zusätzliche Libraries
"libffi-dev"
"libssl-dev"
"libxml2-dev"
"libxslt1-dev"
"zlib1g-dev"
"libjpeg-dev"
"libpng-dev"
"libfreetype6-dev"
"liblcms2-dev"
"libwebp-dev"
"tcl8.6-dev"
"tk8.6-dev"
"python3-tk"
# Firewall
"ufw"
"iptables"
"iptables-persistent"
# Monitoring
"psmisc"
"lsof"
"strace"
)
# Installiere Packages in Batches für bessere Fehlerbehandlung
local batch_size=10
local total_packages=${#base_packages[@]}
local current_batch=0
for ((i=0; i<total_packages; i+=batch_size)); do
current_batch=$((current_batch + 1))
local batch=("${base_packages[@]:i:batch_size}")
log "INFO" "Installiere Package-Batch $current_batch (${#batch[@]} Packages)..."
if ! DEBIAN_FRONTEND=noninteractive apt-get install -y "${batch[@]}"; then
log "WARN" "Batch $current_batch hatte Probleme, installiere einzeln..."
# Installiere einzeln bei Fehlern
for package in "${batch[@]}"; do
if ! DEBIAN_FRONTEND=noninteractive apt-get install -y "$package"; then
log "WARN" "Package konnte nicht installiert werden: $package"
fi
done
fi
done
log "INFO" "Grundlegende Packages installiert"
}
add_additional_repositories() {
log "INFO" "Füge zusätzliche Repositories hinzu..."
# Node.js Repository (NodeSource)
add_nodejs_repository
# Chromium Repository (falls nicht verfügbar)
add_chromium_repository
# Docker Repository (optional, für erweiterte Funktionen)
# add_docker_repository
log "INFO" "Zusätzliche Repositories hinzugefügt"
}
add_nodejs_repository() {
log "INFO" "Füge Node.js Repository hinzu..."
# NodeSource GPG-Key hinzufügen
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - || {
log "WARN" "Node.js GPG-Key konnte nicht hinzugefügt werden"
return 1
}
# Node.js 18.x Repository
local os_codename=$(lsb_release -sc)
echo "deb https://deb.nodesource.com/node_18.x $os_codename main" > /etc/apt/sources.list.d/nodesource.list
echo "deb-src https://deb.nodesource.com/node_18.x $os_codename main" >> /etc/apt/sources.list.d/nodesource.list
# APT-Cache aktualisieren
apt-get update -y || {
log "WARN" "Node.js Repository-Update fehlgeschlagen"
return 1
}
log "INFO" "Node.js Repository hinzugefügt"
}
add_chromium_repository() {
log "INFO" "Prüfe Chromium-Verfügbarkeit..."
# Prüfe ob Chromium bereits verfügbar ist
if apt-cache search chromium-browser | grep -q chromium-browser; then
log "INFO" "Chromium ist bereits über Standard-Repository verfügbar"
return 0
fi
# Füge Snap für Chromium hinzu falls APT-Version nicht verfügbar
if command -v snap >/dev/null 2>&1; then
log "INFO" "Snap verfügbar, Chromium wird über Snap installiert"
return 0
fi
# Installiere Snap falls nicht vorhanden
if ! DEBIAN_FRONTEND=noninteractive apt-get install -y snapd; then
log "WARN" "Snap konnte nicht installiert werden"
return 1
fi
log "INFO" "Snap für Chromium-Installation vorbereitet"
}
add_docker_repository() {
log "INFO" "Füge Docker Repository hinzu (optional)..."
# Docker GPG-Key
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - || {
log "WARN" "Docker GPG-Key konnte nicht hinzugefügt werden"
return 1
}
# Docker Repository
local os_codename=$(lsb_release -sc)
echo "deb [arch=amd64,arm64,armhf] https://download.docker.com/linux/debian $os_codename stable" > /etc/apt/sources.list.d/docker.list
# APT-Cache aktualisieren
apt-get update -y || {
log "WARN" "Docker Repository-Update fehlgeschlagen"
return 1
}
log "INFO" "Docker Repository hinzugefügt"
}
install_security_updates() {
log "INFO" "Installiere Sicherheitsupdates..."
# Unattended-upgrades für automatische Sicherheitsupdates
DEBIAN_FRONTEND=noninteractive apt-get install -y unattended-upgrades apt-listchanges || {
log "WARN" "Unattended-upgrades konnte nicht installiert werden"
}
# Konfiguriere automatische Sicherheitsupdates
cat > /etc/apt/apt.conf.d/20auto-upgrades << 'EOF'
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
EOF
# Konfiguriere welche Updates automatisch installiert werden
cat > /etc/apt/apt.conf.d/50unattended-upgrades << 'EOF'
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
"${distro_id} ESMApps:${distro_codename}-apps-security";
"${distro_id} ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Package-Blacklist {
// Keine Packages blockieren für MYP-System
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::MinimalSteps "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::SyslogEnable "true";
EOF
log "INFO" "Automatische Sicherheitsupdates konfiguriert"
}
cleanup_packages() {
log "INFO" "Bereinige Package-System..."
# Nicht mehr benötigte Packages entfernen
apt-get autoremove --purge -y || {
log "WARN" "Autoremove hatte Probleme"
}
# APT-Cache bereinigen
apt-get autoclean || {
log "WARN" "Autoclean hatte Probleme"
}
apt-get clean || {
log "WARN" "Clean hatte Probleme"
}
# Alte Kernel entfernen (behalte nur die letzten 2)
if command -v purge-old-kernels >/dev/null 2>&1; then
purge-old-kernels --keep 2 -y || {
log "WARN" "Alte Kernel konnten nicht bereinigt werden"
}
fi
log "INFO" "Package-System bereinigt"
}
verify_packages() {
log "INFO" "Überprüfe installierte Packages..."
local errors=0
# Kritische Packages prüfen
local critical_packages=(
"python3"
"python3-pip"
"git"
"curl"
"wget"
"build-essential"
"openssh-server"
"systemd"
)
for package in "${critical_packages[@]}"; do
if ! dpkg -l | grep -q "^ii.*$package"; then
log "ERROR" "Kritisches Package fehlt: $package"
errors=$((errors + 1))
fi
done
# System-Dienste prüfen
local critical_services=(
"ssh"
"systemd-resolved"
"cron"
)
for service in "${critical_services[@]}"; do
if ! systemctl is-active --quiet "$service"; then
log "WARN" "Service nicht aktiv: $service"
fi
done
if [[ $errors -eq 0 ]]; then
log "INFO" "Package-Verifikation erfolgreich"
return 0
else
log "ERROR" "Package-Verifikation fehlgeschlagen ($errors Fehler)"
return 1
fi
}
optimize_raspberry_pi() {
log "INFO" "Optimiere System für Raspberry Pi..."
# Prüfe ob es sich um einen Raspberry Pi handelt
if [[ ! -f /proc/device-tree/model ]] || ! grep -q "Raspberry Pi" /proc/device-tree/model; then
log "INFO" "Kein Raspberry Pi erkannt, überspringe Optimierungen"
return 0
fi
# GPU Memory Split optimieren
if command -v raspi-config >/dev/null 2>&1; then
log "INFO" "Konfiguriere GPU Memory Split..."
raspi-config nonint do_memory_split 128
fi
# Overclock aktivieren (vorsichtig)
if [[ -f /boot/config.txt ]]; then
log "INFO" "Aktiviere moderate Overclock-Einstellungen..."
# Backup der config.txt
cp /boot/config.txt /boot/config.txt.backup.$(date +%Y%m%d)
# Füge Overclock-Einstellungen hinzu
cat >> /boot/config.txt << 'EOF'
# MYP System Optimierungen
# Moderate Overclock für bessere Performance
arm_freq=1200
gpu_freq=400
sdram_freq=500
over_voltage=2
# USB Power
max_usb_current=1
# Audio deaktivieren (nicht benötigt)
dtparam=audio=off
EOF
fi
# Swap optimieren
if [[ -f /etc/dphys-swapfile ]]; then
log "INFO" "Optimiere Swap-Konfiguration..."
sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=1024/' /etc/dphys-swapfile
systemctl restart dphys-swapfile
fi
log "INFO" "Raspberry Pi Optimierungen abgeschlossen"
}