diff --git a/Cargo.lock b/Cargo.lock index ef99775..c679bb0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1642,7 +1642,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "lesavka_client" -version = "0.14.26" +version = "0.14.27" dependencies = [ "anyhow", "async-stream", @@ -1676,7 +1676,7 @@ dependencies = [ [[package]] name = "lesavka_common" -version = "0.14.26" +version = "0.14.27" dependencies = [ "anyhow", "base64", @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "lesavka_server" -version = "0.14.26" +version = "0.14.27" dependencies = [ "anyhow", "base64", diff --git a/client/Cargo.toml b/client/Cargo.toml index d24dc95..d02a844 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -4,7 +4,7 @@ path = "src/main.rs" [package] name = "lesavka_client" -version = "0.14.26" +version = "0.14.27" edition = "2024" [dependencies] diff --git a/common/Cargo.toml b/common/Cargo.toml index 4e7b22c..6357b19 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lesavka_common" -version = "0.14.26" +version = "0.14.27" edition = "2024" build = "build.rs" diff --git a/docs/operational-env.md b/docs/operational-env.md index fce9896..4300f6c 100644 --- a/docs/operational-env.md +++ b/docs/operational-env.md @@ -221,6 +221,7 @@ Hardware-facing assumptions belong near the code that uses them; this file is th | `LESAVKA_UPSTREAM_VIDEO_PLAYOUT_OFFSET_US` | server upstream playout override; shifts webcam-video presentation relative to the shared playout epoch | | `LESAVKA_UPLINK_CAMERA_PREVIEW` | client media capture/playback override | | `LESAVKA_UPLINK_MIC_LEVEL` | client media capture/playback override | +| `LESAVKA_INSTALL_UVC_CODEC` | installer override; sets the persisted default UVC webcam codec in `/etc/lesavka/server.env` and `/etc/lesavka/uvc.env` | | `LESAVKA_USB_RECOVERY_` | USB recovery timing override | | `LESAVKA_USB_RECOVERY_CYCLE_WAIT_MS` | USB recovery timing override | | `LESAVKA_USB_RECOVERY_FINAL_WAIT_MS` | USB recovery timing override | diff --git a/scripts/install/server.sh b/scripts/install/server.sh index 244e1e3..da5e028 100755 --- a/scripts/install/server.sh +++ b/scripts/install/server.sh @@ -10,6 +10,7 @@ export TMPDIR=${TMPDIR:-/var/tmp} 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} manifest_package_version() { local manifest=$1 @@ -32,7 +33,7 @@ LESAVKA_UVC_FPS=${LESAVKA_UVC_FPS:-20} LESAVKA_UVC_INTERVAL=${LESAVKA_UVC_INTERVAL:-500000} LESAVKA_UVC_WIDTH=${LESAVKA_UVC_WIDTH:-640} LESAVKA_UVC_HEIGHT=${LESAVKA_UVC_HEIGHT:-480} -LESAVKA_UVC_CODEC=${LESAVKA_UVC_CODEC:-mjpeg} +LESAVKA_UVC_CODEC=${INSTALL_UVC_CODEC} LESAVKA_UVC_BLOCKING=${LESAVKA_UVC_BLOCKING:-1} LESAVKA_UVC_MAXBURST=${LESAVKA_UVC_MAXBURST:-0} EOF @@ -567,7 +568,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_UVC_CODEC=%s\n' "${LESAVKA_UVC_CODEC:-mjpeg}" + printf 'LESAVKA_UVC_CODEC=%s\n' "${INSTALL_UVC_CODEC}" } | sudo tee /etc/lesavka/server.env >/dev/null UVC_ENV_TMP=$(mktemp) @@ -655,7 +656,7 @@ if [[ -n ${LESAVKA_ALLOW_GADGET_RESET:-} ]] || [[ "$FORCE_GADGET_REBUILD" == "1" LESAVKA_DETACH_CLEAR_UDC=1 \ LESAVKA_RELOAD_UVCVIDEO=1 \ LESAVKA_UVC_FALLBACK=0 \ - LESAVKA_UVC_CODEC="${LESAVKA_UVC_CODEC:-mjpeg}" \ + LESAVKA_UVC_CODEC="${INSTALL_UVC_CODEC}" \ /usr/local/bin/lesavka-core.sh sudo systemctl restart lesavka-core echo "✅ lesavka-core installed and restarted..." diff --git a/server/Cargo.toml b/server/Cargo.toml index ebae3fd..5cafee2 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -10,7 +10,7 @@ bench = false [package] name = "lesavka_server" -version = "0.14.26" +version = "0.14.27" edition = "2024" autobins = false diff --git a/testing/tests/server_install_script_contract.rs b/testing/tests/server_install_script_contract.rs index becba18..91f7466 100644 --- a/testing/tests/server_install_script_contract.rs +++ b/testing/tests/server_install_script_contract.rs @@ -39,6 +39,7 @@ fn server_install_pins_hdmi_camera_and_display_defaults() { assert!(SERVER_INSTALL.contains("${LESAVKA_CAM_HEIGHT:-1080}")); assert!(SERVER_INSTALL.contains("${LESAVKA_CAM_FPS:-30}")); assert!(SERVER_INSTALL.contains("${LESAVKA_INSTALL_CAM_OUTPUT:-uvc}")); + assert!(SERVER_INSTALL.contains("${LESAVKA_INSTALL_UVC_CODEC:-mjpeg}")); assert!(SERVER_INSTALL.contains("${LESAVKA_HDMI_WIDTH:-1920}")); assert!(SERVER_INSTALL.contains("${LESAVKA_HDMI_HEIGHT:-1080}")); assert!(SERVER_INSTALL.contains("${LESAVKA_HDMI_SINK:-fbdevsink}")); @@ -49,7 +50,10 @@ fn server_install_pins_hdmi_camera_and_display_defaults() { assert!(SERVER_INSTALL.contains("${LESAVKA_UVC_INTERVAL:-500000}")); assert!(SERVER_INSTALL.contains("${LESAVKA_UVC_WIDTH:-640}")); assert!(SERVER_INSTALL.contains("${LESAVKA_UVC_HEIGHT:-480}")); - assert!(SERVER_INSTALL.contains("${LESAVKA_UVC_CODEC:-mjpeg}")); + assert!( + !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("EnvironmentFile=-/etc/lesavka/uvc.env"), "install script should feed live UVC runtime settings into services"