summaryrefslogtreecommitdiff
path: root/scripts/install-freebsd.sh
diff options
context:
space:
mode:
authorinfo@mode42.com <info@mode42.com>2026-08-07 18:25:13 +0000
committerinfo@mode42.com <info@mode42.com>2026-08-07 18:25:13 +0000
commit04d965d67a7264a1c7c211494aebda1953df7603 (patch)
tree0ebd700a6e219f84a26a656f4bee8778bc75da7b /scripts/install-freebsd.sh
Initial push
Diffstat (limited to 'scripts/install-freebsd.sh')
-rwxr-xr-xscripts/install-freebsd.sh115
1 files changed, 115 insertions, 0 deletions
diff --git a/scripts/install-freebsd.sh b/scripts/install-freebsd.sh
new file mode 100755
index 0000000..01ff533
--- /dev/null
+++ b/scripts/install-freebsd.sh
@@ -0,0 +1,115 @@
+#!/usr/bin/env bash
+# MAX25-Stack — FreeBSD full build + install (daemon, bcpr, terminal, CRDOP, web)
+set -euo pipefail
+
+ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+PREFIX="${PREFIX:-/usr/local}"
+ETC="${ETC:-${PREFIX}/etc/max25}"
+INSTALL_DEPS=0
+BUILD_ONLY=0
+BUILD_DIR="${BUILD_DIR:-build}"
+
+usage() {
+ cat <<EOF
+MAX25-Stack install — FreeBSD
+
+Usage: $0 [options]
+
+Options:
+ --deps Install pkg build/runtime dependencies
+ --build-only Build only, do not install
+ --prefix DIR Install prefix (default: /usr/local)
+ --build-dir D CMake build dir (default: build)
+ -h, --help This help
+
+Full build (default): max25d · max25-bcpr · max25-terminal · CRDOP/OSS · web proxy/UI scaffold
+
+After install:
+ sudo mkdir -p /var/run/max25 ${ETC}
+ sudo cp ${PREFIX}/share/max25/max25d.freebsd.bcpr.ini.example ${ETC}/max25d.ini
+ sudo cp ${PREFIX}/share/max25-bcpr/max25-bcpr.ini.example ${ETC}/max25-bcpr.ini
+ sudo max25-bcpr-ctl start --ini ${ETC}/max25-bcpr.ini
+ sudo ${ROOT}/scripts/run-max25d.sh ${ETC}/max25d.ini
+
+See docs/FREEBSD-AX25.md · docs/WEBSOCKET.md · docs/BAYCOM.md
+EOF
+}
+
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --deps) INSTALL_DEPS=1; shift ;;
+ --build-only) BUILD_ONLY=1; shift ;;
+ --prefix) PREFIX="$2"; shift 2 ;;
+ --build-dir) BUILD_DIR="$2"; shift 2 ;;
+ -h|--help) usage; exit 0 ;;
+ *) echo "Unknown option: $1" >&2; usage; exit 1 ;;
+ esac
+done
+
+if [[ "$(uname -s)" != "FreeBSD" ]]; then
+ echo "install-freebsd.sh: FreeBSD only" >&2
+ exit 1
+fi
+
+echo "== MAX25 install: $(uname -s) $(uname -m) → ${PREFIX} =="
+
+if [[ "$INSTALL_DEPS" -eq 1 ]]; then
+ pkgs=(cmake python3 ncurses sox git gmake pkgconf)
+ echo "Installing packages: ${pkgs[*]}"
+ pkg install -y "${pkgs[@]}"
+fi
+
+BUILD_DIR="${BUILD_DIR}" "${ROOT}/scripts/build-freebsd.sh"
+
+if [[ "$BUILD_ONLY" -eq 1 ]]; then
+ echo "== build done (no install) =="
+ exit 0
+fi
+
+echo "-- install to ${PREFIX}"
+if [[ "$(id -u)" -eq 0 ]]; then
+ cmake --install "${ROOT}/${BUILD_DIR}" --prefix "${PREFIX}"
+else
+ sudo cmake --install "${ROOT}/${BUILD_DIR}" --prefix "${PREFIX}"
+fi
+
+_install_ini() {
+ local src="$1" dst="$2"
+ if [[ ! -f "$dst" ]] && [[ -f "$src" ]]; then
+ mkdir -p "$(dirname "$dst")"
+ if [[ "$(id -u)" -eq 0 ]]; then
+ cp "$src" "$dst"
+ else
+ sudo cp "$src" "$dst"
+ fi
+ echo " installed $dst (from example)"
+ fi
+}
+
+if [[ "$(id -u)" -eq 0 ]] || sudo -n true 2>/dev/null; then
+ _install_ini "${ROOT}/share/max25-bcpr/max25-bcpr.freebsd.ini.example" "${ETC}/max25-bcpr.ini"
+ _install_ini "${ROOT}/share/max25/max25d.freebsd.bcpr.ini.example" "${ETC}/max25d.ini"
+ _install_ini "${ROOT}/stacks/web/share/web-proxy.ini.example" "${ETC}/web-proxy.ini"
+ _install_ini "${ROOT}/stacks/web/share/web-terminal.ini.example" "${ETC}/web-terminal.ini"
+fi
+
+echo ""
+echo "== MAX25 installed to ${PREFIX} =="
+echo " max25d, max25-terminal, max25-ws-proxy → ${PREFIX}/bin"
+echo " max25-bcpr-ctl, max25-bcprd-init → ${PREFIX}/sbin"
+echo " examples → ${PREFIX}/share/max25/ · web UI → ${PREFIX}/share/max25/reverse-proxy/"
+echo ""
+echo "Next steps (PC-COM / ExSys cuau2 — edit INI before live RF):"
+echo " pw groupmod dialer -m \$USER"
+echo " sudo mkdir -p /var/run/max25 ${ETC}"
+echo " sudo chown \$USER:dialer /var/run/max25"
+echo " # ${ETC}/max25-bcpr.ini: serial=/dev/cuau2 iobase=0xd090 irq=36"
+echo " # ${ETC}/max25d.ini: [daemon] user=… group=dialer"
+echo " sudo max25-bcpr-ctl start --ini ${ETC}/max25-bcpr.ini"
+echo " sudo ${ROOT}/scripts/run-max25d.sh ${ETC}/max25d.ini"
+echo " max25-terminal -H 127.0.0.1 -p 7325 -d max25e0"
+echo " MAX25_WEB_TERMINAL_INI=${ETC}/web-terminal.ini max25-ws-proxy -c ${ETC}/web-proxy.ini"
+echo ""
+echo "Optional: tmodem/c1224 → ${PREFIX}/share/max25/max25d.freebsd.tmodem.ini.example"
+echo "Optional: CRDOP/OSS → ${PREFIX}/share/crdop/crdop.freebsd.ini.example"
+echo ""
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com