#!/bin/bash # ============================================================================ # TESM — Installer # Richtet System-Pakete, die Flask-App (systemd) sowie den Erreichbarkeits- # Check-Dienst (systemd + Timer) ein. Auszuführen als root, nachdem dieses # Repo z.B. nach /root/tesm geklont wurde. # ============================================================================ set -e REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' print_status() { echo -e "${GREEN}✔${NC} ${1} completed."; } step() { echo -e "${RED}→${NC} ${1}..." | tee -a /var/log/tesm-install.log; } clear # ---- Pakete ---- step "Installing system packages" sudo apt-get update >>/var/log/tesm-install.log 2>&1 && print_status "apt update" sudo apt-get install -y python3 python3-venv python3-pip nginx sqlite3 expect openssh-client git rsync iputils-ping logrotate >>/var/log/tesm-install.log 2>&1 && print_status "Packages installed" # ---- Log-Verzeichnis ---- # Weltweit beschreibbar, da sowohl root (tesm.service/poe.sh) als auch # der i.d.R. unprivilegierte kea-dhcp4-server-Dienstbenutzer (_kea) hier # ihre jeweils eigene Log-Datei anlegen/schreiben müssen. Die eigentliche # logrotate-Konfiguration (/etc/logrotate.d/tesm) schreibt die App # selbst beim Start bzw. beim Speichern unter Systemeinstellungen → Logs. sudo mkdir -p /var/log/tesm sudo chmod 777 /var/log/tesm # ---- App-Verzeichnis ---- step "Deploying application to /srv/tesm" sudo mkdir -p /srv/tesm sudo rsync -a --delete --exclude 'venv' --exclude 'sqlite.db' --exclude 'fernet.key' --exclude 'secret.key' \ "$REPO_DIR/srv/tesm/" /srv/tesm/ >>/var/log/tesm-install.log 2>&1 print_status "Application files copied" # ---- Python venv ---- step "Setting up Python virtual environment" cd /srv/tesm sudo python3 -m venv venv sudo ./venv/bin/pip install --upgrade pip >>/var/log/tesm-install.log 2>&1 sudo ./venv/bin/pip install -r requirements.txt >>/var/log/tesm-install.log 2>&1 print_status "Virtual environment ready" # ---- Datenbank ---- if [ ! -f /srv/tesm/sqlite.db ]; then step "Initializing database" sudo ./venv/bin/python3 create_db.py >>/var/log/tesm-install.log 2>&1 print_status "Database initialized" echo -e "${RED}→${NC} Kein Admin-Benutzer vorhanden. Bitte danach ausführen: sudo /srv/tesm/venv/bin/python3 /srv/tesm/create_admin.py" fi # ---- Custom-Skripte + systemd ---- step "Copying custom scripts and systemd units" sudo mkdir -p /usr/local/bin/custom sudo cp "$REPO_DIR/usr/local/bin/custom/poe.sh" /usr/local/bin/custom/poe.sh sudo chmod +x /usr/local/bin/custom/poe.sh sudo cp "$REPO_DIR"/etc/systemd/system/*.service /etc/systemd/system/ sudo cp "$REPO_DIR"/etc/systemd/system/*.timer /etc/systemd/system/ print_status "Scripts and units copied" # ---- nginx ---- step "Configuring nginx reverse proxy" sudo cp "$REPO_DIR/etc/nginx/sites-available/tesm" /etc/nginx/sites-available/tesm sudo ln -sf /etc/nginx/sites-available/tesm /etc/nginx/sites-enabled/tesm sudo rm -f /etc/nginx/sites-enabled/default sudo nginx -t >>/var/log/tesm-install.log 2>&1 && sudo systemctl reload nginx print_status "nginx configured" # ---- Dienste aktivieren ---- step "Enabling services" sudo systemctl daemon-reload sudo systemctl enable --now tesm.service sudo systemctl enable --now tesm-check.service tesm-check-restart.timer print_status "Services enabled and started" echo -e "${GREEN}✔${NC} Installation abgeschlossen. Web-App erreichbar auf Port 80 (nginx) bzw. 5000 (Flask direkt)."