Add gamepizero.sh
parent
d69a0f893e
commit
4df59a6d08
|
|
@ -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}" <<EOF
|
||||
[Unit]
|
||||
Description=GamePiZero
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=${INSTALL_DIR}
|
||||
ExecStart=${EXECUTABLE_PATH}
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
# Die App läuft bewusst als root
|
||||
User=root
|
||||
Group=root
|
||||
|
||||
Environment=DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable "${SERVICE_NAME}"
|
||||
systemctl restart "${SERVICE_NAME}"
|
||||
}
|
||||
|
||||
show_status() {
|
||||
log "Dienststatus:"
|
||||
systemctl --no-pager status "${SERVICE_NAME}" || true
|
||||
}
|
||||
|
||||
# ==========================================================
|
||||
# Ablauf
|
||||
# ==========================================================
|
||||
|
||||
log "Aktion: ${ACTION}"
|
||||
|
||||
install_dependencies
|
||||
enable_i2c
|
||||
|
||||
if [[ "${ACTION}" == "update" ]]; then
|
||||
stop_service_if_exists
|
||||
fi
|
||||
|
||||
download_zip
|
||||
extract_app
|
||||
install_service
|
||||
show_status
|
||||
|
||||
echo
|
||||
echo "Fertig."
|
||||
|
||||
if [[ "${REBOOT_REQUIRED}" == "1" ]]; then
|
||||
echo
|
||||
echo "I²C wurde aktiviert."
|
||||
echo "Ein Reboot ist empfohlen:"
|
||||
echo " sudo reboot"
|
||||
fi
|
||||
Loading…
Reference in New Issue