129 lines
4.1 KiB
Bash
Executable file
129 lines
4.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 $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 ---
|
|
|
|
# Definiere die Pfade zu den lokalen sysroots
|
|
SYSROOT_64="$USER_HOME/spannung/sysroot-arm64"
|
|
SYSROOT_32="$USER_HOME/spannung/sysroot-arm32"
|
|
|
|
# 1. Für 64-Bit Raspberry Pi (Standard bei Pi 4 und neueren Pi 3 OS)
|
|
echo "📦 Kompiliere für ARM64 (64-Bit)..."
|
|
CGO_LDFLAGS="-L$SYSROOT_64/lib/aarch64-linux-gnu -L$SYSROOT_64/usr/lib/aarch64-linux-gnu -Wl,-rpath-link=$SYSROOT_64/lib/aarch64-linux-gnu -Wl,-rpath-link=$SYSROOT_64/usr/lib/aarch64-linux-gnu" \
|
|
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_LDFLAGS="-L$SYSROOT_32/lib/arm-linux-gnueabihf -L$SYSROOT_32/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link=$SYSROOT_32/lib/arm-linux-gnueabihf -Wl,-rpath-link=$SYSROOT_32/usr/lib/arm-linux-gnueabihf" \
|
|
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 mit Platzhaltern generieren
|
|
cat << 'EOF' > ./app/spannung.service
|
|
[Unit]
|
|
Description=Spannung Control Service
|
|
After=network-online.target i2c.service
|
|
Wants=network-online.target
|
|
StartLimitIntervalSec=60s
|
|
StartLimitBurst=3
|
|
|
|
[Service]
|
|
Type=simple
|
|
# Vorprüfung ALS ROOT ausführen
|
|
ExecStartPre=/bin/bash -c 'for i in {1..5}; do /usr/sbin/i2cdetect -y 1 | grep -q 48 && /usr/sbin/i2cdetect -y 1 | grep -q 49 && exit 0; sleep 2; done; exit 1'
|
|
|
|
ExecStart={{TARGET_DIR}}/{{BINARY}}
|
|
WorkingDirectory={{TARGET_DIR}}
|
|
User={{TARGET_USER}}
|
|
Restart=on-failure
|
|
RestartSec=5s
|
|
|
|
# KORREKTUR: Verhindert, dass STRG+C über SSH den Dienst beim Beenden des Logs killt
|
|
KillMode=process
|
|
|
|
StandardOutput=append:{{TARGET_DIR}}/spannung.log
|
|
StandardError=append:{{TARGET_DIR}}/spannung.log
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
|
|
# 4. Ein automatisches Installations-Skript für den Pi im app-Ordner erstellen
|
|
cat << 'EOF' > ./app/install.sh
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
echo "🚀 Starte automatische Einrichtung des Spannung-Monitors..."
|
|
|
|
# Pfade und Benutzer auf dem aktuellen Pi ermitteln
|
|
PI_DIR=$(pwd)
|
|
PI_USER=$(whoami)
|
|
|
|
# Architektur des Betriebssystems prüfen
|
|
ARCH=$(uname -m)
|
|
if [ "$ARCH" = "aarch64" ]; then
|
|
BINARY="spannung-arm64"
|
|
echo "🎯 64-Bit OS erkannt. Nutze: $BINARY"
|
|
else
|
|
BINARY="spannung-arm32_7"
|
|
echo "🎯 32-Bit OS erkannt. Nutze: $BINARY"
|
|
fi
|
|
|
|
# Platzhalter in der Service-Datei direkt auf dem Pi ersetzen
|
|
sed -i "s|{{TARGET_DIR}}|$PI_DIR|g" spannung.service
|
|
sed -i "s|{{TARGET_USER}}|$PI_USER|g" spannung.service
|
|
sed -i "s|{{BINARY}}|$BINARY|g" spannung.service
|
|
|
|
echo "📝 Service-Datei wurde erfolgreich für dieser Pi konfiguriert."
|
|
|
|
# Service in das Systemverzeichnis kopieren und aktivieren
|
|
echo "⚙️ Kopiere Service-Datei nach /etc/systemd/system/..."
|
|
sudo cp spannung.service /etc/systemd/system/spannung.service
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable spannung.service
|
|
|
|
echo "▶️ Starte den Dienst..."
|
|
sudo systemctl restart spannung.service
|
|
|
|
echo "✅ Fertig! Der Spannung-Monitor läuft und der Autostart ist aktiv."
|
|
EOF
|
|
|
|
chmod +x ./app/install.sh
|
|
|
|
echo "📝 Service-Datei und install.sh generiert."
|
|
echo "📂 Inhalt des fertigen app-Verzeichnisses:"
|
|
ls -la app
|