Spannung/build.sh
2026-08-02 11:18:09 +02:00

86 lines
3.1 KiB
Bash
Executable file

#!/bin/bash
set -e
# 1. Aktuellen Linux-Benutzer ermitteln
CURRENT_USER=$(whoami)
USER_HOME=$HOME
# 2. Version & Datum aus version.json auslesen
if [ -f version.json ]; then
VERSION=$(jq -r '.version' version.json)
DATE=$(jq -r '.date' version.json)
else
VERSION="1.0.0"
DATE=$(date +'%Y-%m-%d')
fi
echo "🔧 Baue Spannung-Monitor v$VERSION ($DATE) für Raspberry Pi 3 & 4"
# KORREKTUR: Einfache Anführungszeichen fangen die Leerzeichen für den Go-Linker ab
LDFLAGS="-X 'main.Version=$VERSION' -X 'main.BuildDate=$DATE'"
# Zielverzeichnis 'app' bereinigen und neu erstellen
rm -rf app spannung-arm*
mkdir app
# --- BUILD-PROZESS MIT CGO ---
# 1. Für 64-Bit Raspberry Pi (Standard bei Pi 4 und neueren Pi 3 OS)
echo "📦 Kompiliere für ARM64 (64-Bit)..."
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc go build -ldflags "$LDFLAGS" -o ./app/spannung-arm64 .
echo "✅ Fertig gebaut: ./app/spannung-arm64"
# 2. Für 32-Bit Raspberry Pi (Klassisch für Pi 3 / ältere OS)
echo "📦 Kompiliere für ARM32 v7 (32-Bit)..."
CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 CC=arm-linux-gnueabihf-gcc go build -ldflags "$LDFLAGS" -o ./app/spannung-arm32_7 .
echo "✅ Fertig gebaut: ./app/spannung-arm32_7"
# Dateiberechtigungen im Zielordner setzen
chmod +x ./app/spannung-*
# Konfiguration und Web-Ordner kopieren
cp config.json ./app/
cp version.json ./app/
cp web ./app/ -r
# 3. Die Service-Datei generieren
# Ein kleiner Bash-Wrapper in ExecStart sorgt dafür, dass automatisch das richtige Binary gestartet wird!
cat << 'EOF' > ./app/spannung.service
# ==============================================================================
# KURZANLEITUNG ZUR INSTALLATION UND VERWALTUNG
# ==============================================================================
# 1. Datei kopieren nach: /etc/systemd/system/spannung.service
# 2. Systemd neu laden: sudo systemctl daemon-reload
# 3. Autostart aktivieren: sudo systemctl enable spannung.service
# 4. Dienst starten: sudo systemctl start spannung.service
# ==============================================================================
[Unit]
Description=Spannung Control Service
After=network-online.target i2c.service
Wants=network-online.target
StartLimitIntervalSec=0
[Service]
Type=simple
ExecStartPre=/bin/bash -c 'for i in {1..10}; do i2cdetect -y 1 | grep -E "^40:" | grep -q -E "\b48\b" && i2cdetect -y 1 | grep -E "^40:" | grep -q -E "\b49\b" && exit 0; echo "warte auf ADS1115 Module..."; sleep 2; done; exit 1'
# Erkennt automatisch ob 32- oder 64-Bit OS vorliegt und startet die passende Version
ExecStart=/bin/bash -c 'if [ "$(uname -m)" = "aarch64" ]; then exec %h/spannung/app/spannung-arm64; else exec %h/spannung/app/spannung-arm32_7; fi'
WorkingDirectory=%h/spannung/app
User=%u
Restart=on-failure
RestartSec=5s
StartLimitIntervalSec=60s
StartLimitBurst=3
StandardOutput=append:%h/spannung/app/spannung.log
StandardError=append:%h/spannung/app/spannung.log
[Install]
WantedBy=multi-user.target
EOF
echo "📝 Service-Datei mit automatischer Architektur-Erkennung generiert"
echo "📂 Inhalt des fertigen app-Verzeichnisses:"
ls -la app