upd
This commit is contained in:
@@ -1,12 +1,20 @@
|
||||
# MeshCentral
|
||||
# MeshCentral (Batocera)
|
||||
|
||||
Nachfolgend zwei **Copy-&-Paste Einzeiler** für Batocera, um den MeshAgent-Installer aus diesem Repo herunterzuladen und zu starten.
|
||||
Dieser Installer unterstützt **Copy & Paste** des **Linux/BSD-Einzeilers** aus MeshCentral (_Devices → Add Agent → **Linux / BSD**_).
|
||||
Du kannst also den kompletten Befehl aus dem MeshCentral-Fenster hier einfügen – URL & Token werden automatisch geparst.
|
||||
|
||||
**RAW-URL des Installers:**
|
||||
`https://git.familie-berner.de/Open/Installer/raw/branch/main/Batocera/MeshCentral/install-meshagent.sh`
|
||||
|
||||
---
|
||||
|
||||
## Option 1: Interaktiv (URL/Token werden abgefragt ODER aus deinem Linux/BSD-Einzeiler geparst)
|
||||
|
||||
```bash
|
||||
U=https://git.familie-berner.de/Open/Installer/raw/branch/main/Batocera/MeshCentral/nstall-meshagent.sh ; (wget -qO /tmp/ima.sh "$U" || wget --no-proxy -qO /tmp/ima.sh "$U" || curl -fsSL "$U" -o /tmp/ima.sh) && sh /tmp/ima.sh
|
||||
|
||||
---
|
||||
|
||||
## Option 1: Interaktiv (fragt URL & Token ab)
|
||||
|
||||
```bash
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
#!/bin/sh
|
||||
# install-meshagent.sh
|
||||
# MeshCentral-MeshAgent für Batocera im /userdata-Bereich installieren
|
||||
# - fragt interaktiv nach MeshCentral-URL & Enrollment-Token
|
||||
# - lädt den offiziellen meshinstall.sh vom Server
|
||||
# - richtet Autostart über /userdata/system/custom.sh ein
|
||||
# BusyBox-/ash-kompatibel (Batocera hat read-only rootfs, daher alles in /userdata)
|
||||
# Batocera-/BusyBox-kompatibel. Installiert den MeshCentral-Agent im /userdata-Bereich,
|
||||
# richtet Autostart ein und kann URL/Token entweder interaktiv abfragen
|
||||
# ODER direkt aus dem MeshCentral-Linux/BSD-Einzeiler heraus PARSEN.
|
||||
|
||||
set -eu
|
||||
|
||||
@@ -15,11 +13,11 @@ SOCKET_TEST_HOST="1.1.1.1"
|
||||
|
||||
say() { printf '%s\n' "$*"; }
|
||||
err() { printf 'ERROR: %s\n' "$*" >&2; }
|
||||
ask() { printf '%s' "$1" >&2; read -r REPLY; printf '%s' "$REPLY"; }
|
||||
ask() { printf '%s' "$1" >&2; read -r REPLY || true; printf '%s' "$REPLY"; }
|
||||
|
||||
need_root() {
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
err "Bitte als root ausführen (Batocera läuft i.d.R. sowieso als root)."
|
||||
err "Bitte als root ausführen (auf Batocera üblich)."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
@@ -28,8 +26,7 @@ wait_net() {
|
||||
say "Warte auf Netzwerk …"
|
||||
i=0
|
||||
while ! ping -c1 -W1 "$SOCKET_TEST_HOST" >/dev/null 2>&1; do
|
||||
i=$((i+1))
|
||||
[ $i -ge 30 ] && break
|
||||
i=$((i+1)); [ $i -ge 30 ] && break
|
||||
sleep 2
|
||||
done
|
||||
}
|
||||
@@ -40,16 +37,11 @@ mk_layout() {
|
||||
}
|
||||
|
||||
download_install_script() {
|
||||
# lädt den generischen MeshCentral-Install-Skript (script=1) vom eigenen Server
|
||||
MESH_URL="$1"
|
||||
MESH_URL="$1" # z. B. https://meshcentral.example.com/meshagents?script=1
|
||||
say "Lade meshinstall.sh von: ${MESH_URL}"
|
||||
# robust: erst wget, dann wget ohne Proxy, dann curl
|
||||
if ! (wget "${MESH_URL}" -O meshinstall.sh 2>/dev/null || wget "${MESH_URL}" --no-proxy -O meshinstall.sh 2>/dev/null); then
|
||||
if ! (wget -qO meshinstall.sh "$MESH_URL" 2>/dev/null || wget --no-proxy -qO meshinstall.sh "$MESH_URL" 2>/dev/null); then
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
if ! curl -fsSL "${MESH_URL}" -o meshinstall.sh; then
|
||||
err "Konnte meshinstall.sh nicht herunterladen."
|
||||
exit 2
|
||||
fi
|
||||
curl -fsSL "$MESH_URL" -o meshinstall.sh
|
||||
else
|
||||
err "Weder wget noch curl verfügbar."
|
||||
exit 2
|
||||
@@ -59,13 +51,11 @@ download_install_script() {
|
||||
}
|
||||
|
||||
run_install_script() {
|
||||
# führt den Agent-Installer aus; auf Batocera fehlen Systemdienste -> wir nutzen später -noinstall
|
||||
MC_URL="$1"
|
||||
MC_TOKEN="$2"
|
||||
say "Starte meshinstall.sh (dies erzeugt u.a. ./meshagent und ./meshagent.msh)…"
|
||||
# ohne sudo; falls der Installer eine zweite Runde braucht, führen wir ihn einfach nochmal aus
|
||||
say "Starte meshinstall.sh …"
|
||||
if ! ./meshinstall.sh "$MC_URL" "$MC_TOKEN"; then
|
||||
say "Zweiter Versuch…"
|
||||
say "Zweiter Versuch …"
|
||||
./meshinstall.sh "$MC_URL" "$MC_TOKEN"
|
||||
fi
|
||||
if [ ! -x "${MESH_BASE}/meshagent" ]; then
|
||||
@@ -77,7 +67,6 @@ run_install_script() {
|
||||
write_start_script() {
|
||||
cat > "${MESH_BASE}/start.sh" <<'EOF'
|
||||
#!/bin/sh
|
||||
# Startskript für MeshAgent unter Batocera (userland, ohne Systemdienst)
|
||||
BASE="/userdata/system/meshagent"
|
||||
LOG="${BASE}/meshagent.log"
|
||||
|
||||
@@ -94,19 +83,19 @@ while ! ping -c1 -W1 1.1.1.1 >/dev/null 2>&1; do
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# Agent im Userverzeichnis starten; -noinstall erzwingt lokalen State/kein Systemdienst
|
||||
cd "$BASE"
|
||||
# logrotate-light: wenn >5MB, alte Datei weg
|
||||
# Mini-Logrotate
|
||||
if [ -f "$LOG" ] && [ "$(wc -c <"$LOG")" -gt 5242880 ]; then
|
||||
mv "$LOG" "$LOG.1" 2>/dev/null || true
|
||||
fi
|
||||
./meshagent start >>"$LOG" 2>&1 &
|
||||
|
||||
# -noinstall: keine Systemintegration, alles lokal
|
||||
./meshagent -noinstall >>"$LOG" 2>&1 &
|
||||
EOF
|
||||
chmod +x "${MESH_BASE}/start.sh"
|
||||
}
|
||||
|
||||
enable_autostart() {
|
||||
# custom.sh anlegen/ergänzen (idempotent)
|
||||
if [ ! -f "$CUSTOM_SH" ]; then
|
||||
echo '#!/bin/sh' > "$CUSTOM_SH"
|
||||
chmod +x "$CUSTOM_SH"
|
||||
@@ -117,7 +106,7 @@ enable_autostart() {
|
||||
}
|
||||
|
||||
start_now() {
|
||||
say "Starte MeshAgent jetzt…"
|
||||
say "Starte MeshAgent jetzt …"
|
||||
/userdata/system/meshagent/start.sh
|
||||
sleep 1
|
||||
if pidof meshagent >/dev/null 2>&1; then
|
||||
@@ -128,67 +117,71 @@ start_now() {
|
||||
fi
|
||||
}
|
||||
|
||||
### --- main ---------------------------------------------------------------
|
||||
# ---- Parser: URL/Token aus MeshCentral-Linux/BSD-Einzeiler oder Variablen/Args ----
|
||||
# Unterstützte Eingaben:
|
||||
# - Interaktiv: erst URL, dann Token
|
||||
# - Env: MC_URL / MC_TOKEN
|
||||
# - Args: alles, was du eingibst, wird zusammengesetzt und geparst (z. B. kompletter Einzeiler)
|
||||
|
||||
parse_url_token() {
|
||||
ENTRY_ALL="$*"
|
||||
|
||||
# ENV hat Vorrang
|
||||
MC_URL="${MC_URL:-}"
|
||||
MC_TOKEN="${MC_TOKEN:-}"
|
||||
|
||||
# Falls Args übergeben wurden, übernehme sie als ENTRY
|
||||
if [ -n "$ENTRY_ALL" ]; then
|
||||
ENTRY="$ENTRY_ALL"
|
||||
else
|
||||
# Interaktive Abfrage – hier kann man ENTWEDER die URL/Token einzeln eingeben
|
||||
# ODER den kompletten MeshCentral-Linux/BSD-Einzeiler paste'n.
|
||||
ENTRY="$(ask "Füge hier den Linux/BSD-Einzeiler aus MeshCentral ein\nODER gib die Server-URL ein und drücke ENTER:\n> ")"
|
||||
fi
|
||||
|
||||
# Wenn MC_URL leer ist, versuche aus ENTRY zu parsen:
|
||||
if [ -z "${MC_URL}" ]; then
|
||||
# 1) Exakte Form: … meshinstall.sh <URL> '<TOKEN>' …
|
||||
MC_URL="$(printf '%s' "$ENTRY" | sed -nE 's/.*meshinstall\.sh[[:space:]]+(https?:\/\/[^[:space:]]+).*/\1/p' | head -n1)"
|
||||
# 2) Fallback: erster https://… im Text
|
||||
[ -n "$MC_URL" ] || MC_URL="$(printf '%s' "$ENTRY" | sed -nE 's/.*(https?:\/\/[^"'"'"'[:space:]]+).*/\1/p' | head -n1)"
|
||||
fi
|
||||
|
||||
# Wenn MC_TOKEN leer ist, aus ENTRY extrahieren:
|
||||
if [ -z "${MC_TOKEN}" ]; then
|
||||
# 1) Vorzugsweise das token in einfachen Anführungszeichen nach meshinstall.sh <URL> '<TOKEN>'
|
||||
MC_TOKEN="$(printf '%s' "$ENTRY" | sed -nE "s/.*meshinstall\.sh[[:space:]]+https?:\/\/[^[:space:]]+[[:space:]]+'([^']+)'.*/\1/p" | head -n1)"
|
||||
# 2) Wenn nicht in Quotes: nimm das Wort NACH der URL im Aufruf
|
||||
[ -n "$MC_TOKEN" ] || MC_TOKEN="$(printf '%s' "$ENTRY" | sed -nE 's/.*meshinstall\.sh[[:space:]]+https?:\/\/[^[:space:]]+[[:space:]]+([^[:space:]]+).*/\1/p' | head -n1)"
|
||||
fi
|
||||
|
||||
# Wenn immer noch leer: einzeln abfragen
|
||||
[ -n "$MC_URL" ] || MC_URL="$(ask "MeshCentral-Server-URL (z.B. https://meshcentral.familie-berner.de): ")"
|
||||
[ -n "$MC_TOKEN" ] || MC_TOKEN="$(ask "Enrollment-Token: ")"
|
||||
|
||||
# Aufräumen der URL: Basis + /meshagents?script=1 für den Installer
|
||||
BASE_URL="${MC_URL%/}"
|
||||
INSTALL_URL="${BASE_URL}/meshagents?script=1"
|
||||
|
||||
# Rückgabe via globale Variablen
|
||||
M_PARSED_INSTALL_URL="$INSTALL_URL"
|
||||
M_PARSED_MC_URL="$BASE_URL"
|
||||
M_PARSED_TOKEN="$MC_TOKEN"
|
||||
}
|
||||
|
||||
### --- main ---
|
||||
need_root
|
||||
wait_net
|
||||
mk_layout
|
||||
|
||||
say "=== MeshCentral-Agent Installer (Batocera) ==="
|
||||
parse_url_token "$@"
|
||||
|
||||
# 1) Abfrage nach MeshCentral-Server (Basis-URL) & Token
|
||||
# Du kannst hier auch einfach DEINEN Copy&Paste-Command posten – wir extrahieren URL & Token.
|
||||
ENTRY="$(ask "Bitte MeshCentral-URL & Token eingeben\n(z.B. nur URL & Token getrennt durch ENTER, oder füge deinen gesamten Copy&Paste-Befehl ein):\n> ")"
|
||||
|
||||
# Versuch, URL & Token aus ENTRY zu parsen
|
||||
# Erlaubt Formen wie:
|
||||
# - https://meshcentral.example.com <ENTER> <TOKEN>
|
||||
# - kompletter Befehl … ./meshinstall.sh https://meshcentral.example.com '<TOKEN>'
|
||||
MC_URL=""
|
||||
MC_TOKEN=""
|
||||
|
||||
# 1. Wenn ENTRY nur die URL ist, Token separat abfragen
|
||||
case "$ENTRY" in
|
||||
http*://*mesh*|http*://*)
|
||||
MC_URL="$ENTRY"
|
||||
;;
|
||||
*)
|
||||
# aus kompletten Befehlen URL/Token extrahieren
|
||||
MC_URL="$(printf '%s' "$ENTRY" | sed -n "s/.*\(https\?:\/\/[A-Za-z0-9._~:/?#\[\]@!$&'()*+,;=%-]*\).*/\1/p" | head -n1)"
|
||||
MC_TOKEN="$(printf '%s' "$ENTRY" | sed -n "s/.*meshinstall\.sh[[:space:]]\+https\?:\/\/[^[:space:]]\+[[:space:]]\+'\([^']*\)'.*/\1/p" | head -n1)"
|
||||
if [ -z "$MC_TOKEN" ]; then
|
||||
# Alternative: Token unquoted am Ende
|
||||
MC_TOKEN="$(printf '%s' "$ENTRY" | awk '{print $NF}')"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$MC_URL" ]; then
|
||||
MC_URL="$(ask "MeshCentral-Server-URL (z.B. https://meshcentral.familie-berner.de): ")"
|
||||
fi
|
||||
if [ -z "$MC_TOKEN" ]; then
|
||||
MC_TOKEN="$(ask "Enrollment-Token (von MeshCentral): ")"
|
||||
fi
|
||||
|
||||
# 2) meshinstall.sh vom Server holen
|
||||
INSTALL_URL="${MC_URL%/}/meshagents?script=1"
|
||||
download_install_script "$INSTALL_URL"
|
||||
|
||||
# 3) Installer ausführen (legt u.a. ./meshagent & ./meshagent.msh an)
|
||||
run_install_script "$MC_URL" "$MC_TOKEN"
|
||||
|
||||
# 4) Startskript + Autostart bauen
|
||||
download_install_script "$M_PARSED_INSTALL_URL"
|
||||
run_install_script "$M_PARSED_MC_URL" "$M_PARSED_TOKEN"
|
||||
write_start_script
|
||||
enable_autostart
|
||||
|
||||
# 5) Starten & Abschluss
|
||||
start_now
|
||||
|
||||
say ""
|
||||
say "Fertig! Der MeshAgent läuft nun und startet künftig automatisch über ${CUSTOM_SH}."
|
||||
say "Fertig! Der MeshAgent startet künftig automatisch (custom.sh)."
|
||||
say "Log-Datei: ${MESH_LOG}"
|
||||
say ""
|
||||
say "Tipps:"
|
||||
say "- Zum sofortigen Neustart des Agents: /userdata/system/meshagent/start.sh"
|
||||
say "- Log live ansehen: tail -f ${MESH_LOG}"
|
||||
say "- Autostart entfernen: sed -i '/meshagent\\/start\\.sh/d' ${CUSTOM_SH} && killall meshagent"
|
||||
|
||||
Reference in New Issue
Block a user