99 lines
2.9 KiB
Bash
Executable File
99 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Generate a self-signed cert for local MOQ dev, symlink it into both the
|
|
# relay repo and this pipecat repo, and print the commands to run everything.
|
|
#
|
|
# Usage:
|
|
# ./scripts/moq-dev-setup.sh /path/to/moq-relay
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
RELAY_DIR="${1:?Usage: $0 /path/to/moq-relay}"
|
|
PIPECAT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
|
# Resolve relay dir to absolute path
|
|
RELAY_DIR="$(cd "$RELAY_DIR" && pwd)"
|
|
|
|
CERT_DIR="$PIPECAT_DIR/.moq-certs"
|
|
CERT_FILE="$CERT_DIR/moq-cert.pem"
|
|
KEY_FILE="$CERT_DIR/moq-key.pem"
|
|
|
|
echo "==> Relay dir: $RELAY_DIR"
|
|
echo "==> Pipecat dir: $PIPECAT_DIR"
|
|
echo "==> Cert dir: $CERT_DIR"
|
|
echo
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 1. Generate cert + key
|
|
# ---------------------------------------------------------------------------
|
|
mkdir -p "$CERT_DIR"
|
|
|
|
echo "==> Generating self-signed cert (valid 14 days — MOQ max)..."
|
|
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \
|
|
-keyout "$KEY_FILE" \
|
|
-out "$CERT_FILE" \
|
|
-days 14 \
|
|
-nodes \
|
|
-subj "/CN=localhost" \
|
|
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1" \
|
|
2>/dev/null
|
|
|
|
echo " $CERT_FILE"
|
|
echo " $KEY_FILE"
|
|
echo
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 2. Compute SHA-256 fingerprint (used by WebTransport cert pinning)
|
|
# ---------------------------------------------------------------------------
|
|
FINGERPRINT=$(openssl x509 -in "$CERT_FILE" -outform der \
|
|
| openssl dgst -sha256 -binary \
|
|
| base64)
|
|
|
|
echo "==> Certificate SHA-256 fingerprint:"
|
|
echo " $FINGERPRINT"
|
|
echo
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 3. Symlink into relay dir and pipecat dir
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Symlinking certs..."
|
|
|
|
for DIR in "$RELAY_DIR" "$PIPECAT_DIR"; do
|
|
for FILE in "$CERT_FILE" "$KEY_FILE"; do
|
|
BASENAME="$(basename "$FILE")"
|
|
TARGET="$DIR/$BASENAME"
|
|
rm -f "$TARGET"
|
|
ln -s "$FILE" "$TARGET"
|
|
echo " $TARGET -> $FILE"
|
|
done
|
|
done
|
|
echo
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 4. Print run commands
|
|
# ---------------------------------------------------------------------------
|
|
echo "==========================================="
|
|
echo " Run these in separate terminals:"
|
|
echo "==========================================="
|
|
echo
|
|
echo "# 1. Start the relay (binds QUIC/WebTransport on UDP [::]:4080)"
|
|
echo "cd $RELAY_DIR"
|
|
echo "cargo run --bin moq-relay -- \\"
|
|
echo " --server-bind '[::]:4080' \\"
|
|
echo " --tls-cert moq-cert.pem \\"
|
|
echo " --tls-key moq-key.pem \\"
|
|
echo " --auth-public ''"
|
|
echo
|
|
echo "# 2. Start the bot"
|
|
echo "cd $PIPECAT_DIR"
|
|
echo "uv run python examples/transports/transports-moq.py \\"
|
|
echo " -t moq \\"
|
|
echo " --moq-cert moq-cert.pem \\"
|
|
echo " --moq-insecure \\"
|
|
echo " --moq-path /"
|
|
echo
|
|
echo "# 3. Open browser"
|
|
echo "open http://localhost:7860"
|
|
echo
|