diff --git a/gamepizero.sh b/gamepizero.sh new file mode 100644 index 0000000..040e319 --- /dev/null +++ b/gamepizero.sh @@ -0,0 +1,180 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ========================================================== +# GamePiZero Installer / Updater +# Raspberry Pi OS Lite / Headless +# ========================================================== + +APP_NAME="gamepizero" + +ZIP_URL="https://example.com/gamepizero.zip" + +INSTALL_DIR="/opt/gamepizero" +TMP_DIR="/tmp/gamepizero-install" + +EXECUTABLE_PATH="/opt/gamepizero/GamePiZero.App" + +SERVICE_NAME="gamepizero.service" +SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}" + +REBOOT_REQUIRED=0 + +# ========================================================== +# Prüfung +# ========================================================== + +if [[ "${EUID}" -ne 0 ]]; then + echo "Bitte mit sudo ausführen:" + echo " sudo ./gamepizero.sh install" + echo " sudo ./gamepizero.sh update" + exit 1 +fi + +ACTION="${1:-}" + +case "${ACTION}" in + install|update) + ;; + *) + echo "Verwendung:" + echo " sudo ./gamepizero.sh install" + echo " sudo ./gamepizero.sh update" + exit 1 + ;; +esac + +# ========================================================== +# Funktionen +# ========================================================== + +log() { + echo "[INFO] $1" +} + +error() { + echo "[ERROR] $1" >&2 +} + +install_dependencies() { + log "Installiere benötigte Pakete..." + + apt-get update + apt-get install -y curl unzip raspi-config +} + +enable_i2c() { + log "Prüfe I²C..." + + if command -v raspi-config >/dev/null 2>&1; then + if raspi-config nonint get_i2c | grep -q "0"; then + log "I²C ist bereits aktiviert." + else + log "Aktiviere I²C..." + raspi-config nonint do_i2c 0 + REBOOT_REQUIRED=1 + fi + else + error "raspi-config nicht gefunden. I²C konnte nicht automatisch aktiviert werden." + fi +} + +stop_service_if_exists() { + if systemctl list-unit-files | grep -q "^${SERVICE_NAME}"; then + log "Stoppe bestehenden Dienst..." + systemctl stop "${SERVICE_NAME}" || true + fi +} + +download_zip() { + log "Lade Anwendung herunter..." + + rm -rf "${TMP_DIR}" + mkdir -p "${TMP_DIR}" + + curl -fL "${ZIP_URL}" -o "${TMP_DIR}/${APP_NAME}.zip" +} + +extract_app() { + log "Installiere Anwendung nach ${INSTALL_DIR}..." + + mkdir -p "${INSTALL_DIR}" + unzip -o "${TMP_DIR}/${APP_NAME}.zip" -d "${INSTALL_DIR}" + + if [[ ! -f "${EXECUTABLE_PATH}" ]]; then + error "Executable wurde nicht gefunden:" + error "${EXECUTABLE_PATH}" + exit 1 + fi + + chmod +x "${EXECUTABLE_PATH}" + + # App läuft als root, daher Dateien root:root + chown -R root:root "${INSTALL_DIR}" + + rm -rf "${TMP_DIR}" +} + +install_service() { + log "Erstelle systemd-Dienst..." + + cat > "${SERVICE_FILE}" <