chore: Änderungen commited
This commit is contained in:
335
backend/setup/modules/environment.sh
Normal file
335
backend/setup/modules/environment.sh
Normal 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
|
||||
}
|
Reference in New Issue
Block a user