From 32b8c8ef3e56acf312b546d405b3a64d20526a56 Mon Sep 17 00:00:00 2001 From: zarazaex69 Date: Sun, 17 May 2026 20:56:07 +0300 Subject: [PATCH] feat(script): add cnc mode and Go build caching --- script/cnc.sh | 71 ++++++++++++++++++++--------- script/docker/olcrtc-entrypoint.sh | 39 +++++++++++++--- script/docker/olcrtc-healthcheck.sh | 6 +-- script/srv.sh | 58 +++++++++++++---------- 4 files changed, 116 insertions(+), 58 deletions(-) diff --git a/script/cnc.sh b/script/cnc.sh index 9d9eed4..8eacc64 100755 --- a/script/cnc.sh +++ b/script/cnc.sh @@ -7,13 +7,14 @@ set -e PODMAN_ID=$(tr -dc 'a-z0-9' /dev/null || true + if ! rm -rf "$GOMOD_CACHE" "$GO_BUILD_CACHE" 2>/dev/null; then + echo "[*] Falling back to in-container purge (files owned by container UID)..." + podman run --rm \ + -v "$CACHE_DIR":/cache:Z \ + "$IMAGE_NAME" \ + sh -c 'rm -rf /cache/gomod /cache/gobuild' + fi +fi + +mkdir -p "$GOMOD_CACHE" "$GO_BUILD_CACHE" +echo "[*] Using Go cache: $CACHE_DIR" echo "[*] Cloning repository..." -git clone --depth 1 --recurse-submodules --branch "$BRANCH" $REPO_URL $WORK_DIR +git clone --depth 1 --recurse-submodules --branch "$BRANCH" "$REPO_URL" "$WORK_DIR" echo "[*] Pulling Go image..." -podman pull $IMAGE_NAME +podman pull "$IMAGE_NAME" echo "[*] Building OlcRTC..." podman run --rm \ --add-host=host.containers.internal:host-gateway \ - -v $WORK_DIR:/app:Z \ + -v "$WORK_DIR":/app:Z \ + -v "$GOMOD_CACHE":/go/pkg/mod:Z \ + -v "$GO_BUILD_CACHE":/root/.cache/go-build:Z \ -w /app \ - $IMAGE_NAME \ - sh -c "go mod tidy && go build -o olcrtc cmd/olcrtc/main.go" + "$IMAGE_NAME" \ + sh -c "go mod download && go build -trimpath -ldflags='-s -w' -o olcrtc ./cmd/olcrtc" if [ ! -f "$WORK_DIR/olcrtc" ]; then echo "[X] Build failed" @@ -271,7 +297,6 @@ fi CONFIG_FILE="$WORK_DIR/client.yaml" cat > "$CONFIG_FILE" <&2 gen_config="/tmp/olcrtc-gen.yaml" cat > "$gen_config" < "$key_file" echo "olcrtc-entrypoint: generated encryption key and saved it to $key_file" >&2 echo "olcrtc-entrypoint: OLCRTC_KEY=$key" >&2 + else + die "set OLCRTC_KEY or mount OLCRTC_KEY_FILE with the server encryption key" fi fi @@ -106,10 +116,9 @@ esac [ "${#key}" -eq 64 ] || die "OLCRTC_KEY must be 64 hex characters" # Generate YAML config -config="/tmp/olcrtc-server.yaml" +config="/tmp/olcrtc-${mode}.yaml" cat > "$config" <> "$config" <> "$config" <> "$config" <> "$config" <> "$config" + exec /usr/local/bin/olcrtc "$config" diff --git a/script/docker/olcrtc-healthcheck.sh b/script/docker/olcrtc-healthcheck.sh index e21e47e..1031cb7 100644 --- a/script/docker/olcrtc-healthcheck.sh +++ b/script/docker/olcrtc-healthcheck.sh @@ -1,8 +1,4 @@ #!/bin/sh set -eu -exe="$(readlink /proc/1/exe 2>/dev/null || true)" -case "$exe" in - */olcrtc) exit 0 ;; - *) exit 1 ;; -esac +pidof olcrtc >/dev/null 2>&1 diff --git a/script/srv.sh b/script/srv.sh index bc15f7b..3a0ec1e 100755 --- a/script/srv.sh +++ b/script/srv.sh @@ -6,7 +6,7 @@ set -e PODMAN_ID=$(tr -dc 'a-z0-9' /dev/null; then if [ "$(id -u)" -eq 0 ]; then SUDO="" - else + elif command -v sudo &> /dev/null; then SUDO="sudo" + elif command -v doas &> /dev/null; then + SUDO="doas" + else + echo "[X] No sudo/doas found and not running as root. Cannot install podman." + exit 1 fi if command -v apt &> /dev/null; then @@ -164,7 +169,7 @@ VIDEO_W=1920; VIDEO_H=1080; VIDEO_FPS=30; VIDEO_BITRATE="2M"; VIDEO_HW="none" VIDEO_CODEC="qrcode"; VIDEO_QR_SIZE=0; VIDEO_QR_RECOVERY="low" VIDEO_TILE_MODULE=4; VIDEO_TILE_RS=20 VP8_FPS=25; VP8_BATCH=1 -SEI_FPS=20; SEI_BATCH=1; SEI_FRAG=900; SEI_ACK=3000 +SEI_FPS=60; SEI_BATCH=64; SEI_FRAG=900; SEI_ACK=2000 if [ "$TRANSPORT" = "videochannel" ]; then echo "" @@ -231,23 +236,23 @@ if [ "$TRANSPORT" = "seichannel" ]; then echo "" echo "--- SEIchannel settings ---" - read -p "SEI FPS [default: 20]: " SEIFPS_INPUT - SEI_FPS=${SEIFPS_INPUT:-20} + read -p "SEI FPS [default: 60]: " SEIFPS_INPUT + SEI_FPS=${SEIFPS_INPUT:-60} - read -p "SEI batch size (frames per tick) [default: 1]: " SEIBATCH_INPUT - SEI_BATCH=${SEIBATCH_INPUT:-1} + read -p "SEI batch size (frames per tick) [default: 64]: " SEIBATCH_INPUT + SEI_BATCH=${SEIBATCH_INPUT:-64} read -p "SEI fragment size in bytes [default: 900]: " SEIFRAG_INPUT SEI_FRAG=${SEIFRAG_INPUT:-900} - read -p "SEI ACK timeout in milliseconds [default: 3000]: " SEIACK_INPUT - SEI_ACK=${SEIACK_INPUT:-3000} + read -p "SEI ACK timeout in milliseconds [default: 2000]: " SEIACK_INPUT + SEI_ACK=${SEIACK_INPUT:-2000} fi echo "" echo "[*] Cleaning workspace..." -rm -rf $WORK_DIR -mkdir -p $WORK_DIR +rm -rf "$WORK_DIR" +mkdir -p "$WORK_DIR" CACHE_DIR="${OLCRTC_CACHE_DIR:-$HOME/.cache/olcrtc}" GOMOD_CACHE="$CACHE_DIR/gomod" @@ -269,20 +274,20 @@ mkdir -p "$GOMOD_CACHE" "$GO_BUILD_CACHE" echo "[*] Using Go cache: $CACHE_DIR" echo "[*] Cloning repository..." -git clone --depth 1 --recurse-submodules --branch "$BRANCH" $REPO_URL $WORK_DIR +git clone --depth 1 --recurse-submodules --branch "$BRANCH" "$REPO_URL" "$WORK_DIR" echo "[*] Pulling Go image..." -podman pull $IMAGE_NAME +podman pull "$IMAGE_NAME" echo "[*] Building OlcRTC..." podman run --rm \ --network host \ - -v $WORK_DIR:/app:Z \ - -v $GOMOD_CACHE:/go/pkg/mod:Z \ - -v $GO_BUILD_CACHE:/root/.cache/go-build:Z \ + -v "$WORK_DIR":/app:Z \ + -v "$GOMOD_CACHE":/go/pkg/mod:Z \ + -v "$GO_BUILD_CACHE":/root/.cache/go-build:Z \ -w /app \ - $IMAGE_NAME \ - sh -c "go mod tidy && go build -o olcrtc cmd/olcrtc/main.go" + "$IMAGE_NAME" \ + sh -c "go mod download && go build -trimpath -ldflags='-s -w' -o olcrtc ./cmd/olcrtc" if [ ! -f "$WORK_DIR/olcrtc" ]; then echo "[X] Build failed" @@ -304,9 +309,9 @@ data: data GENEOF ROOM_ID=$(podman run --rm \ --network host \ - -v $WORK_DIR:/app:Z \ + -v "$WORK_DIR":/app:Z \ -w /app \ - $IMAGE_NAME \ + "$IMAGE_NAME" \ ./olcrtc gen.yaml) if [ -z "$ROOM_ID" ]; then echo "[X] Room generation failed" @@ -337,7 +342,6 @@ fi CONFIG_FILE="$WORK_DIR/server.yaml" cat > "$CONFIG_FILE" <