install: preserve invoking user through root wrapper

This commit is contained in:
Brad Stein 2026-05-19 05:14:45 -03:00
parent e0027e7929
commit fabe7c2a76
6 changed files with 49 additions and 7 deletions

6
Cargo.lock generated
View File

@ -1658,7 +1658,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "lesavka_client"
version = "0.25.0"
version = "0.25.1"
dependencies = [
"anyhow",
"async-stream",
@ -1692,7 +1692,7 @@ dependencies = [
[[package]]
name = "lesavka_common"
version = "0.25.0"
version = "0.25.1"
dependencies = [
"anyhow",
"base64",
@ -1704,7 +1704,7 @@ dependencies = [
[[package]]
name = "lesavka_server"
version = "0.25.0"
version = "0.25.1"
dependencies = [
"anyhow",
"base64",

View File

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

View File

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

View File

@ -1,12 +1,39 @@
#!/usr/bin/env bash
# scripts/install/server.sh - install and setup all server related apps and environments
set -euo pipefail
ORIG_USER=${SUDO_USER:-$(id -un)}
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
SCRIPT_REPO_ROOT=$(cd -- "$SCRIPT_DIR/../.." && pwd)
DEFAULT_REPO_URL=ssh://git@scm.bstein.dev:2242/bstein/lesavka.git
export TMPDIR=${TMPDIR:-/var/tmp}
resolve_install_user() {
if [[ -n ${SUDO_USER:-} && ${SUDO_USER} != root ]]; then
printf '%s\n' "$SUDO_USER"
return 0
fi
local current_user
current_user=$(id -un)
if [[ $current_user != root ]]; then
printf '%s\n' "$current_user"
return 0
fi
local owner_uid owner_user
owner_uid=$(stat -c '%u' "$SCRIPT_REPO_ROOT" 2>/dev/null || true)
if [[ -n $owner_uid && $owner_uid != 0 ]]; then
owner_user=$(getent passwd "$owner_uid" | cut -d: -f1)
if [[ -n $owner_user ]]; then
printf '%s\n' "$owner_user"
return 0
fi
fi
printf 'root\n'
}
ORIG_USER=$(resolve_install_user)
persisted_env_value() {
local file=$1
local key=$2

View File

@ -16,7 +16,7 @@ bench = false
[package]
name = "lesavka_server"
version = "0.25.0"
version = "0.25.1"
edition = "2024"
autobins = false

View File

@ -10,6 +10,21 @@ const SERVER_INSTALL: &str = include_str!(concat!(
"/scripts/install/server.sh"
));
#[test]
fn server_install_infers_checkout_owner_when_root_wrapper_hides_sudo_user() {
for expected in [
"resolve_install_user()",
"if [[ -n ${SUDO_USER:-} && ${SUDO_USER} != root ]]",
"owner_uid=$(stat -c '%u' \"$SCRIPT_REPO_ROOT\"",
"ORIG_USER=$(resolve_install_user)",
] {
assert!(
SERVER_INSTALL.contains(expected),
"install script should include root-wrapper install user inference: {expected}"
);
}
}
#[test]
fn server_install_pins_hdmi_camera_and_display_defaults() {
for expected in [