- bin/facts/crm: prove person<->company/company<->project against ooCRM x corpus SoT (knowledge-mesh-seed.yaml), write 78 facts (root=facts) - tools/crmfacts.py + test_crm_facts.py: parser under unit tests (26 pass) - docs/crm-associations-proof.md: provable graph, mistakes, fixes - oo merge 759->763 resolves duplicate GoldenRatio.Exchange legal entity - bin/db/ssh-tunnel: "$0" self-check + accept-new/BatchMode ssh flags - AGENTS.md: document bin/facts/crm
52 lines
1.7 KiB
Bash
Executable File
52 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# db/ssh-tunnel - open 127.0.0.1:5433 -> onlyoffice VM Postgres (host port 32).
|
|
#
|
|
# db/ssh-tunnel # background tunnel, ready for db/psql-yq
|
|
# db/ssh-tunnel --check # exit 0 if a tunnel is already up
|
|
# db/ssh-tunnel --stop # kill any tunnel owned by this tool
|
|
#
|
|
# OnlyOffice runs as a QEMU VM (docker network office_default), SSH on host
|
|
# port 32. Its Postgres listens on 127.0.0.1:5432 inside the VM and is not
|
|
# exposed. This forwards localhost:5433 to it so db/psql-yq can query with
|
|
# the onlyoffice profile. Credentials are never part of the tunnel.
|
|
set -euo pipefail
|
|
|
|
SRC="${BRAIN_TUNNEL_LOCAL:-127.0.0.1:5433}"
|
|
DST="${BRAIN_TUNNEL_REMOTE:-127.0.0.1:5432}"
|
|
SSH_PORT="${BRAIN_TUNNEL_SSH_PORT:-32}"
|
|
SSH_USER="${BRAIN_TUNNEL_SSH_USER:-root}"
|
|
SSH_HOST="${BRAIN_TUNNEL_SSH_HOST:-127.0.0.1}"
|
|
MARKER="2dph-ssh-tunnel"
|
|
|
|
case "${1:-}" in
|
|
--check)
|
|
ss -tln 2>/dev/null | grep -q "${SRC%:*}:${SRC#*:}" && exit 0
|
|
pgrep -f "${MARKER}" >/dev/null && exit 0
|
|
exit 1
|
|
;;
|
|
--stop)
|
|
pkill -f "${MARKER}" && echo "tunnel stopped" || echo "no tunnel running"
|
|
exit 0
|
|
;;
|
|
-h|--help)
|
|
sed -n '2,9p' "$0" | sed 's/^# \{0,1\}//'
|
|
exit 0
|
|
;;
|
|
"")
|
|
[ -f "$HOME/.ssh/config" ] || { echo "db/ssh-tunnel: ~/.ssh/config missing" >&2; exit 1; }
|
|
if "$0" --check; then
|
|
echo "tunnel already up on ${SRC}"
|
|
exit 0
|
|
fi
|
|
ssh -f -N -M -S "$HOME/.ssh/2dph-tunnel.sock" \
|
|
-o StrictHostKeyChecking=accept-new \
|
|
-o BatchMode=yes \
|
|
-L "${SRC}:${DST}" -p "$SSH_PORT" "${SSH_USER}@${SSH_HOST}" \
|
|
&& echo "tunnel up on ${SRC} (-> vm:${DST})"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "unknown arg: $1" >&2
|
|
exit 1
|
|
;;
|
|
esac |