From 2094129dee33cd7d5f2c088df5e042ffab142f0b Mon Sep 17 00:00:00 2001 From: digiflo Date: Sun, 21 Jun 2026 15:42:52 +0200 Subject: [PATCH] Installer: Gitea-Release-Quelle + SHA256 + GitHub-Fallback --- install-netbird-slate7.sh | 233 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 install-netbird-slate7.sh diff --git a/install-netbird-slate7.sh b/install-netbird-slate7.sh new file mode 100644 index 0000000..e3ce064 --- /dev/null +++ b/install-netbird-slate7.sh @@ -0,0 +1,233 @@ +#!/bin/sh +# ============================================================================= +# NetBird-Installer für GL.iNet Slate 7 (GL-BE3600 / aarch64 / OpenWrt) +# Zielserver (self-hosted): https://nb.digiflo.at:443 +# ----------------------------------------------------------------------------- +# Holt das aktuelle statische NetBird-Binary (matcht den :latest-Server), +# richtet einen reboot-festen procd-Dienst ein und enrollt optional gleich. +# +# AUSFÜHRUNG (als root auf dem Router): +# sh install-netbird-slate7.sh # nur installieren +# sh install-netbird-slate7.sh # installieren + enrollen +# sh install-netbird-slate7.sh status # Status anzeigen +# sh install-netbird-slate7.sh uninstall # restlos entfernen +# +# Persistenz: Profil/Key liegen in /etc/netbird/ -> übersteht Reboot UND +# Firmware-Upgrade (sysupgrade behält /etc). NICHT bei Werks-Reset. +# ============================================================================= + +set -e + +# ---- Konfiguration ---------------------------------------------------------- +MGMT_URL="https://nb.digiflo.at:443" # self-hosted Management +GITEA="https://gitea.digiflo.at" # eigener Deploy-Server (Primärquelle) +GITEA_REPO="digiflo/netbird-slate7" # Repo mit den gespiegelten Releases +FALLBACK_VER="0.73.1" # falls weder Gitea noch GitHub antworten +CONF_DIR="/etc/netbird" # persistent (überlebt Reboot+Upgrade) +PROFILE="${CONF_DIR}/default.json" # hier liegt PrivateKey/ManagementURL +SOCK="unix:///var/run/netbird.sock" +BIN="/usr/bin/netbird" +INIT="/etc/init.d/netbird" +# ----------------------------------------------------------------------------- + +log() { echo ">>> $*"; } +warn() { echo "!!! $*" >&2; } +die() { echo "FEHLER: $*" >&2; exit 1; } + +[ "$(id -u)" = "0" ] || die "Bitte als root ausführen." + +# --------------------------------------------------------------------------- +# UNINSTALL +# --------------------------------------------------------------------------- +if [ "$1" = "uninstall" ]; then + log "Entferne NetBird ..." + [ -x "$INIT" ] && { "$INIT" stop 2>/dev/null || true; "$INIT" disable 2>/dev/null || true; } + "$BIN" down 2>/dev/null || true + rm -f "$INIT" "$BIN" + rm -rf "$CONF_DIR" /var/lib/netbird /var/run/netbird.sock /var/log/netbird + log "NetBird entfernt. (WireGuard-Interface wt0 verschwindet beim nächsten Reboot bzw. ist schon weg.)" + exit 0 +fi + +# --------------------------------------------------------------------------- +# STATUS +# --------------------------------------------------------------------------- +if [ "$1" = "status" ]; then + [ -x "$BIN" ] || die "NetBird ist nicht installiert." + "$BIN" version + echo + "$BIN" status -d 2>/dev/null || "$BIN" status 2>/dev/null || warn "Daemon läuft nicht. Start: $INIT start" + exit 0 +fi + +# --------------------------------------------------------------------------- +# INSTALL (+ optional Enroll) +# --------------------------------------------------------------------------- +SETUP_KEY="$1" + +# 1) Architektur ------------------------------------------------------------ +ARCH="$(uname -m)" +case "$ARCH" in + aarch64|arm64) NBARCH="arm64" ;; + armv7l|armv7) NBARCH="armv6" ;; + armv6l) NBARCH="armv6" ;; + x86_64) NBARCH="amd64" ;; + mips) NBARCH="mips_softfloat" ;; + *) warn "Unbekannte Architektur '$ARCH' – versuche arm64."; NBARCH="arm64" ;; +esac +log "Architektur: $ARCH -> NetBird-Build linux_${NBARCH}" + +# 2) Speicherplatz prüfen (Binary ~45 MB) ----------------------------------- +log "Freier Speicher:" +df -h / /overlay 2>/dev/null | grep -viE 'tmpfs|^Filesystem' | sed 's/^/ /' || true + +# 3) Abhängigkeiten (Kernel-WireGuard) – auf GL-Firmware i.d.R. schon da ----- +log "Prüfe Abhängigkeiten (Kernel-WireGuard, CA-Zertifikate) ..." +opkg update >/dev/null 2>&1 || warn "opkg update fehlgeschlagen (offline?) – fahre fort." +for p in kmod-wireguard wireguard-tools ca-bundle kmod-tun; do + if opkg list-installed 2>/dev/null | grep -q "^$p "; then + : + else + opkg install "$p" >/dev/null 2>&1 \ + && log " installiert: $p" \ + || warn " '$p' nicht via opkg verfügbar – auf GL-Firmware meist bereits enthalten." + fi +done +# WireGuard-Kernelmodul laden (falls vorhanden, nicht geladen) +modprobe wireguard 2>/dev/null || true + +# 4) Versionsquelle: PRIMÄR eigenes Gitea-Release, sonst GitHub -------------- +log "Ermittle NetBird-Version ..." +VER=""; SRC=""; URL=""; SHAURL="" + +# Primär: gespiegeltes Gitea-Release (der „Deploy"; nur arm64 wird gespiegelt) +if [ "$NBARCH" = "arm64" ]; then + TAG="$(wget -q -O - "$GITEA/api/v1/repos/$GITEA_REPO/releases/latest" 2>/dev/null \ + | grep -o '"tag_name":"[^"]*"' | head -1 | sed 's/.*"tag_name":"\([^"]*\)".*/\1/')" + if [ -n "$TAG" ]; then + VER="${TAG#v}" + URL="$GITEA/$GITEA_REPO/releases/download/$TAG/netbird_${VER}_linux_arm64.tar.gz" + SHAURL="${URL}.sha256" + SRC="Gitea ($GITEA)" + fi +fi + +# Fallback: direkt GitHub-Release (latest) +if [ -z "$VER" ]; then + VER="$(wget -q -O - "https://api.github.com/repos/netbirdio/netbird/releases/latest" 2>/dev/null \ + | grep -o '"tag_name":[^,]*' | head -1 | grep -o '[0-9][0-9.]*' | head -1)" + [ -n "$VER" ] || { VER="$FALLBACK_VER"; warn "Weder Gitea noch GitHub-API erreichbar – Fallback $VER."; } + URL="https://github.com/netbirdio/netbird/releases/download/v${VER}/netbird_${VER}_linux_${NBARCH}.tar.gz" + SHAURL="" + SRC="GitHub" +fi +log "Zielversion: $VER (Quelle: $SRC)" + +# 5) Download + (optional) SHA256-Verifikation + Installation ----------------- +TARBALL="netbird_${VER}_linux_${NBARCH}.tar.gz" +TMP="/tmp/nb-install.$$" +rm -rf "$TMP"; mkdir -p "$TMP" +log "Lade $URL ..." +wget -q -O "$TMP/$TARBALL" "$URL" || die "Download fehlgeschlagen ($URL)" + +# SHA256 prüfen, wenn eine Prüfsumme verfügbar ist und sha256sum existiert +if [ -n "$SHAURL" ] && command -v sha256sum >/dev/null 2>&1 && wget -q -O "$TMP/sha" "$SHAURL" 2>/dev/null; then + EXP="$(awk '{print $1}' "$TMP/sha" 2>/dev/null)" + GOT="$(sha256sum "$TMP/$TARBALL" 2>/dev/null | awk '{print $1}')" + if [ -n "$EXP" ] && [ -n "$GOT" ]; then + [ "$EXP" = "$GOT" ] && log "SHA256 ok ($GOT)" || die "SHA256-Mismatch! erwartet=$EXP bekommen=$GOT" + fi +fi + +tar -xzf "$TMP/$TARBALL" -C "$TMP" || die "Entpacken fehlgeschlagen." +[ -f "$TMP/netbird" ] || die "netbird-Binary nicht im Archiv gefunden." + +# laufenden Dienst vor dem Überschreiben stoppen (= Upgrade) +[ -x "$INIT" ] && "$INIT" stop 2>/dev/null || true + +install -m 0755 "$TMP/netbird" "$BIN" || die "Konnte $BIN nicht schreiben (Speicher voll?)." +rm -rf "$TMP" +log "Installiert: $("$BIN" version 2>/dev/null || echo '?')" + +# 6) Persistente Verzeichnisse ---------------------------------------------- +mkdir -p "$CONF_DIR" /var/lib/netbird /var/log/netbird +chmod 700 "$CONF_DIR" + +# 7) procd-Init-Script ------------------------------------------------------ +# --config zeigt auf das PERSISTENTE Profil (/etc), --disable-profiles +# hält es als Single-Config simpel. NB_DISABLE_SSH_CONFIG schützt das +# Router-SSH davor, von NetBird umgeschrieben zu werden. +log "Schreibe procd-Service $INIT ..." +cat > "$INIT" </dev/null || true +} +INITEOF +chmod +x "$INIT" + +# 8) Dienst aktivieren + starten ------------------------------------------- +log "Aktiviere + starte Dienst ..." +"$INIT" enable +"$INIT" start +sleep 3 + +# 9) Enrollment ------------------------------------------------------------- +echo +if [ -n "$SETUP_KEY" ] && [ "$SETUP_KEY" != "install" ]; then + log "Enrolle gegen $MGMT_URL ..." + if "$BIN" up --config "$PROFILE" --management-url "$MGMT_URL" --setup-key "$SETUP_KEY"; then + sleep 3 + echo + "$BIN" status 2>/dev/null | grep -iE 'Management|Signal|Relay|FQDN|NetBird IP' || true + echo + log "FERTIG ✓ Router ist im NetBird-Netz." + else + warn "Enroll fehlgeschlagen. Manuell nachholen:" + echo " $BIN up --management-url $MGMT_URL --setup-key " + fi +else + log "Installation fertig. Zum Verbinden noch enrollen (Setup-Key aus dem NetBird-Dashboard):" + echo + echo " netbird up --management-url $MGMT_URL --setup-key " +fi + +# 10) Hinweise -------------------------------------------------------------- +cat <