From b68f4ee760141cf2bcafb670a7f9ff728b827cac Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Wed, 12 Nov 2025 10:36:15 -0300 Subject: [PATCH] feat(package_manager): evaluate env vars in installer commands Remove hardcoded DRIVE_ACCESSKEY/SECRET env vars and replace with variable references ($DRIVE_USER, $DRIVE_ACCESSKEY). Added logic to evaluate environment variable references in command execution by expanding $VAR references to their actual values from the environment. This makes the configuration more flexible and secure by avoiding hardcoded credentials. --- src/package_manager/installer.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/package_manager/installer.rs b/src/package_manager/installer.rs index 3d765b962..fada13eb9 100644 --- a/src/package_manager/installer.rs +++ b/src/package_manager/installer.rs @@ -61,8 +61,6 @@ impl PackageManager { fn register_drive(&mut self) { - let drive_user = std::env::var("DRIVE_ACCESSKEY").unwrap(); - let drive_password = std::env::var("DRIVE_SECRET").unwrap(); self.components.insert( "drive".to_string(), @@ -84,8 +82,8 @@ impl PackageManager { pre_install_cmds_windows: vec![], post_install_cmds_windows: vec![], env_vars: HashMap::from([ - ("MINIO_ROOT_USER".to_string(), drive_user.clone()), - ("MINIO_ROOT_PASSWORD".to_string(), drive_password.clone()), + ("MINIO_ROOT_USER".to_string(), "$DRIVE_USER".to_string()), + ("MINIO_ROOT_PASSWORD".to_string(), "$DRIVE_ACCESSKEY".to_string()), ]), data_download_list: Vec::new(), exec_cmd: "nohup {{BIN_PATH}}/minio server {{DATA_PATH}} --address :9000 --console-address :9001 > {{LOGS_PATH}}/minio.log 2>&1 &".to_string(), @@ -741,11 +739,23 @@ impl PackageManager { ); + + // Create new env vars map with evaluated $VAR references + let mut evaluated_envs = HashMap::new(); + for (k, v) in &component.env_vars { + if v.starts_with('$') { + let var_name = &v[1..]; + evaluated_envs.insert(k.clone(), std::env::var(var_name).unwrap_or_default()); + } else { + evaluated_envs.insert(k.clone(), v.clone()); + } + } + let child = std::process::Command::new("sh") .current_dir(&bin_path) .arg("-c") .arg(&rendered_cmd) - .envs(&component.env_vars) + .envs(&evaluated_envs) .spawn(); std::thread::sleep(std::time::Duration::from_secs(2));