77 lines
2.2 KiB
Bash
Executable File
77 lines
2.2 KiB
Bash
Executable File
#!/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"
|
|
ENV_TEMPLATE="${PROJECT_DIR}/config/yourchat2.env.example"
|
|
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/7] Build release binary ..."
|
|
sudo -u "${BUILD_USER}" bash -lc "cd '${PROJECT_DIR}' && 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
|
|
if [[ -f "${ENV_TEMPLATE}" ]]; then
|
|
install -m 0640 "${ENV_TEMPLATE}" "${ENV_FILE}"
|
|
else
|
|
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}"
|
|
fi
|
|
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"
|