From e62142b95d00f35d805b118cf7b2072c2c6d92df Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Tue, 28 Apr 2026 02:29:32 -0300 Subject: [PATCH] fix(sync): persist server bind address --- Cargo.lock | 6 +++--- client/Cargo.toml | 2 +- common/Cargo.toml | 2 +- docs/operational-env.md | 1 + scripts/install/server.sh | 8 +++++++- server/Cargo.toml | 2 +- testing/tests/server_install_script_contract.rs | 10 ++++++++++ 7 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10720b6..3fe9631 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1642,7 +1642,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "lesavka_client" -version = "0.14.37" +version = "0.14.38" dependencies = [ "anyhow", "async-stream", @@ -1676,7 +1676,7 @@ dependencies = [ [[package]] name = "lesavka_common" -version = "0.14.37" +version = "0.14.38" dependencies = [ "anyhow", "base64", @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "lesavka_server" -version = "0.14.37" +version = "0.14.38" dependencies = [ "anyhow", "base64", diff --git a/client/Cargo.toml b/client/Cargo.toml index ec8934a..1452c38 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -4,7 +4,7 @@ path = "src/main.rs" [package] name = "lesavka_client" -version = "0.14.37" +version = "0.14.38" edition = "2024" [dependencies] diff --git a/common/Cargo.toml b/common/Cargo.toml index f6e9a00..4f12dc3 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lesavka_common" -version = "0.14.37" +version = "0.14.38" edition = "2024" build = "build.rs" diff --git a/docs/operational-env.md b/docs/operational-env.md index 4300f6c..ef32399 100644 --- a/docs/operational-env.md +++ b/docs/operational-env.md @@ -173,6 +173,7 @@ Hardware-facing assumptions belong near the code that uses them; this file is th | `LESAVKA_RGBA` | document near use before promoting to operator config | | `LESAVKA_SERVER_ADDR` | runtime/install/session override | | `LESAVKA_SERVER_BIND_ADDR` | server bind address override; defaults to `0.0.0.0:50051` | +| `LESAVKA_INSTALL_SERVER_BIND_ADDR` | installer override; sets the persisted default server bind address in `/etc/lesavka/server.env` | | `LESAVKA_SERVER_GADGET_SRC` | test/build contract variable; not runtime operator config | | `LESAVKA_SERVER_HOST` | manual probe override | | `LESAVKA_SERVER_MAIN_SRC` | test/build contract variable; not runtime operator config | diff --git a/scripts/install/server.sh b/scripts/install/server.sh index 0d53449..9f816cf 100755 --- a/scripts/install/server.sh +++ b/scripts/install/server.sh @@ -11,6 +11,7 @@ REF=${LESAVKA_REF:-master} # fallback REPO_URL=${LESAVKA_REPO_URL:-} USER_HOME=$(getent passwd "$ORIG_USER" | cut -d: -f6) INSTALL_UVC_CODEC=${LESAVKA_INSTALL_UVC_CODEC:-mjpeg} +INSTALL_SERVER_BIND_ADDR=${LESAVKA_INSTALL_SERVER_BIND_ADDR:-0.0.0.0:50051} manifest_package_version() { local manifest=$1 @@ -114,7 +115,7 @@ is_attached_state() { } server_bind_addr() { - printf '%s\n' "${LESAVKA_SERVER_BIND_ADDR:-0.0.0.0:50051}" + printf '%s\n' "${INSTALL_SERVER_BIND_ADDR}" } server_bind_port() { @@ -790,6 +791,7 @@ fi printf 'LESAVKA_UPSTREAM_VIDEO_PLAYOUT_OFFSET_US=%s\n' "${LESAVKA_UPSTREAM_VIDEO_PLAYOUT_OFFSET_US:-0}" printf 'LESAVKA_UPSTREAM_PAIR_SLACK_US=%s\n' "${LESAVKA_UPSTREAM_PAIR_SLACK_US:-20000}" printf 'LESAVKA_UPSTREAM_STALE_DROP_MS=%s\n' "${LESAVKA_UPSTREAM_STALE_DROP_MS:-80}" + printf 'LESAVKA_SERVER_BIND_ADDR=%s\n' "${INSTALL_SERVER_BIND_ADDR}" printf 'LESAVKA_UVC_CODEC=%s\n' "${INSTALL_UVC_CODEC}" } | sudo tee /etc/lesavka/server.env >/dev/null @@ -946,11 +948,15 @@ validate_server_ready INSTALLED_VERSION=$(manifest_package_version "$SRC_DIR/server/Cargo.toml" 2>/dev/null || true) INSTALLED_SHA=$(git -C "$SCRIPT_REPO_ROOT" rev-parse --short HEAD 2>/dev/null || true) PERSISTED_CAM_OUTPUT=$(grep '^LESAVKA_CAM_OUTPUT=' /etc/lesavka/server.env 2>/dev/null | tail -n1 | cut -d= -f2- || true) +PERSISTED_SERVER_BIND_ADDR=$(grep '^LESAVKA_SERVER_BIND_ADDR=' /etc/lesavka/server.env 2>/dev/null | tail -n1 | cut -d= -f2- || true) PERSISTED_UVC_CODEC=$(grep '^LESAVKA_UVC_CODEC=' /etc/lesavka/uvc.env 2>/dev/null | tail -n1 | cut -d= -f2- || true) echo "✅ lesavka-server installed and restarted..." if [[ -n $INSTALLED_VERSION || -n $INSTALLED_SHA ]]; then echo "➡️ Installed: lesavka-server ${INSTALLED_VERSION:-unknown}${INSTALLED_SHA:+ ($INSTALLED_SHA)}" fi +if [[ -n $PERSISTED_SERVER_BIND_ADDR ]]; then + echo "➡️ Server bind: ${PERSISTED_SERVER_BIND_ADDR}" +fi if [[ -n $PERSISTED_CAM_OUTPUT ]]; then echo "➡️ Camera output: ${PERSISTED_CAM_OUTPUT}" fi diff --git a/server/Cargo.toml b/server/Cargo.toml index 89aa04c..f88250f 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -10,7 +10,7 @@ bench = false [package] name = "lesavka_server" -version = "0.14.37" +version = "0.14.38" edition = "2024" autobins = false diff --git a/testing/tests/server_install_script_contract.rs b/testing/tests/server_install_script_contract.rs index 6210520..20bb978 100644 --- a/testing/tests/server_install_script_contract.rs +++ b/testing/tests/server_install_script_contract.rs @@ -23,6 +23,7 @@ fn server_install_pins_hdmi_camera_and_display_defaults() { "LESAVKA_UPSTREAM_VIDEO_PLAYOUT_OFFSET_US=%s", "LESAVKA_UPSTREAM_PAIR_SLACK_US=%s", "LESAVKA_UPSTREAM_STALE_DROP_MS=%s", + "LESAVKA_SERVER_BIND_ADDR=%s", "/etc/lesavka/uvc.env", "LESAVKA_UVC_MAXPACKET=", "LESAVKA_UVC_INTERVAL=", @@ -46,6 +47,7 @@ fn server_install_pins_hdmi_camera_and_display_defaults() { assert!(SERVER_INSTALL.contains("${LESAVKA_UPSTREAM_PLAYOUT_DELAY_MS:-1000}")); assert!(SERVER_INSTALL.contains("${LESAVKA_UPSTREAM_PAIR_SLACK_US:-20000}")); assert!(SERVER_INSTALL.contains("${LESAVKA_UPSTREAM_STALE_DROP_MS:-80}")); + assert!(SERVER_INSTALL.contains("${LESAVKA_INSTALL_SERVER_BIND_ADDR:-0.0.0.0:50051}")); assert!(SERVER_INSTALL.contains("${LESAVKA_UVC_MAXPACKET:-1024}")); assert!(SERVER_INSTALL.contains("${LESAVKA_UVC_INTERVAL:-500000}")); assert!(SERVER_INSTALL.contains("${LESAVKA_UVC_WIDTH:-640}")); @@ -54,6 +56,10 @@ fn server_install_pins_hdmi_camera_and_display_defaults() { !SERVER_INSTALL.contains("LESAVKA_UVC_CODEC=${LESAVKA_UVC_CODEC:-mjpeg}"), "install script should not let ambient LESAVKA_UVC_CODEC leak into persisted defaults" ); + assert!( + !SERVER_INSTALL.contains("LESAVKA_SERVER_BIND_ADDR=${LESAVKA_SERVER_BIND_ADDR:-0.0.0.0:50051}"), + "install script should not let ambient LESAVKA_SERVER_BIND_ADDR leak into persisted defaults" + ); assert!( SERVER_INSTALL.contains("EnvironmentFile=-/etc/lesavka/uvc.env"), "install script should feed live UVC runtime settings into services" @@ -182,6 +188,10 @@ fn server_install_reports_installed_version_and_revision() { SERVER_INSTALL.contains("Camera output:"), "install script should print the persisted camera output in the footer" ); + assert!( + SERVER_INSTALL.contains("Server bind:"), + "install script should print the persisted server bind address in the footer" + ); assert!( SERVER_INSTALL.contains("UVC codec:"), "install script should print the persisted UVC codec in the footer"