242 lines
8.7 KiB
Diff
242 lines
8.7 KiB
Diff
From 42d7bdb932dfb5bb511ab2698c4fe4f3fc4be0be Mon Sep 17 00:00:00 2001
|
|
From: renoseven <dev@renoseven.net>
|
|
Date: Wed, 29 May 2024 22:06:09 +0800
|
|
Subject: [PATCH] all: finding executable from environment variables
|
|
|
|
Signed-off-by: renoseven <dev@renoseven.net>
|
|
---
|
|
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<Self> {
|
|
// 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<Option<i32>> {
|
|
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<Self> {
|
|
// 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<Self> {
|
|
// 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
|
|
|