0.13.1-8 Install Fix

This commit is contained in:
2026-04-15 06:08:54 +00:00
parent 717bb305c0
commit 07f6ee9bdf
2 changed files with 935 additions and 22 deletions
+103 -22
View File
@@ -56,6 +56,11 @@ HANDBRAKE_INSTALL_MODE=""
SKIP_NGINX=false
REINSTALL=false
# --- Container-Optionen -------------------------------------------------------
CONTAINER_TYPE="none"
CONTAINER_PRIVILEGE="unknown"
SERVICE_SECURITY=""
# --- Argumente parsen ---------------------------------------------------------
while [[ $# -gt 0 ]]; do
case "$1" in
@@ -91,17 +96,40 @@ case "$ID" in
*) fatal "Nicht unterstütztes OS: $ID. Nur Debian/Ubuntu unterstützt." ;;
esac
if [[ -z "$FRONTEND_HOST" ]]; then
FRONTEND_HOST=$(hostname -I | awk '{print $1}')
info "Erkannte IP: $FRONTEND_HOST"
fi
# --- Container Detection ------------------------------------------------------
detect_container_env() {
CONTAINER_TYPE="none"
CONTAINER_PRIVILEGE="unknown"
info "Repository: $REPO_URL"
info "Branch: $GIT_BRANCH"
info "Installationsverzeichnis: $INSTALL_DIR"
info "Systembenutzer: $SERVICE_USER"
info "Backend-Port: $BACKEND_PORT"
info "Frontend-Host: $FRONTEND_HOST"
if command -v systemd-detect-virt &>/dev/null; then
local virt
virt=$(systemd-detect-virt 2>/dev/null || true)
if [[ -n "$virt" && "$virt" != "none" ]]; then
CONTAINER_TYPE="$virt"
fi
fi
if [[ -f /proc/1/environ ]] && tr '\0' '\n' < /proc/1/environ | grep -q '^container=lxc$'; then
CONTAINER_TYPE="lxc"
fi
if [[ "$CONTAINER_TYPE" == "lxc" ]]; then
if [[ -r /proc/self/uid_map ]]; then
local uid_map_line
uid_map_line=$(head -n1 /proc/self/uid_map 2>/dev/null || true)
if [[ "$uid_map_line" =~ ^0[[:space:]]+0[[:space:]]+ ]]; then
CONTAINER_PRIVILEGE="privileged"
else
CONTAINER_PRIVILEGE="unprivileged"
fi
else
CONTAINER_PRIVILEGE="unprivileged"
fi
fi
info "Container-Typ: $CONTAINER_TYPE"
info "Privileg-Level: $CONTAINER_PRIVILEGE"
}
# --- Hilfsfunktionen ----------------------------------------------------------
@@ -182,6 +210,53 @@ patch_existing_ripster_nginx_site() {
'location /api/ {'
}
generate_systemd_security() {
SERVICE_SECURITY=$(cat <<EOF
# Kein statisches DeviceAllow: Device-Pfade unterscheiden sich je nach Host/Container.
# Damit Ripster auf unterschiedlichen Systemen funktioniert, kein Device-Cgroup-Filter.
DevicePolicy=auto
SupplementaryGroups=video render cdrom disk
# Für Skriptausführung via GUI (inkl. optionalem sudo in User-Skripten)
# darf no_new_privileges nicht aktiv sein.
NoNewPrivileges=false
ProtectSystem=full
ReadWritePaths=${INSTALL_DIR}/backend/data ${INSTALL_DIR}/backend/logs /tmp ${SERVICE_HOME} ${MAKEMKV_SERVICE_DIR}
PrivateTmp=true
EOF
)
if [[ "$CONTAINER_TYPE" == "lxc" ]]; then
warn "LXC erkannt passe systemd-Sandbox an"
if [[ "$CONTAINER_PRIVILEGE" == "privileged" ]]; then
SERVICE_SECURITY=$(cat <<EOF
# Kein statisches DeviceAllow: Device-Pfade unterscheiden sich je nach Host/Container.
# Damit Ripster auf unterschiedlichen Systemen funktioniert, kein Device-Cgroup-Filter.
DevicePolicy=auto
SupplementaryGroups=video render cdrom disk
# Für Skriptausführung via GUI (inkl. optionalem sudo in User-Skripten)
# darf no_new_privileges nicht aktiv sein.
NoNewPrivileges=false
ProtectSystem=full
PrivateTmp=false
EOF
)
else
SERVICE_SECURITY=$(cat <<EOF
SupplementaryGroups=video render cdrom disk
# Für Skriptausführung via GUI (inkl. optionalem sudo in User-Skripten)
# darf no_new_privileges nicht aktiv sein.
NoNewPrivileges=false
EOF
)
warn "Unprivileged LXC systemd-Sandbox deaktiviert"
fi
fi
}
install_node() {
header "Node.js installieren"
local required_major=20
@@ -431,6 +506,20 @@ EOF
fi
}
detect_container_env
if [[ -z "$FRONTEND_HOST" ]]; then
FRONTEND_HOST=$(hostname -I | awk '{print $1}')
info "Erkannte IP: $FRONTEND_HOST"
fi
info "Repository: $REPO_URL"
info "Branch: $GIT_BRANCH"
info "Installationsverzeichnis: $INSTALL_DIR"
info "Systembenutzer: $SERVICE_USER"
info "Backend-Port: $BACKEND_PORT"
info "Frontend-Host: $FRONTEND_HOST"
# --- HandBrake-Installmodus auswählen ----------------------------------------
select_handbrake_mode
@@ -661,6 +750,8 @@ chmod 700 "$MAKEMKV_SERVICE_DIR" 2>/dev/null || true
# --- Systemd-Dienst: Backend -------------------------------------------------
header "Systemd-Dienst (Backend) erstellen"
generate_systemd_security
cat > /etc/systemd/system/ripster-backend.service <<EOF
[Unit]
Description=Ripster Backend API
@@ -689,17 +780,7 @@ StandardOutput=journal
StandardError=journal
SyslogIdentifier=ripster-backend
# Kein statisches DeviceAllow: Device-Pfade unterscheiden sich je nach Host/Container.
# Damit Ripster auf unterschiedlichen Systemen funktioniert, kein Device-Cgroup-Filter.
DevicePolicy=auto
SupplementaryGroups=video render cdrom disk
# Für Skriptausführung via GUI (inkl. optionalem sudo in User-Skripten)
# darf no_new_privileges nicht aktiv sein.
NoNewPrivileges=false
ProtectSystem=full
ReadWritePaths=${INSTALL_DIR}/backend/data ${INSTALL_DIR}/backend/logs /tmp ${SERVICE_HOME} ${MAKEMKV_SERVICE_DIR}
PrivateTmp=true
${SERVICE_SECURITY}
[Install]
WantedBy=multi-user.target
@@ -829,4 +910,4 @@ if [[ ${#missing_tools[@]} -gt 0 ]]; then
echo -e " Diese können in den Ripster-Einstellungen konfiguriert werden."
fi
echo ""
echo ""