SSL/TLS-Verwaltung (Upload+Aktivieren), install.sh-Idempotenz, poe_web/rpi-check-Cleanup entfernt
SSL/TLS (neue Seite Einstellungen -> SSL/TLS, eigenes Recht settings_ssl.view/.edit):
- Zertifikat+privater Schluessel per Upload hinterlegbar (PEM), Validierung
VOR dem Speichern: gueltiges Zertifikat, noch nicht abgelaufen, Schluessel
passt zum Zertifikat (Abgleich ueber die oeffentlichen Schluessel als
DER-Bytes -- funktioniert algorithmus-unabhaengig fuer RSA/EC/...).
Speicherort /etc/tesm/ssl (bewusst ausserhalb von /srv/tesm, damit
rsync --delete beim Update das Zertifikat nicht mitloescht), Key mit
chmod 600.
- HTTPS aktivieren schreibt/validiert (nginx -t) eine neue nginx-Konfiguration
und laedt erst danach neu; Port 80 leitet dann automatisch auf https weiter.
HSTS optional zuschaltbar, setzt aktives SSL voraus.
- Gleiches Sicherheitsnetz wie bei den Netzwerkeinstellungen: nach dem
Anwenden 45s Zeitfenster zum Bestaetigen, sonst automatischer Rueckroll
der nginx-Konfiguration UND der ssl_enabled/hsts_enabled-Einstellungen.
Beide Pfade (Timeout-Rollback und Bestaetigen-verhindert-Rollback) live
auf Testsystem-Update-Restart verifiziert, inklusive eines ECHTEN,
ungeplant ausgeloesten Rollbacks waehrend des Testens.
- Noch KEINE Let's-Encrypt-Automatisierung (siehe Kommentar im Code) --
alle bekannten Instanzen laufen intern ohne oeffentliche Domain, HTTP-01
wuerde dort nicht funktionieren; kann bei Bedarf separat ergaenzt werden.
install.sh: Update-Idempotenz ("nur anfassen, was sich geaendert hat"):
- install_if_changed()-Helfer: Custom-Skript/systemd-Units/MOTD-Banner
werden nur noch bei tatsaechlich geaendertem Inhalt neu geschrieben,
daemon-reload nur wenn sich mindestens eine Unit geaendert hat.
- nginx-Konfiguration wird nur noch bei einer Frischinstallation aus dem
Repo-Template geschrieben -- eine bereits vorhandene (egal ob unveraendert
oder von der App selbst um SSL erweitert) wird nie wieder ueberschrieben.
Voraussetzung dafuer, dass die neue SSL-Funktion ein Update ueberlebt.
update.sh: komplette Sonderbehandlung fuer die zwei TESM vorausgehenden
Generationen (rpi-check.service, poe_web.service/poe_manager) entfernt --
auf allen aktuellen Installationen laengst migriert. Deaktivierte
Unit-Dateien dieser Generationen wurden auf Testsystem-Update-Restart
zusaetzlich manuell endgueltig geloescht (waren dort seit einer Migration
im September 2025 nur deaktiviert, nicht entfernt).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+35
-8
@@ -44,6 +44,21 @@ NC='\033[0m'
|
||||
print_status() { echo -e "${GREEN}✔${NC} ${1} completed."; }
|
||||
step() { echo -e "${RED}→${NC} ${1}..." | tee -a /var/log/tesm-install.log; }
|
||||
|
||||
# Kopiert nur, wenn der Inhalt sich tatsächlich unterscheidet (oder das
|
||||
# Ziel noch fehlt) -- bei einem Update sollen ausschließlich Dateien
|
||||
# angefasst werden, die sich zwischen der laufenden und der neuen Version
|
||||
# wirklich geändert haben (unverändert lässt "cp" Zeitstempel/Inode aber
|
||||
# trotzdem hochzählen, was z.B. Monitoring/Backups unnötig triggert).
|
||||
# Gibt 0 zurück, wenn tatsächlich kopiert wurde, 1 wenn übersprungen.
|
||||
install_if_changed() {
|
||||
local src="$1" dst="$2" mode="${3:-644}"
|
||||
if [ -f "$dst" ] && cmp -s "$src" "$dst"; then
|
||||
return 1
|
||||
fi
|
||||
sudo install -m "$mode" "$src" "$dst"
|
||||
return 0
|
||||
}
|
||||
|
||||
# "clear" schlägt ohne TERM/Pseudo-Terminal fehl (z.B. bei Automatisierung
|
||||
# per SSH exec_command ohne pty, genau wie update.sh dieses Skript aufruft)
|
||||
# -- mit "set -e" bricht das sonst die GESAMTE Installation sofort und ohne
|
||||
@@ -150,10 +165,13 @@ 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/
|
||||
UNITS_CHANGED=0
|
||||
install_if_changed "$REPO_DIR/usr/local/bin/custom/poe.sh" /usr/local/bin/custom/poe.sh 755 || true
|
||||
for f in "$REPO_DIR"/etc/systemd/system/*.service "$REPO_DIR"/etc/systemd/system/*.timer; do
|
||||
if install_if_changed "$f" "/etc/systemd/system/$(basename "$f")" 644; then
|
||||
UNITS_CHANGED=1
|
||||
fi
|
||||
done
|
||||
print_status "Scripts and units copied"
|
||||
|
||||
# ---- SSH-Login-Banner (MOTD) ----
|
||||
@@ -162,8 +180,7 @@ print_status "Scripts and units copied"
|
||||
# Die Standard-Skripte bleiben erhalten, werden aber deaktiviert (chmod -x,
|
||||
# nicht gelöscht), damit ein Rückbau jederzeit per chmod +x möglich ist.
|
||||
step "Setting up TESM SSH login banner"
|
||||
sudo cp "$REPO_DIR/etc/update-motd.d/50-tesm" /etc/update-motd.d/50-tesm
|
||||
sudo chmod 755 /etc/update-motd.d/50-tesm
|
||||
install_if_changed "$REPO_DIR/etc/update-motd.d/50-tesm" /etc/update-motd.d/50-tesm 755 || true
|
||||
sudo chmod -x /etc/update-motd.d/00-header /etc/update-motd.d/10-help-text \
|
||||
/etc/update-motd.d/50-motd-news /etc/update-motd.d/60-unminimize \
|
||||
/etc/update-motd.d/91-release-upgrade /etc/update-motd.d/92-unattended-upgrades \
|
||||
@@ -171,8 +188,16 @@ sudo chmod -x /etc/update-motd.d/00-header /etc/update-motd.d/10-help-text \
|
||||
print_status "SSH login banner configured"
|
||||
|
||||
# ---- nginx ----
|
||||
# Nur bei einer Frischinstallation aus dem Repo-Template geschrieben --
|
||||
# eine bereits vorhandene Konfiguration (egal ob unverändert oder von der
|
||||
# App selbst z.B. um SSL/HSTS erweitert, siehe Systemeinstellungen -> SSL)
|
||||
# wird NIE wieder überschrieben. Symlink/Default-Site-Entfernung und der
|
||||
# Validierungs-Reload laufen dagegen immer -- rein idempotent, ändern an
|
||||
# einer bestehenden Konfiguration selbst nichts.
|
||||
step "Configuring nginx reverse proxy"
|
||||
sudo cp "$REPO_DIR/etc/nginx/sites-available/tesm" /etc/nginx/sites-available/tesm
|
||||
if [ ! -f /etc/nginx/sites-available/tesm ]; then
|
||||
sudo cp "$REPO_DIR/etc/nginx/sites-available/tesm" /etc/nginx/sites-available/tesm
|
||||
fi
|
||||
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
|
||||
@@ -180,7 +205,9 @@ print_status "nginx configured"
|
||||
|
||||
# ---- Dienste aktivieren ----
|
||||
step "Enabling services"
|
||||
sudo systemctl daemon-reload
|
||||
if [ "$UNITS_CHANGED" -eq 1 ]; then
|
||||
sudo systemctl daemon-reload
|
||||
fi
|
||||
sudo systemctl enable --now tesm.service
|
||||
sudo systemctl enable --now tesm-check.service tesm-check-restart.timer
|
||||
print_status "Services enabled and started"
|
||||
|
||||
Reference in New Issue
Block a user