#!/usr/bin/env bash set -euo pipefail SERVICE_NAME="yourchat2" PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SERVICE_SRC="${PROJECT_DIR}/yourchat2.service" SERVICE_DST="/etc/systemd/system/${SERVICE_NAME}.service" ENV_DIR="/etc/yourchat2" ENV_FILE="${ENV_DIR}/yourchat2.env" BIN_PATH="${PROJECT_DIR}/target/release/yourchat2" INSTALL_BIN="/usr/local/bin/yourchat2" WORK_DIR="/var/lib/yourchat2" BUILD_USER="tsschulz" if [[ "${EUID}" -ne 0 ]]; then echo "Dieses Skript muss als root ausgefuehrt werden (z. B. via sudo)." >&2 exit 1 fi if [[ ! -f "${SERVICE_SRC}" ]]; then echo "Service-Datei nicht gefunden: ${SERVICE_SRC}" >&2 exit 1 fi echo "[1/6] Build release binary ..." sudo -u "${BUILD_USER}" cargo build --release --manifest-path "${PROJECT_DIR}/Cargo.toml" if [[ ! -x "${BIN_PATH}" ]]; then echo "Binary wurde nicht erzeugt: ${BIN_PATH}" >&2 exit 1 fi echo "[2/7] Install binary ..." install -m 0755 "${BIN_PATH}" "${INSTALL_BIN}" echo "[3/7] Install service file ..." install -m 0644 "${SERVICE_SRC}" "${SERVICE_DST}" echo "[4/7] Ensure environment directory ..." install -d -m 0755 "${ENV_DIR}" echo "[5/7] Ensure work directory ..." install -d -m 0750 "${WORK_DIR}" chown "${BUILD_USER}:${BUILD_USER}" "${WORK_DIR}" echo "[6/7] Ensure environment file ..." if [[ ! -f "${ENV_FILE}" ]]; then cat > "${ENV_FILE}" <<'EOF' # yourchat2 environment # CHAT_WS_ADDR=0.0.0.0:1235 # CHAT_TCP_ADDR=127.0.0.1:1236 # CHAT_UNIX_SOCKET=/run/yourchat2/yourchat2.sock # CHAT_ALLOWED_USERS=alice,bob # CHAT_DB_URL=postgres://user:pass@host:5432/dbname # SECRET_KEY=replace-with-real-secret EOF chmod 0640 "${ENV_FILE}" chown root:root "${ENV_FILE}" fi echo "[7/7] Reload and enable service ..." systemctl daemon-reload systemctl enable --now "${SERVICE_NAME}.service" echo "[status] Service status ..." systemctl --no-pager --full status "${SERVICE_NAME}.service" || true echo echo "Fertig. Konfiguration bei Bedarf in ${ENV_FILE} anpassen." echo "Danach neu laden mit: systemctl restart ${SERVICE_NAME}.service"