install: require opt-in for live uvc helper refresh

This commit is contained in:
Brad Stein 2026-05-15 11:53:22 -03:00
parent 01c4d55926
commit f9058329bc
6 changed files with 15 additions and 14 deletions

6
Cargo.lock generated
View File

@ -1652,7 +1652,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "lesavka_client"
version = "0.22.41"
version = "0.22.42"
dependencies = [
"anyhow",
"async-stream",
@ -1686,7 +1686,7 @@ dependencies = [
[[package]]
name = "lesavka_common"
version = "0.22.41"
version = "0.22.42"
dependencies = [
"anyhow",
"base64",
@ -1698,7 +1698,7 @@ dependencies = [
[[package]]
name = "lesavka_server"
version = "0.22.41"
version = "0.22.42"
dependencies = [
"anyhow",
"base64",

View File

@ -4,7 +4,7 @@ path = "src/main.rs"
[package]
name = "lesavka_client"
version = "0.22.41"
version = "0.22.42"
edition = "2024"
[dependencies]

View File

@ -1,6 +1,6 @@
[package]
name = "lesavka_common"
version = "0.22.41"
version = "0.22.42"
edition = "2024"
build = "build.rs"

View File

@ -1884,11 +1884,12 @@ if [[ "$HOST_GADGET_PROTECTED" == "1" ]] \
CAN_TOUCH_UVC_SERVICE=0
fi
if [[ "$CAN_TOUCH_UVC_SERVICE" != "1" ]] && systemctl is-active --quiet lesavka-uvc; then
if [[ "${LESAVKA_INSTALL_PRESERVE_UVC_HELPER:-0}" == "1" ]]; then
echo "✅ lesavka-uvc already active; preserving it during attached-gadget version update."
else
if [[ "${LESAVKA_INSTALL_RESTART_UVC_HELPER:-0}" == "1" ]]; then
restart_lesavka_uvc_helper_only
echo "✅ lesavka-uvc helper restarted in-place; lesavka-core and the attached USB gadget were preserved."
echo "✅ lesavka-uvc helper restarted in-place by explicit request; lesavka-core and the attached USB gadget were preserved."
else
echo "✅ lesavka-uvc already active; preserving it during attached-gadget version update."
echo " Set LESAVKA_INSTALL_RESTART_UVC_HELPER=1 only during a local maintenance window if the helper binary must be refreshed without cycling lesavka-core."
fi
elif [[ "$CAN_TOUCH_UVC_SERVICE" != "1" ]]; then
echo "⚠️ lesavka-uvc is inactive, but the host/gadget is protected; not starting it during a version-only install." >&2

View File

@ -10,7 +10,7 @@ bench = false
[package]
name = "lesavka_server"
version = "0.22.41"
version = "0.22.42"
edition = "2024"
autobins = false

View File

@ -484,16 +484,16 @@ fn server_install_pins_hdmi_camera_and_display_defaults() {
assert!(
SERVER_INSTALL.contains("CAN_TOUCH_UVC_SERVICE=0")
&& SERVER_INSTALL.contains("preserving it during attached-gadget version update")
&& SERVER_INSTALL.contains("LESAVKA_INSTALL_PRESERVE_UVC_HELPER")
&& SERVER_INSTALL.contains("LESAVKA_INSTALL_RESTART_UVC_HELPER")
&& SERVER_INSTALL.contains("not starting it during a version-only install"),
"ordinary attached-gadget version updates should keep an operator escape hatch for preserving the UVC helper"
"ordinary attached-gadget version updates should preserve the UVC helper unless an operator explicitly opts into helper refresh"
);
assert!(
SERVER_INSTALL.contains("restart_lesavka_uvc_helper_only")
&& SERVER_INSTALL.contains("systemctl restart lesavka-uvc")
&& SERVER_INSTALL
.contains("lesavka-uvc helper restarted in-place; lesavka-core and the attached USB gadget were preserved"),
"version updates must refresh the UVC helper binary without cycling lesavka-core or rebuilding the gadget"
.contains("lesavka-uvc helper restarted in-place by explicit request; lesavka-core and the attached USB gadget were preserved"),
"the optional helper refresh must be explicit and must not cycle lesavka-core or rebuild the gadget"
);
assert!(
SERVER_INSTALL.contains("sudo systemctl start lesavka-uvc"),