124 lines
3.8 KiB
Bash
Executable File
124 lines
3.8 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Build OPNsense RMM Agent Plugin Package
|
|
#
|
|
# Usage: ./build.sh [version]
|
|
# Example: ./build.sh 1.0.0
|
|
#
|
|
# Prerequisites:
|
|
# - Go 1.24+ (for cross-compilation)
|
|
# - FreeBSD pkg tools (runs on the target OPNsense, or use pkg-create on FreeBSD)
|
|
#
|
|
# This script:
|
|
# 1. Cross-compiles the agent binary (freebsd/amd64)
|
|
# 2. Assembles the staging directory
|
|
# 3. Creates a +MANIFEST for pkg
|
|
# 4. Outputs a .tar that can be installed with `pkg add`
|
|
|
|
set -e
|
|
|
|
VERSION="${1:-1.0.0}"
|
|
NAME="os-rmm-agent"
|
|
STAGEDIR="$(pwd)/stage"
|
|
BUILDDIR="$(pwd)/../build"
|
|
PKGFILE="$(pwd)/${NAME}-${VERSION}.pkg"
|
|
|
|
echo "==> Building RMM Agent Plugin v${VERSION}"
|
|
|
|
# 1. Build agent binary
|
|
echo "==> Compiling agent (freebsd/amd64)..."
|
|
cd ../agent
|
|
GOOS=freebsd GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o "${BUILDDIR}/rmm-agent" .
|
|
cd ../opnsense-plugin
|
|
echo " Binary: ${BUILDDIR}/rmm-agent ($(ls -lh ${BUILDDIR}/rmm-agent | awk '{print $5}'))"
|
|
|
|
# 2. Assemble staging directory
|
|
echo "==> Assembling staging directory..."
|
|
rm -rf "${STAGEDIR}"
|
|
mkdir -p "${STAGEDIR}/usr/local"
|
|
|
|
# Plugin files
|
|
cp -R src/etc "${STAGEDIR}/usr/local/"
|
|
cp -R src/opnsense "${STAGEDIR}/usr/local/"
|
|
cp -R src/usr/local/etc "${STAGEDIR}/usr/local/"
|
|
mkdir -p "${STAGEDIR}/usr/local/rmm"
|
|
cp "${BUILDDIR}/rmm-agent" "${STAGEDIR}/usr/local/rmm/rmm-agent"
|
|
|
|
# Set permissions
|
|
chmod +x "${STAGEDIR}/usr/local/rmm/rmm-agent"
|
|
chmod +x "${STAGEDIR}/usr/local/etc/rc.d/rmm_agent"
|
|
chmod +x "${STAGEDIR}/usr/local/opnsense/scripts/rmmagent/setup.sh"
|
|
chmod +x "${STAGEDIR}/usr/local/opnsense/scripts/OPNsense/RMMAgent/generate_config.php"
|
|
|
|
# 3. Create +COMPACT_MANIFEST and +MANIFEST (UCL format)
|
|
echo "==> Creating package manifest..."
|
|
cat > "${STAGEDIR}/+COMPACT_MANIFEST" << EOF
|
|
{
|
|
"name": "${NAME}",
|
|
"version": "${VERSION}",
|
|
"origin": "sysutils/${NAME}",
|
|
"comment": "RMM Agent for OPNsense",
|
|
"maintainer": "cm@cynfo.com",
|
|
"www": "https://git.cynfo.net/christian/rmm",
|
|
"abi": "FreeBSD:14:amd64",
|
|
"arch": "freebsd:14:x86:64",
|
|
"prefix": "/usr/local",
|
|
"desc": "RMM Agent for OPNsense - Remote Monitoring and Management. Configurable via WebGUI under Services > RMM Agent.",
|
|
"categories": ["sysutils"]
|
|
}
|
|
EOF
|
|
|
|
# +MANIFEST = +COMPACT_MANIFEST plus files/scripts
|
|
cp "${STAGEDIR}/+COMPACT_MANIFEST" "${STAGEDIR}/+MANIFEST"
|
|
|
|
# Post-install script
|
|
cat > "${STAGEDIR}/+POST_INSTALL" << 'SCRIPT'
|
|
#!/bin/sh
|
|
/usr/local/etc/rc.d/opnsense-configd restart 2>/dev/null
|
|
echo ""
|
|
echo "====================================="
|
|
echo " RMM Agent Plugin installed."
|
|
echo " Configure: Services > RMM Agent"
|
|
echo "====================================="
|
|
SCRIPT
|
|
|
|
# Pre-deinstall script
|
|
cat > "${STAGEDIR}/+PRE_DEINSTALL" << 'SCRIPT'
|
|
#!/bin/sh
|
|
/usr/local/etc/rc.d/rmm_agent stop 2>/dev/null || true
|
|
/usr/sbin/sysrc -x rmm_agent_enable 2>/dev/null || true
|
|
SCRIPT
|
|
|
|
# Post-deinstall script
|
|
cat > "${STAGEDIR}/+POST_DEINSTALL" << 'SCRIPT'
|
|
#!/bin/sh
|
|
/usr/local/etc/rc.d/opnsense-configd restart 2>/dev/null
|
|
echo "RMM Agent Plugin removed."
|
|
SCRIPT
|
|
|
|
chmod +x "${STAGEDIR}/+POST_INSTALL" "${STAGEDIR}/+PRE_DEINSTALL" "${STAGEDIR}/+POST_DEINSTALL"
|
|
|
|
# 4. Create package using tar (FreeBSD txz pkg format)
|
|
echo "==> Creating package..."
|
|
cd "${STAGEDIR}"
|
|
|
|
# pkg expects: +COMPACT_MANIFEST, +MANIFEST at root, files under usr/
|
|
tar -cJf "${PKGFILE}" +COMPACT_MANIFEST +MANIFEST +POST_INSTALL +PRE_DEINSTALL +POST_DEINSTALL $(find usr -type f | sort)
|
|
|
|
cd ..
|
|
rm -rf "${STAGEDIR}"
|
|
|
|
echo ""
|
|
echo "==> Package erstellt: ${PKGFILE}"
|
|
echo " Version: ${VERSION}"
|
|
echo " Groesse: $(ls -lh ${PKGFILE} | awk '{print $5}')"
|
|
echo ""
|
|
echo "==> Installation auf OPNsense:"
|
|
echo " scp ${PKGFILE} root@opnsense:/tmp/"
|
|
echo " ssh root@opnsense 'pkg add /tmp/${NAME}-${VERSION}.pkg'"
|
|
echo ""
|
|
echo "==> Danach:"
|
|
echo " - WebGUI oeffnen → Services → RMM Agent"
|
|
echo " - Backend URL und API Key eintragen"
|
|
echo " - Aktiviert ankreuzen → Speichern"
|