From 42d7bdb932dfb5bb511ab2698c4fe4f3fc4be0be Mon Sep 17 00:00:00 2001 From: renoseven Date: Wed, 29 May 2024 22:06:09 +0800 Subject: [PATCH] all: finding executable from environment variables Signed-off-by: renoseven --- syscare-build/src/main.rs | 10 ++++++++-- syscare-build/src/patch/user_patch/upatch_builder.rs | 2 +- syscare/src/executor/build.rs | 7 +++---- syscare/src/main.rs | 10 ++++++++-- syscared/src/main.rs | 10 ++++++++-- syscared/src/patch/driver/upatch/sys.rs | 2 +- upatch-build/src/main.rs | 9 ++++++++- 7 files changed, 37 insertions(+), 13 deletions(-) diff --git a/syscare-build/src/main.rs b/syscare-build/src/main.rs index 8928218..1faa803 100644 --- a/syscare-build/src/main.rs +++ b/syscare-build/src/main.rs @@ -12,7 +12,7 @@ * See the Mulan PSL v2 for more details. */ -use std::{process, sync::Arc}; +use std::{env, process, sync::Arc}; use anyhow::{bail, ensure, Context, Result}; use flexi_logger::{ @@ -22,7 +22,7 @@ use lazy_static::lazy_static; use log::{error, info, LevelFilter, Record}; use syscare_abi::{PackageInfo, PackageType, PatchInfo, PatchType}; -use syscare_common::{fs, os}; +use syscare_common::{concat_os, fs, os}; mod args; mod build_params; @@ -44,6 +44,9 @@ const CLI_VERSION: &str = env!("CARGO_PKG_VERSION"); const CLI_ABOUT: &str = env!("CARGO_PKG_DESCRIPTION"); const CLI_UMASK: u32 = 0o022; +const PATH_ENV_NAME: &str = "PATH"; +const PATH_ENV_VALUE: &str = "/usr/libexec/syscare"; + const LOG_FILE_NAME: &str = "build"; const KERNEL_PKG_NAME: &str = "kernel"; @@ -70,6 +73,9 @@ impl SyscareBuild { fn new() -> Result { // Initialize arguments & prepare environments os::umask::set_umask(CLI_UMASK); + if let Some(path_env) = env::var_os(PATH_ENV_NAME) { + env::set_var(PATH_ENV_NAME, concat_os!(PATH_ENV_VALUE, ":", path_env)); + } let args = Arguments::new()?; let build_root = BuildRoot::new(&args.build_root)?; diff --git a/syscare-build/src/patch/user_patch/upatch_builder.rs b/syscare-build/src/patch/user_patch/upatch_builder.rs index 1e0e6b6..255c2d3 100644 --- a/syscare-build/src/patch/user_patch/upatch_builder.rs +++ b/syscare-build/src/patch/user_patch/upatch_builder.rs @@ -34,7 +34,7 @@ use crate::{build_params::BuildParameters, package::PackageImpl, patch::PatchBui use super::{elf_relation::ElfRelation, DEBUGINFO_FILE_EXT}; -const UPATCH_BUILD_BIN: &str = "/usr/libexec/syscare/upatch-build"; +const UPATCH_BUILD_BIN: &str = "upatch-build"; const RPMBUILD_BIN: &str = "rpmbuild"; struct UBuildParameters { diff --git a/syscare/src/executor/build.rs b/syscare/src/executor/build.rs index f9027c7..6d3866f 100644 --- a/syscare/src/executor/build.rs +++ b/syscare/src/executor/build.rs @@ -19,22 +19,21 @@ use anyhow::{bail, Context, Result}; use super::CommandExecutor; use crate::args::SubCommand; -const SYSCARE_BUILD_PATH: &str = "/usr/libexec/syscare/syscare-build"; +const SYSCARE_BUILD_BIN: &str = "syscare-build"; pub struct BuildCommandExecutor; impl CommandExecutor for BuildCommandExecutor { fn invoke(&self, command: &SubCommand) -> Result> { if let SubCommand::Build { args } = command { - let e = Command::new(SYSCARE_BUILD_PATH).args(args).exec(); + let e = Command::new(SYSCARE_BUILD_BIN).args(args).exec(); match e.kind() { std::io::ErrorKind::NotFound => { bail!("Package syscare-build is not installed"); } _ => { - return Err(e) - .with_context(|| format!("Failed to start {}", SYSCARE_BUILD_PATH)) + return Err(e).with_context(|| format!("Failed to start {}", SYSCARE_BUILD_BIN)) } } } diff --git a/syscare/src/main.rs b/syscare/src/main.rs index c709f6a..dea5717 100644 --- a/syscare/src/main.rs +++ b/syscare/src/main.rs @@ -12,7 +12,7 @@ * See the Mulan PSL v2 for more details. */ -use std::{process, rc::Rc}; +use std::{env, process, rc::Rc}; use anyhow::{Context, Result}; use flexi_logger::{DeferredNow, LogSpecification, Logger, LoggerHandle, WriteMode}; @@ -25,13 +25,16 @@ mod rpc; use args::Arguments; use executor::{build::BuildCommandExecutor, patch::PatchCommandExecutor, CommandExecutor}; use rpc::{RpcProxy, RpcRemote}; -use syscare_common::os; +use syscare_common::{concat_os, os}; pub const CLI_NAME: &str = env!("CARGO_PKG_NAME"); pub const CLI_VERSION: &str = env!("CARGO_PKG_VERSION"); pub const CLI_ABOUT: &str = env!("CARGO_PKG_DESCRIPTION"); const CLI_UMASK: u32 = 0o077; +const PATH_ENV_NAME: &str = "PATH"; +const PATH_ENV_VALUE: &str = "/usr/libexec/syscare"; + const SOCKET_FILE_NAME: &str = "syscared.sock"; const PATCH_OP_LOCK_NAME: &str = "patch_op.lock"; @@ -52,6 +55,9 @@ impl SyscareCLI { fn new() -> Result { // Initialize arguments & prepare environments os::umask::set_umask(CLI_UMASK); + if let Some(path_env) = env::var_os(PATH_ENV_NAME) { + env::set_var(PATH_ENV_NAME, concat_os!(PATH_ENV_VALUE, ":", path_env)); + } let args = Arguments::new()?; diff --git a/syscared/src/main.rs b/syscared/src/main.rs index b840abf..5c60ecf 100644 --- a/syscared/src/main.rs +++ b/syscared/src/main.rs @@ -12,7 +12,7 @@ * See the Mulan PSL v2 for more details. */ -use std::{fs::Permissions, os::unix::fs::PermissionsExt, panic, process, sync::Arc}; +use std::{env, fs::Permissions, os::unix::fs::PermissionsExt, panic, process, sync::Arc}; use anyhow::{ensure, Context, Result}; use daemonize::Daemonize; @@ -28,7 +28,7 @@ use parking_lot::RwLock; use patch::manager::PatchManager; use signal_hook::{consts::TERM_SIGNALS, iterator::Signals, low_level::signal_name}; -use syscare_common::{fs, os}; +use syscare_common::{concat_os, fs, os}; mod args; mod config; @@ -49,6 +49,9 @@ const DAEMON_VERSION: &str = env!("CARGO_PKG_VERSION"); const DAEMON_ABOUT: &str = env!("CARGO_PKG_DESCRIPTION"); const DAEMON_UMASK: u32 = 0o077; +const PATH_ENV_NAME: &str = "PATH"; +const PATH_ENV_VALUE: &str = "/usr/libexec/syscare"; + const CONFIG_FILE_NAME: &str = "syscared.yaml"; const PID_FILE_NAME: &str = "syscared.pid"; const SOCKET_FILE_NAME: &str = "syscared.sock"; @@ -107,6 +110,9 @@ impl Daemon { // Initialize arguments & prepare environments os::umask::set_umask(DAEMON_UMASK); + if let Some(path_env) = env::var_os(PATH_ENV_NAME) { + env::set_var(PATH_ENV_NAME, concat_os!(PATH_ENV_VALUE, ":", path_env)); + } let args = Arguments::new()?; fs::create_dir_all(&args.config_dir)?; diff --git a/syscared/src/patch/driver/upatch/sys.rs b/syscared/src/patch/driver/upatch/sys.rs index a388bc6..1990289 100644 --- a/syscared/src/patch/driver/upatch/sys.rs +++ b/syscared/src/patch/driver/upatch/sys.rs @@ -6,7 +6,7 @@ use uuid::Uuid; use syscare_common::process::Command; -const UPATCH_MANAGE_BIN: &str = "/usr/libexec/syscare/upatch-manage"; +const UPATCH_MANAGE_BIN: &str = "upatch-manage"; pub fn active_patch(uuid: &Uuid, pid: i32, target_elf: &Path, patch_file: &Path) -> Result<()> { let exit_code = Command::new(UPATCH_MANAGE_BIN) diff --git a/upatch-build/src/main.rs b/upatch-build/src/main.rs index b5c14a8..473b0a7 100644 --- a/upatch-build/src/main.rs +++ b/upatch-build/src/main.rs @@ -13,6 +13,7 @@ */ use std::{ + env, ffi::OsStr, fs::Permissions, os::unix::fs::PermissionsExt, @@ -54,6 +55,9 @@ const CLI_VERSION: &str = env!("CARGO_PKG_VERSION"); const CLI_ABOUT: &str = env!("CARGO_PKG_DESCRIPTION"); const CLI_UMASK: u32 = 0o022; +const PATH_ENV_NAME: &str = "PATH"; +const PATH_ENV_VALUE: &str = "/usr/libexec/syscare"; + const LOG_FILE_NAME: &str = "build"; struct BuildInfo { @@ -83,6 +87,9 @@ impl UpatchBuild { fn new() -> Result { // Initialize arguments & prepare environments os::umask::set_umask(CLI_UMASK); + if let Some(path_env) = env::var_os(PATH_ENV_NAME) { + env::set_var(PATH_ENV_NAME, concat_os!(PATH_ENV_VALUE, ":", path_env)); + } let args = Arguments::new()?; let build_root = BuildRoot::new(&args.build_root)?; @@ -196,7 +203,7 @@ impl UpatchBuild { output_dir: &Path, verbose: bool, ) -> Result<()> { - const UPATCH_DIFF_BIN: &str = "/usr/libexec/syscare/upatch-diff"; + const UPATCH_DIFF_BIN: &str = "upatch-diff"; let ouput_name = original_object.file_name().with_context(|| { format!( -- 2.34.1