- src/auth.ts: Config-Management (API-Key + Tool-Filter), timing-safe Auth - src/index.ts: Auth-Check auf /mcp, Tool-Filter in tools/list + tools/call, Config-Server auf 127.0.0.1:3003 (nur localhost) - scripts/mua.page: Einstellungs-UI (API-Key generieren + Tool-Checkboxen) - scripts/rc.mua: Config-Dir sicherstellen - Version: 2026.08.18.r002
118 lines
3.6 KiB
Bash
Executable File
118 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# MUA - Mikes Unraid Agent
|
|
# package.sh — Baut das Slackware .txz-Paket
|
|
#
|
|
# Struktur des .txz:
|
|
# install/doinst.sh
|
|
# install/slack-desc
|
|
# usr/local/bin/mua (kompiliertes Binary)
|
|
# etc/rc.d/rc.mua (SysVinit-Service)
|
|
# usr/local/emhttp/plugins/mua/mua.page (WebGUI-Tab)
|
|
#
|
|
# Cross-Platform: .txz ist ein gzip-tar, funktioniert auf macOS + Linux.
|
|
|
|
set -euo pipefail
|
|
|
|
VERSION="${1:-2026.08.18.r002}"
|
|
PKG_NAME="mua"
|
|
ARCH="x86_64"
|
|
BUILD_NUM="1"
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
BUILD_DIR="${ROOT}/build/pkg"
|
|
DIST_DIR="${ROOT}/dist"
|
|
|
|
echo "===================================================="
|
|
echo " MUA - Paket-Builder"
|
|
echo " Version: ${VERSION}"
|
|
echo "===================================================="
|
|
|
|
# 1. Binary bauen (falls nicht vorhanden)
|
|
if [ ! -f "${DIST_DIR}/mua" ]; then
|
|
echo " Kompiliere Binary..."
|
|
cd "${ROOT}"
|
|
bun build src/index.ts --compile --target=bun-linux-x64 --outfile "${DIST_DIR}/mua"
|
|
fi
|
|
chmod +x "${DIST_DIR}/mua"
|
|
echo " Binary: $(du -h "${DIST_DIR}/mua" | cut -f1)"
|
|
|
|
# 2. Paket-Struktur aufbauen
|
|
rm -rf "${BUILD_DIR}"
|
|
mkdir -p "${BUILD_DIR}/install"
|
|
mkdir -p "${BUILD_DIR}/usr/local/bin"
|
|
mkdir -p "${BUILD_DIR}/etc/rc.d"
|
|
mkdir -p "${BUILD_DIR}/usr/local/emhttp/plugins/mua"
|
|
|
|
# Binary
|
|
cp "${DIST_DIR}/mua" "${BUILD_DIR}/usr/local/bin/mua"
|
|
chmod 755 "${BUILD_DIR}/usr/local/bin/mua"
|
|
|
|
# SysVinit-Service
|
|
cp "${ROOT}/scripts/rc.mua" "${BUILD_DIR}/etc/rc.d/rc.mua"
|
|
chmod 755 "${BUILD_DIR}/etc/rc.d/rc.mua"
|
|
|
|
# WebGUI-Tab
|
|
cp "${ROOT}/scripts/mua.page" "${BUILD_DIR}/usr/local/emhttp/plugins/mua/mua.page"
|
|
chmod 644 "${BUILD_DIR}/usr/local/emhttp/plugins/mua/mua.page"
|
|
|
|
# PHP-Helper (Write-Operationen: create/modify/update/rebuild)
|
|
cp "${ROOT}/scripts/unraid-docker-mcp-helper.php" "${BUILD_DIR}/usr/local/bin/unraid-docker-mcp-helper.php"
|
|
chmod 755 "${BUILD_DIR}/usr/local/bin/unraid-docker-mcp-helper.php"
|
|
|
|
# 3. doinst.sh (läuft nach Installation)
|
|
cat > "${BUILD_DIR}/install/doinst.sh" << 'DOEOF'
|
|
#!/bin/bash
|
|
# MUA doinst.sh — läuft nach Installation des .txz-Pakets
|
|
|
|
# Verzeichnisse
|
|
mkdir -p /var/log/plugins
|
|
touch /var/log/plugins/mua.log
|
|
mkdir -p /boot/config/plugins/mua
|
|
|
|
# Service starten
|
|
/etc/rc.d/rc.mua start 2>/dev/null || true
|
|
|
|
# Health-Check
|
|
sleep 2
|
|
if curl -sf "http://127.0.0.1:3002/health" > /dev/null 2>&1; then
|
|
echo ""
|
|
echo " Health-Check: OK"
|
|
echo " Endpunkt: http://$(hostname -I | awk '{print $1}'):3002/mcp"
|
|
else
|
|
echo ""
|
|
echo " WARNUNG: Health-Check fehlgeschlagen"
|
|
echo " Logs: tail -f /var/log/plugins/mua.log"
|
|
fi
|
|
DOEOF
|
|
chmod 755 "${BUILD_DIR}/install/doinst.sh"
|
|
|
|
# 4. slack-desc (Paket-Beschreibung)
|
|
cat > "${BUILD_DIR}/install/slack-desc" << DESCEOF
|
|
|${PKG_NAME} (${PKG_NAME})
|
|
|
|
|
|${PKG_NAME} - Mikes Unraid Agent
|
|
|MCP over HTTP (Streamable HTTP) Server für Unraid.
|
|
|21 Tools: Docker (14), Netzwerk (6), System (1).
|
|
|Port: 3002, Endpunkt: /mcp
|
|
|
|
|
|Runtime: TypeScript (Bun Runtime, kompiliertes Binary)
|
|
|Service: /etc/rc.d/rc.mua (SysVinit)
|
|
|WebGUI: Settings > MUA
|
|
|
|
|
|Version: ${VERSION}
|
|
|Arch: ${ARCH}
|
|
|Build: ${BUILD_NUM}
|
|
DESCEOF
|
|
|
|
# 5. .txz erstellen (tar + xz — NICHT gzip, Unraid erwartet echtes xz)
|
|
mkdir -p "${DIST_DIR}"
|
|
TXZ_NAME="${PKG_NAME}-${VERSION}-${ARCH}-${BUILD_NUM}.txz"
|
|
echo " Erstelle ${TXZ_NAME}..."
|
|
( cd "${BUILD_DIR}" && tar cf - . | xz -9 -c > "${DIST_DIR}/${TXZ_NAME}" )
|
|
|
|
echo ""
|
|
echo "===================================================="
|
|
echo " Paket erstellt: dist/${TXZ_NAME}"
|
|
echo " Größe: $(du -h "${DIST_DIR}/${TXZ_NAME}" | cut -f1)"
|
|
echo " SHA256: $(shasum -a 256 "${DIST_DIR}/${TXZ_NAME}" | cut -d' ' -f1)"
|
|
echo "===================================================="
|