From 51df988dea0d0e7b0bd9761309330a21c94a6085 Mon Sep 17 00:00:00 2001 From: Zhou Kang Date: Thu, 27 Jul 2023 08:36:56 +0000 Subject: [PATCH] add command test ko is exist --- bin/daemon.rs | 2 +- bin/main.rs | 49 +++++++++++++++++++++++++++++++++------------ sysboost.service | 2 +- tests/bash/Makefile | 6 ++++-- 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/bin/daemon.rs b/bin/daemon.rs index 0ef8c08..6f77c53 100644 --- a/bin/daemon.rs +++ b/bin/daemon.rs @@ -108,7 +108,7 @@ pub fn db_remove_link(path: &String) { }; } -fn run_child(cmd: &str, args: &Vec) -> i32 { +pub fn run_child(cmd: &str, args: &Vec) -> i32 { log::info!("run child: {}, {}", cmd, args.join(" ").to_string()); let mut child = match Command::new(cmd).args(args).stdout(Stdio::piped()).spawn() { Ok(child) => child, diff --git a/bin/main.rs b/bin/main.rs index dc846ac..61aecfc 100644 --- a/bin/main.rs +++ b/bin/main.rs @@ -12,6 +12,7 @@ mod daemon; mod coredump_monitor; +use crate::daemon::run_child; use crate::daemon::daemon_loop; use crate::coredump_monitor::coredump_monitor_loop; @@ -23,39 +24,61 @@ use std::thread; const APP_NAME: &str = "sysboostd"; +fn test_kmod() -> i32 { + let mut args: Vec = Vec::new(); + args.push("-c".to_string()); + args.push("lsmod | grep binfmt_rto".to_string()); + let ret = run_child("/usr/bin/bash", &args); + if ret == 0 { + println!("binfmt_rto.ko is ready"); + } else { + println!("binfmt_rto.ko is not ready"); + } + return ret; +} + fn main() { let args: Vec = env::args().collect(); - let argc = args.len(); - let mut mode = "default"; - - if argc != 1 { - // arg0 is program name, parameter is from arg1 - let cur_arg = 1; + let mut is_debug = false; + let mut is_daemon = false; - if args[cur_arg] == "-debug" { - mode = "debug"; - } else if args[cur_arg] == "-daemon" { - mode = "daemon"; + // arg0 is program name, parameter is from arg1 + for i in 1..args.len() { + match args[i].as_str() { + "--debug" => { + is_debug = true; + } + "--daemon" => { + is_daemon = true; + } + "--test-kmod" => { + std::process::exit(test_kmod()); + } + _ => { + println!("parameter is wrong"); + std::process::exit(-1); + } } } - if mode == "debug" { + if is_debug { logger::init_log_to_console(APP_NAME, log::LevelFilter::Debug); } else { logger::init_log(APP_NAME, log::LevelFilter::Info, "syslog", None); } log::info!("{} running", APP_NAME); - if mode == "daemon" { + if is_daemon { let daemonize = Daemonize::new(); match daemonize.start() { Ok(_) => log::info!("On Daemon"), Err(e) => { log::error!("Error, {}", e); - return; + std::process::exit(-1); } } } + // start up coredump monitor let _coredump_monitor_handle = thread::spawn(||{ coredump_monitor_loop(); diff --git a/sysboost.service b/sysboost.service index e2d607e..a6dcc74 100644 --- a/sysboost.service +++ b/sysboost.service @@ -5,7 +5,7 @@ After=sysboost.service [Service] Type=forking -ExecStart=/usr/bin/sysboostd -daemon +ExecStart=/usr/bin/sysboostd --daemon Restart=always [Install] diff --git a/tests/bash/Makefile b/tests/bash/Makefile index ac1c8a0..f9c266d 100644 --- a/tests/bash/Makefile +++ b/tests/bash/Makefile @@ -1,6 +1,7 @@ # SPDX-License-Identifier: MulanPSL-2.0 -ROOT_DIR=../../ -BUILD_DIR=$(ROOT_DIR)build +ROOT_DIR=../.. +SYSBOOSTD=$(ROOT_DIR)/target/debug/sysboostd +BUILD_DIR=$(ROOT_DIR)/build SYSBOOST=$(BUILD_DIR)/src/sysboost RELOCATION_DIR=/usr/lib/relocation @@ -42,6 +43,7 @@ ifeq ($(MODE), --static-nold) bash: clear make -C $(ROOT_DIR) + $(SYSBOOSTD) --test-kmod @echo ===rto=== $(SYSBOOST) $(MODE) $(BASH) $(LIBTINFO) $(LIBC) readelf -W -a $(BASH).rto > bash.rto.elf -- Gitee