From e7e7eb99d80ddfc25e30a20369bde7242d0a6dae Mon Sep 17 00:00:00 2001 From: prplV Date: Mon, 13 Jan 2025 15:09:53 +0300 Subject: [PATCH 01/27] init commit --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index c11e198..683b17f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,7 +1,7 @@ pipeline { agent any stages { - stage('Tests and compiling binaries1') { + stage('Tests and compiling binaries') { when { expression { env.CHANGE_BRANCH?.startsWith('feature/') } } -- 2.40.1 From a25a630d77c880d97ee3415f547a396b148fb0ed Mon Sep 17 00:00:00 2001 From: prplV Date: Mon, 13 Jan 2025 15:17:32 +0300 Subject: [PATCH 02/27] test fix not to test bash code ) --- noxis-rs/src/options/preboot.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noxis-rs/src/options/preboot.rs b/noxis-rs/src/options/preboot.rs index 8130e96..84a3f27 100644 --- a/noxis-rs/src/options/preboot.rs +++ b/noxis-rs/src/options/preboot.rs @@ -10,7 +10,7 @@ const SOCKET_PATH: &str = "/var/run/enode/hostagent.sock"; /// ## for setting up metrics mode as preboot param from command prompt /// /// examples: -/// ``` +/// ``` bash /// noxis-rs ... --metrics full /// noxis-rs ... --metrics system /// noxis-rs ... --metrics processes -- 2.40.1 From 576a5e0739a08c7b2ce7f0297517b556070c5c47 Mon Sep 17 00:00:00 2001 From: prplV Date: Mon, 13 Jan 2025 15:25:10 +0300 Subject: [PATCH 03/27] cicd fix with dep installing --- Dockerfile | 3 +++ Jenkinsfile | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ee3f295..350c576 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,9 @@ RUN apt update && apt install -y \ pkg-config \ libudev-dev \ procps \ + gcc-riscv64-unknown-elf \ + gcc-riscv64-linux-gnu \ + binutils-riscv64-linux-gnu \ && rm -rf /var/lib/apt/lists/* RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y diff --git a/Jenkinsfile b/Jenkinsfile index 683b17f..b282227 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -15,7 +15,7 @@ pipeline { sh "mkdir -p ${targetDir}" sh """ - docker build --network=host -t e-monitor . + docker build --network=host -t --no-cache e-monitor . docker run --name e-monitor --dns 8.8.8.8 --network=host e-monitor:latest """ -- 2.40.1 From d229ae1ce94a26a45d1bf90f56e5a839e85b8643 Mon Sep 17 00:00:00 2001 From: prplV Date: Mon, 13 Jan 2025 15:31:51 +0300 Subject: [PATCH 04/27] cicd fix#2 --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index b282227..55163e3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -15,7 +15,7 @@ pipeline { sh "mkdir -p ${targetDir}" sh """ - docker build --network=host -t --no-cache e-monitor . + docker build --network=host --no-cache -t e-monitor . docker run --name e-monitor --dns 8.8.8.8 --network=host e-monitor:latest """ -- 2.40.1 From 0e959b9a58ce055456fe41436c1f92c221d7f4b0 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Mon, 13 Jan 2025 15:47:44 +0300 Subject: [PATCH 05/27] Changed Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 55163e3..22330c7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -69,7 +69,7 @@ pipeline { } steps { script { - echo "Attempting to merge PR ${env.CHANGE_ID} using credentials..." + echo "Attempting to merge PR ${env.CHANGE_ID} using credentials ..." withCredentials([usernamePassword(credentialsId: 'Jenkins creds', usernameVariable: 'GITEA_USER', passwordVariable: 'GITEA_PASS')]) { def prId = env.CHANGE_ID sh """ -- 2.40.1 From 497dcbaeb6d0ef21e96fcb8519eb83d00effe952 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Mon, 13 Jan 2025 16:25:04 +0300 Subject: [PATCH 06/27] Added / for target folders --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 22330c7..505eea2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -9,8 +9,8 @@ pipeline { script { echo "Building and running tests in Docker for feature branch..." try { - def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/x86" - def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv" + def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/x86/" + def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv/" sh "mkdir -p ${targetDir}" -- 2.40.1 From f6c952f20880264afcae1ff6716992d5d2d6beed Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Mon, 13 Jan 2025 16:30:06 +0300 Subject: [PATCH 07/27] changed creating folders for binaries --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 505eea2..4f40ac6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,11 +12,11 @@ pipeline { def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/x86/" def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv/" - sh "mkdir -p ${targetDir}" + sh "mkdir -p ${targetDirAmd}" + sh "mkdir -p ${targetDirRisc}" sh """ docker build --network=host --no-cache -t e-monitor . - docker run --name e-monitor --dns 8.8.8.8 --network=host e-monitor:latest """ -- 2.40.1 From 390f496004d61c37cccba454348581484fae6b27 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Mon, 13 Jan 2025 16:56:48 +0300 Subject: [PATCH 08/27] Modified Dockerfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4f40ac6..8ec20b6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -16,7 +16,7 @@ pipeline { sh "mkdir -p ${targetDirRisc}" sh """ - docker build --network=host --no-cache -t e-monitor . + docker build --network=host -t e-monitor . docker run --name e-monitor --dns 8.8.8.8 --network=host e-monitor:latest """ -- 2.40.1 From 5d54c5b97c13bf3e4ffb5fe36c30ff6177980fb5 Mon Sep 17 00:00:00 2001 From: prplV Date: Wed, 15 Jan 2025 12:51:22 +0300 Subject: [PATCH 09/27] env vars enum + display-default impl --- noxis-rs/src/options/preboot.rs | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/noxis-rs/src/options/preboot.rs b/noxis-rs/src/options/preboot.rs index 84a3f27..fd22143 100644 --- a/noxis-rs/src/options/preboot.rs +++ b/noxis-rs/src/options/preboot.rs @@ -6,6 +6,51 @@ use std::path::PathBuf; const SOCKET_PATH: &str = "/var/run/enode/hostagent.sock"; +/// +enum EnvVars { + NoxisNoHagent, + NoxisNoLogs, + NoxisRefreshLogs, + NoxisNoRemoteConfig, + NoxisNoConfigSub, + NoxisSocketPath, + NoxisLogTo, + NoxisRemoteServerUrl, + NoxisConfig, + NoxisMetrics, +} + +/// +impl std::fmt::Display for EnvVars { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + EnvVars::NoxisNoHagent => write!(f, "NOXIS_NO_HAGENT"), + EnvVars::NoxisNoLogs => write!(f, "NOXIS_NO_LOGS"), + EnvVars::NoxisRefreshLogs => write!(f, "NOXIS_REFRESH_LOGS"), + EnvVars::NoxisNoRemoteConfig => write!(f, "NOXIS_NO_REMOTE_CONFIG"), + EnvVars::NoxisNoConfigSub => write!(f, "NOXIS_NO_CONFIG_SUB"), + EnvVars::NoxisSocketPath => write!(f, "NOXIS_SOCKET_PATH"), + EnvVars::NoxisLogTo => write!(f, "NOXIS_LOG_TO"), + EnvVars::NoxisRemoteServerUrl => write!(f, "NOXIS_REMOTE_SERVER_URL"), + EnvVars::NoxisConfig => write!(f, "NOXIS_CONFIG"), + EnvVars::NoxisMetrics => write!(f, "NOXIS_METRICS"), + } + } +} + +impl Default for EnvVars { + fn default() { + todo!() + // setting default env vars values if not exists + } +} + +impl EnvVars { + fn setup() { + + } +} + /// # Enum `MetricsPrebootParams` /// ## for setting up metrics mode as preboot param from command prompt /// -- 2.40.1 From eed9fa881a202329ed2087d6a880da1394fe9321 Mon Sep 17 00:00:00 2001 From: prplV Date: Wed, 15 Jan 2025 13:17:14 +0300 Subject: [PATCH 10/27] default impl self-written + config preboot param check fixed --- noxis-rs/src/options/preboot.rs | 36 ++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/noxis-rs/src/options/preboot.rs b/noxis-rs/src/options/preboot.rs index fd22143..cf3e55d 100644 --- a/noxis-rs/src/options/preboot.rs +++ b/noxis-rs/src/options/preboot.rs @@ -38,16 +38,34 @@ impl std::fmt::Display for EnvVars { } } -impl Default for EnvVars { - fn default() { - todo!() - // setting default env vars values if not exists +// impl<'a> Default for EnvVars { +// fn default() -> &'a str { +// todo!() +// // setting default env vars values if not exists +// } +// } + +impl<'a> EnvVars { + // Default trait func is not satisfying this issue + fn default(self) -> &'a str { + match self { + EnvVars::NoxisNoHagent => "false", + EnvVars::NoxisNoLogs => "false", + EnvVars::NoxisRefreshLogs => "false", + EnvVars::NoxisNoRemoteConfig => "false", + EnvVars::NoxisNoConfigSub => "false", + EnvVars::NoxisSocketPath => "/var/run/enode/hostagent.sock", + EnvVars::NoxisLogTo => "./", + EnvVars::NoxisRemoteServerUrl => "localhost", + EnvVars::NoxisConfig => "./settings.json", + EnvVars::NoxisMetrics => "NOXIS_METRICS", + } } -} - -impl EnvVars { fn setup() { + // setup default if not exists + // check values and save preboot states in env vars if not equal + todo!() } } @@ -256,6 +274,10 @@ impl PrebootParams { // existing sock file if !self.config.exists() { eprintln!("Error: Invalid character in config file. Config path was set to default"); + let config = PathBuf::from("/etc/settings.json"); + if !config.exists() && self.no_remote_config { + return Err(Error::msg("Noxis cannot run without config. Create local config or enable remote-config mechanism")); + } self.config = PathBuf::from("settings.json"); // return Err(Error::msg("Local Config Not Found or Noxis can't read it. Cannot start")); } -- 2.40.1 From 011206641819333a4ae109dbb7eef1f8c3f6727a Mon Sep 17 00:00:00 2001 From: prplV Date: Wed, 15 Jan 2025 16:25:53 +0300 Subject: [PATCH 11/27] setting up env vars + comaping with preboot values --- noxis-rs/src/options/preboot.rs | 42 ++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/noxis-rs/src/options/preboot.rs b/noxis-rs/src/options/preboot.rs index cf3e55d..d5162d5 100644 --- a/noxis-rs/src/options/preboot.rs +++ b/noxis-rs/src/options/preboot.rs @@ -3,6 +3,7 @@ use anyhow::{Result, Ok, Error}; use clap::Parser; use std::path::PathBuf; +use std::env::{var, vars}; const SOCKET_PATH: &str = "/var/run/enode/hostagent.sock"; @@ -38,13 +39,7 @@ impl std::fmt::Display for EnvVars { } } -// impl<'a> Default for EnvVars { -// fn default() -> &'a str { -// todo!() -// // setting default env vars values if not exists -// } -// } - +/// impl<'a> EnvVars { // Default trait func is not satisfying this issue fn default(self) -> &'a str { @@ -58,14 +53,38 @@ impl<'a> EnvVars { EnvVars::NoxisLogTo => "./", EnvVars::NoxisRemoteServerUrl => "localhost", EnvVars::NoxisConfig => "./settings.json", - EnvVars::NoxisMetrics => "NOXIS_METRICS", + EnvVars::NoxisMetrics => "full", } } - fn setup() { + fn process_env_var(self, preboot_value: &str) { + // let default = self.default(); + match var(self.to_string()) { + std::result::Result::Ok(val) => { + if val != preboot_value { + std::env::set_var(self.to_string(), self.default()); + } + }, + Err(_) => { + std::env::set_var(self.to_string(), preboot_value); + println!("{:?}", vars()); + }, + } + } + pub fn setup(preboot: &PrebootParams) { // setup default if not exists - // check values and save preboot states in env vars if not equal - todo!() + + Self::NoxisNoHagent.process_env_var(&preboot.no_hostagent.to_string()); + Self::NoxisNoLogs.process_env_var(&preboot.no_logs.to_string()); + Self::NoxisRefreshLogs.process_env_var(&preboot.refresh_logs.to_string()); + Self::NoxisNoRemoteConfig.process_env_var(&preboot.no_remote_config.to_string()); + Self::NoxisNoConfigSub.process_env_var(&preboot.no_sub.to_string()); + Self::NoxisSocketPath.process_env_var(preboot.socket_path.to_str().unwrap()); + Self::NoxisLogTo.process_env_var(preboot.log_to.to_str().unwrap()); + Self::NoxisRemoteServerUrl.process_env_var(&preboot.remote_server_url); + Self::NoxisConfig.process_env_var(preboot.config.to_str().unwrap()); + Self::NoxisMetrics.process_env_var(&preboot.metrics.to_string()); + } } @@ -282,6 +301,7 @@ impl PrebootParams { // return Err(Error::msg("Local Config Not Found or Noxis can't read it. Cannot start")); } // redis server check + EnvVars::setup(&self); Ok(self) } } -- 2.40.1 From b67feb8ce5c2806dfbec5608a73c4eb7d97a4839 Mon Sep 17 00:00:00 2001 From: prplV Date: Wed, 15 Jan 2025 16:30:17 +0300 Subject: [PATCH 12/27] dotenv support + gitignore update --- .gitignore | 1 + noxis-rs/Cargo.toml | 1 + noxis-rs/src/options/preboot.rs | 5 +++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 40dd2ff..f45f0c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /target .idea +/.env Cargo.lock hagent_test.sock \ No newline at end of file diff --git a/noxis-rs/Cargo.toml b/noxis-rs/Cargo.toml index 62c917f..9040d12 100644 --- a/noxis-rs/Cargo.toml +++ b/noxis-rs/Cargo.toml @@ -17,3 +17,4 @@ serde_json = "1.0.118" sysinfo = "0.32.0" tokio = { version = "1.38.0", features = ["full", "time"] } noxis-cli = { path = "../noxis-cli" } +dotenv = "0.15.0" diff --git a/noxis-rs/src/options/preboot.rs b/noxis-rs/src/options/preboot.rs index d5162d5..8293f8a 100644 --- a/noxis-rs/src/options/preboot.rs +++ b/noxis-rs/src/options/preboot.rs @@ -3,7 +3,8 @@ use anyhow::{Result, Ok, Error}; use clap::Parser; use std::path::PathBuf; -use std::env::{var, vars}; +use std::env::var; +use dotenv::dotenv; const SOCKET_PATH: &str = "/var/run/enode/hostagent.sock"; @@ -66,7 +67,6 @@ impl<'a> EnvVars { }, Err(_) => { std::env::set_var(self.to_string(), preboot_value); - println!("{:?}", vars()); }, } } @@ -269,6 +269,7 @@ pub struct PrebootParams { /// ## to enable validation mechanism impl PrebootParams { pub fn validate(mut self) -> Result { + dotenv().ok(); if !self.socket_path.exists() && !self.no_hostagent { if self.socket_path.to_string_lossy() == SOCKET_PATH { self.no_hostagent = true; -- 2.40.1 From d400318aadb4fc812ccaa8378390b0cbf5afa229 Mon Sep 17 00:00:00 2001 From: prplV Date: Wed, 15 Jan 2025 16:31:16 +0300 Subject: [PATCH 13/27] version update --- noxis-rs/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noxis-rs/Cargo.toml b/noxis-rs/Cargo.toml index 9040d12..0745074 100644 --- a/noxis-rs/Cargo.toml +++ b/noxis-rs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noxis-rs" -version = "0.11.3" +version = "0.11.10" edition = "2021" [dependencies] -- 2.40.1 From 0b61f56bca0b70ed1d73a879f16d2dd8353c43c4 Mon Sep 17 00:00:00 2001 From: prplV Date: Mon, 20 Jan 2025 12:00:59 +0300 Subject: [PATCH 14/27] work without valid local conf checked --- noxis-rs/settings.json | 1 - noxis-rs/src/options/config.rs | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/noxis-rs/settings.json b/noxis-rs/settings.json index 8fb8d10..f830fce 100644 --- a/noxis-rs/settings.json +++ b/noxis-rs/settings.json @@ -31,4 +31,3 @@ } ] } - diff --git a/noxis-rs/src/options/config.rs b/noxis-rs/src/options/config.rs index 0bc5ecc..ceb8136 100644 --- a/noxis-rs/src/options/config.rs +++ b/noxis-rs/src/options/config.rs @@ -336,7 +336,6 @@ pub async fn subscribe_config_stream(actual_prcs: Arc, params: Arc = msg.get_payload(); match get_remote_config { Ok(payload) => { @@ -353,7 +352,10 @@ pub async fn subscribe_config_stream(actual_prcs: Arc, params: Arc continue, + _ => { + warn!("Pulled new config. Current config is more actual ..."); + continue + }, } } else { -- 2.40.1 From 5cfae2c246e029c77afe4b9650ea47541852ac70 Mon Sep 17 00:00:00 2001 From: prplV Date: Mon, 20 Jan 2025 15:51:49 +0300 Subject: [PATCH 15/27] cli: self made error type with thiserror crate --- noxis-cli/Cargo.toml | 3 ++- noxis-cli/src/cli_error.rs | 14 ++++++++++++++ noxis-cli/src/{net.rs => cli_net.rs} | 12 +++++++----- noxis-cli/src/lib.rs | 2 ++ noxis-cli/src/main.rs | 5 +++-- 5 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 noxis-cli/src/cli_error.rs rename noxis-cli/src/{net.rs => cli_net.rs} (59%) diff --git a/noxis-cli/Cargo.toml b/noxis-cli/Cargo.toml index 22666eb..4c34412 100644 --- a/noxis-cli/Cargo.toml +++ b/noxis-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noxis-cli" -version = "0.1.6" +version = "0.2.4" edition = "2021" [dependencies] @@ -8,4 +8,5 @@ anyhow = "1.0.94" clap = { version = "4.5.22", features = ["derive"] } serde = { version = "1.0.215", features = ["derive"] } serde_json = "1.0.133" +thiserror = "2.0.11" tokio = { version = "1.42.0", features = ["full", "net"] } diff --git a/noxis-cli/src/cli_error.rs b/noxis-cli/src/cli_error.rs new file mode 100644 index 0000000..bb3a8bd --- /dev/null +++ b/noxis-cli/src/cli_error.rs @@ -0,0 +1,14 @@ +use thiserror::Error; +use super::cli_net::NOXIS_RS_CREDS; + +#[derive(Debug, Error)] +pub enum NoxisCliError { + #[error("Can't send any data to {:?}. Noxis-rs daemon is disabled or can't be accessed", NOXIS_RS_CREDS)] + NoxisDaemonMissing, + #[error("Noxis CLI can't write any data to the Noxis-rs port. Check daemon and it's web-functionality")] + PortIsNotWritable, + #[error("Can't send Cli-prompt to the Noxis-rs. Check it's state")] + CliPromptCanNotBeSent, + #[error("Can't parse CLI struct and send as byte stream")] + ToStringCliParsingParsing, +} \ No newline at end of file diff --git a/noxis-cli/src/net.rs b/noxis-cli/src/cli_net.rs similarity index 59% rename from noxis-cli/src/net.rs rename to noxis-cli/src/cli_net.rs index 2e8c43a..b0fbfe7 100644 --- a/noxis-cli/src/net.rs +++ b/noxis-cli/src/cli_net.rs @@ -3,26 +3,28 @@ use tokio::io::AsyncWriteExt; use tokio::time::{Duration, sleep}; use anyhow::Result; use super::Cli; +use super::cli_error::NoxisCliError; + +pub const NOXIS_RS_CREDS: &str = "127.0.0.1:7753"; pub async fn create_tcp_stream() -> Result { - let stream = TcpStream::connect("127.0.0.1:7753").await?; - Ok(stream) + Ok(TcpStream::connect(NOXIS_RS_CREDS).await.map_err(|_| NoxisCliError::NoxisDaemonMissing)?) } pub async fn try_send(stream: Result, params: Cli) -> Result<()> { use serde_json::to_string; - let mut stream = stream?; + let mut stream = stream.map_err(|_| NoxisCliError::NoxisDaemonMissing)?; loop { if stream.writable().await.is_err() { sleep(Duration::from_millis(100)).await; continue; } // let msg: Cli = from_str(&format!("{:?}", params))?; - let msg= to_string(¶ms)?; + let msg= to_string(¶ms).map_err(|_| NoxisCliError::ToStringCliParsingParsing)?; // let msg = r"HTTP/1.1 POST\r\nContent-Length: 14\r\nContent-Type: text/plain\r\n\r\nHello, World!@"; - stream.write_all(msg.as_bytes()).await?; + stream.write_all(msg.as_bytes()).await.map_err(|_| NoxisCliError::CliPromptCanNotBeSent)?; // ... break; } diff --git a/noxis-cli/src/lib.rs b/noxis-cli/src/lib.rs index 163fc0a..5515aa9 100644 --- a/noxis-cli/src/lib.rs +++ b/noxis-cli/src/lib.rs @@ -1,3 +1,5 @@ mod cli; +mod cli_net; +mod cli_error; pub use cli::*; \ No newline at end of file diff --git a/noxis-cli/src/main.rs b/noxis-cli/src/main.rs index 0b9e00f..9262502 100644 --- a/noxis-cli/src/main.rs +++ b/noxis-cli/src/main.rs @@ -1,9 +1,10 @@ mod cli; -mod net; +mod cli_net; +mod cli_error; use clap::Parser; use cli::Cli; -use net::{create_tcp_stream, try_send}; +use cli_net::{create_tcp_stream, try_send}; use anyhow::Result; #[tokio::main] -- 2.40.1 From f08b54d51e32cba4ff7d1392928ab60131379022 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Tue, 21 Jan 2025 14:02:55 +0300 Subject: [PATCH 16/27] Added build.sh with supporting amd64 riscv64 binaries --- .gitignore | 3 ++- build.sh | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 build.sh diff --git a/.gitignore b/.gitignore index f45f0c7..c69fa41 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .idea /.env Cargo.lock -hagent_test.sock \ No newline at end of file +hagent_test.sock +release diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..a397f1d --- /dev/null +++ b/build.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Скрипт для сборки и копирования бинарников +# Использование: ./build.sh <архитектура> +# Поддерживаемые архитектуры: amd64, riscv64 + +if [ -z "$1" ]; then + echo "Ошибка: Необходимо указать архитектуру (например, amd64 или riscv64)." + exit 1 +fi + +ARCH="$1" +TARGET_DIR="release/${ARCH}" +CONTAINER_NAME="e-monitor" + +SUPPORTED_ARCHS=("amd64" "riscv64") +if [[ ! " ${SUPPORTED_ARCHS[@]} " =~ " ${ARCH} " ]]; then + echo "Ошибка: Неизвестная архитектура $ARCH. Допустимые значения: ${SUPPORTED_ARCHS[*]}." + exit 1 +fi + +# На случай, если контейнер с таким именем уже существует +docker stop e-monitor && docker rm e-monitor + +echo "Building Docker image..." + +docker build --network=host -t e-monitor . || { + echo "Ошибка: Не удалось построить Docker-образ." + exit 1 +} + +echo "Running Docker container..." + +docker run --name "$CONTAINER_NAME" --dns 8.8.8.8 --network=host e-monitor:latest || { + echo "Ошибка: Не удалось запустить Docker-контейнер." + exit 1 +} + +echo "Creating target directory: $TARGET_DIR" +mkdir -p "$TARGET_DIR" + +case "$ARCH" in + amd64) + echo "Copying binaries for architecture: amd64" + docker cp "$CONTAINER_NAME:/usr/src/kii/target/x86_64-unknown-linux-gnu/release/noxis-cli" "$TARGET_DIR/" || { + echo "Ошибка: Не удалось скопировать noxis-cli для amd64." + docker stop "$CONTAINER_NAME" && docker rm "$CONTAINER_NAME" + exit 1 + } + docker cp "$CONTAINER_NAME:/usr/src/kii/target/x86_64-unknown-linux-gnu/release/noxis-rs" "$TARGET_DIR/" || { + echo "Ошибка: Не удалось скопировать noxis-rs для amd64." + docker stop "$CONTAINER_NAME" && docker rm "$CONTAINER_NAME" + exit 1 + } + ;; + riscv64) + echo "Copying binaries for architecture: riscv64" + docker cp "$CONTAINER_NAME:/usr/src/kii/target/riscv64gc-unknown-linux-gnu/release/noxis-cli" "$TARGET_DIR/" || { + echo "Ошибка: Не удалось скопировать noxis-cli для riscv64." + docker stop "$CONTAINER_NAME" && docker rm "$CONTAINER_NAME" + exit 1 + } + docker cp "$CONTAINER_NAME:/usr/src/kii/target/riscv64gc-unknown-linux-gnu/release/noxis-rs" "$TARGET_DIR/" || { + echo "Ошибка: Не удалось скопировать noxis-rs для riscv64." + docker stop "$CONTAINER_NAME" && docker rm "$CONTAINER_NAME" + exit 1 + } + ;; +esac + +echo "Stopping and removing Docker container..." +docker stop "$CONTAINER_NAME" && docker rm "$CONTAINER_NAME" + +echo "Build and extraction completed successfully for architecture: $ARCH" +exit 0 -- 2.40.1 From 512df7ebeec73ab23b192d700eb50b670b196dd3 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Tue, 21 Jan 2025 14:25:26 +0300 Subject: [PATCH 17/27] Changed Ubuntu version --- Dockerfile | 2 +- build.sh | 0 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 build.sh diff --git a/Dockerfile b/Dockerfile index 350c576..b5128cd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:latest +FROM ubuntu:22.04 USER root diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 -- 2.40.1 From 780a3c1a375d9b529fdefcd11556e6523a0677e9 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Wed, 22 Jan 2025 17:58:35 +0300 Subject: [PATCH 18/27] Changed Jenkinsfile for deb packages --- Jenkinsfile | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 137 insertions(+), 5 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 8ec20b6..fb128d2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,14 +3,14 @@ pipeline { stages { stage('Tests and compiling binaries') { when { - expression { env.CHANGE_BRANCH?.startsWith('feature/') } + expression { env.CHANGE_BRANCH?.startsWith('feature/') || env.CHANGE_BRANCH?.startsWith('rc') } } steps { script { echo "Building and running tests in Docker for feature branch..." try { - def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/x86/" - def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv/" + def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/amd64" + def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv64" sh "mkdir -p ${targetDirAmd}" sh "mkdir -p ${targetDirRisc}" @@ -39,13 +39,108 @@ pipeline { } } + stage('Calculate Install Size') { + when { + expression { env.CHANGE_BRANCH?.startsWith('rc') } + } + steps { + script { + echo "Calculating installation size for rc branch..." + def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/amd64" + def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv64" + + def installSizeAmd = sh(script: "du -s --block-size=1024 ${targetDirAmd} | awk '{print \$1}'", returnStdout: true).trim() + def installSizeRisc = sh(script: "du -s --block-size=1024 ${targetDirRisc} | awk '{print \$1}'", returnStdout: true).trim() + + env.INSTALL_SIZE_AMD = installSizeAmd + env.INSTALL_SIZE_RISC = installSizeRisc + + echo "Installation size for amd64: ${env.INSTALL_SIZE_AMD} kB" + echo "Installation size for riscv64: ${env.INSTALL_SIZE_RISC} kB" + } + } + } + + stage('Create Deb Packages') { + when { + expression { env.CHANGE_BRANCH?.startsWith('rc') } + } + steps { + script { + echo "Creating deb packages for rc branch..." + + def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/amd64" + def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv64" + def packageName = "noxis" + def version = sh(script: "git describe --tags --always", returnStdout: true).trim() + def createDebPackage = { arch, binDir, targetDir, installSize -> + echo "Creating deb package for ${arch}..." + + sh """ + mkdir -p ${targetDir}/package/DEBIAN + mkdir -p ${targetDir}/package/usr/local/enode/${packageName} + mkdir -p ${targetDir}/package/usr/bin + mkdir -p ${targetDir}/package/etc/enode + mkdir -p ${targetDir}/package/lib/systemd/system + + cp ${binDir}/noxis-cli ${targetDir}/package/usr/local/enode/${packageName}/ + cp ${binDir}/noxis-rs ${targetDir}/package/usr/local/enode/${packageName}/ + cp ${binDir}/settings.json ${targetDir}/package/etc/enode/ + + cat > ${targetDir}/package/DEBIAN/control < +Description: Noxis Agent Linux +Installed-Size: ${installSize} +EOF + + chmod +x ${targetDir}/package/usr/local/enode/${packageName}/noxis-cli + chmod +x ${targetDir}/package/usr/local/enode/${packageName}/noxis-rs + + cat > ${targetDir}/package/DEBIAN/postinst < ${targetDir}/package/lib/systemd/system/${packageName}.service < Date: Wed, 22 Jan 2025 18:08:10 +0300 Subject: [PATCH 19/27] cicd check --- noxis-rs/src/main.rs | 5 ----- noxis-rs/src/options/config.rs | 1 - 2 files changed, 6 deletions(-) diff --git a/noxis-rs/src/main.rs b/noxis-rs/src/main.rs index 556521e..29886c8 100644 --- a/noxis-rs/src/main.rs +++ b/noxis-rs/src/main.rs @@ -18,11 +18,6 @@ use options::preboot::PrebootParams; #[tokio::main(flavor = "multi_thread")] async fn main() -> anyhow::Result<()>{ let preboot = Arc::new(PrebootParams::parse().validate()?); - - // if let Err(_) = preboot { - // return; - // } - // let preboot = Arc::new(preboot); let _ = setup_logger(); diff --git a/noxis-rs/src/options/config.rs b/noxis-rs/src/options/config.rs index ceb8136..d9451b9 100644 --- a/noxis-rs/src/options/config.rs +++ b/noxis-rs/src/options/config.rs @@ -7,7 +7,6 @@ use std::os::unix::process::CommandExt; use std::process::Command; use std::sync::Arc; use std::{env, fs}; -// use std::fmt::format; use super::preboot::PrebootParams; use tokio::time::{Duration, sleep}; -- 2.40.1 From 504bc7df84171b42bf5899460159672950b2b8cf Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Wed, 22 Jan 2025 18:27:06 +0300 Subject: [PATCH 20/27] Changed version getting --- Jenkinsfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index fb128d2..57f612f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -72,8 +72,7 @@ pipeline { def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/amd64" def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv64" def packageName = "noxis" - def version = sh(script: "git describe --tags --always", returnStdout: true).trim() - def createDebPackage = { arch, binDir, targetDir, installSize -> + def version = sh(script: "git describe --tags --always $(git rev-list --tags --max-count=1 --branches=rc)", returnStdout: true).trim() def createDebPackage = { arch, binDir, targetDir, installSize -> echo "Creating deb package for ${arch}..." sh """ @@ -175,8 +174,8 @@ EOF echo "Uploading deb packages using sshPut..." - sshPut remote: remote, from: "${env.WORKSPACE}/rc/amd64", into: "/home/user/repo/debs/" - sshPut remote: remote, from: "${env.WORKSPACE}/rc/riscv64", into: "/home/user/repo/debs/" + sshPut remote: remote, from: "${env.WORKSPACE}/rc/amd64/*", into: "/home/user/repo/debs/" + sshPut remote: remote, from: "${env.WORKSPACE}/rc/riscv64/*", into: "/home/user/repo/debs/" echo "Running repository update commands via sshCommand..." -- 2.40.1 From 8174affa510bd484b7293c2754f748f525160ec2 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Wed, 22 Jan 2025 18:33:16 +0300 Subject: [PATCH 21/27] Changed version getting2 --- Jenkinsfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 57f612f..30e22be 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -72,7 +72,8 @@ pipeline { def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/amd64" def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv64" def packageName = "noxis" - def version = sh(script: "git describe --tags --always $(git rev-list --tags --max-count=1 --branches=rc)", returnStdout: true).trim() def createDebPackage = { arch, binDir, targetDir, installSize -> + def version = sh(script: "git describe --tags --abbrev=0)", returnStdout: true).trim() + def createDebPackage = { arch, binDir, targetDir, installSize -> echo "Creating deb package for ${arch}..." sh """ -- 2.40.1 From c23c437abbd5e6f92a2b8d2625dac78a168f20f2 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Wed, 22 Jan 2025 18:39:02 +0300 Subject: [PATCH 22/27] Changed version getting3 --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 30e22be..6d7036f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -72,7 +72,7 @@ pipeline { def targetDirAmd = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/amd64" def targetDirRisc = "${env.WORKSPACE}/${env.CHANGE_BRANCH}/riscv64" def packageName = "noxis" - def version = sh(script: "git describe --tags --abbrev=0)", returnStdout: true).trim() + def version = sh(script: "git describe --tags --abbrev=0", returnStdout: true).trim() def createDebPackage = { arch, binDir, targetDir, installSize -> echo "Creating deb package for ${arch}..." -- 2.40.1 From fb3db6272878873b78be16197494fdd9aa2733bb Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Thu, 23 Jan 2025 11:36:57 +0300 Subject: [PATCH 23/27] Changed post logic of pipeline --- Jenkinsfile | 85 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 31 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6d7036f..2cdee08 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -130,6 +130,9 @@ EOF createDebPackage("amd64", targetDirAmd, env.WORKSPACE, env.INSTALL_SIZE_AMD) createDebPackage("riscv64", targetDirRisc, env.WORKSPACE, env.INSTALL_SIZE_RISC) + + env.DEB_PATH_AMD64 = "${env.WORKSPACE}/rc/amd64/${packageName}_${version}_amd64.deb" + env.DEB_PATH_RISCV64 = "${env.WORKSPACE}/rc/riscv64/${packageName}_${version}_riscv64.deb" } } } @@ -157,13 +160,14 @@ EOF } } } + stage('Upload Debs to Repository') { when { expression { env.CHANGE_BRANCH?.startsWith('rc') } } steps { script { - echo "Uploading deb packag1es to remote repository..." + echo "Uploading deb packages to remote repository..." withCredentials([usernamePassword(credentialsId: 'prod', passwordVariable: 'SSH_PASS', usernameVariable: 'SSH_USER')]) { def remote = [:] @@ -174,47 +178,66 @@ EOF remote.allowAnyHosts = true echo "Uploading deb packages using sshPut..." - - sshPut remote: remote, from: "${env.WORKSPACE}/rc/amd64/*", into: "/home/user/repo/debs/" - sshPut remote: remote, from: "${env.WORKSPACE}/rc/riscv64/*", into: "/home/user/repo/debs/" + sshPut remote: remote, from: "${env.DEB_PATH_AMD64}", into: "/home/user/repo/debs/" + sshPut remote: remote, from: "${env.DEB_PATH_RISCV64}", into: "/home/user/repo/debs/" echo "Running repository update commands via sshCommand..." - sshCommand remote: remote, command: """ export DEBIAN_FRONTEND=noninteractive cd /home/user/repo/debs/ - reprepro --priority optional --section utils includedeb stable *.deb + for deb in *.deb; do + reprepro --priority optional --section utils includedeb stable "$deb" + done rm -f *.deb """ echo "Deb packages successfully uploaded and added to the repository!" } - sh "rm -rf ${env.WORKSPACE}/package/" - sh "rm -rf ${env.WORKSPACE}/rc/" - } - } - } - - stage('Merge Pull Request') { - when { - expression { env.CHANGE_BRANCH?.startsWith('rc') } - } - steps { - script { - echo "Attempting to merge PR ${env.CHANGE_ID} using credentials ..." - withCredentials([usernamePassword(credentialsId: 'Jenkins creds', usernameVariable: 'GITEA_USER', passwordVariable: 'GITEA_PASS')]) { - def prId = env.CHANGE_ID - sh """ - curl -X POST \ - -u "${GITEA_USER}:${GITEA_PASS}" \ - -H "Content-Type: application/json" \ - -d '{"Do":"merge"}' \ - http://git.entcor/api/v1/repos/VladislavD/runner-rs/pulls/${prId}/merge - """ - echo "PR ${prId} merged successfully!" - } } } } } -} + + post { + always { + script { + echo "Cleaning up workspace..." + try { + if (fileExists("${env.WORKSPACE}/package/")) { + sh "rm -rf ${env.WORKSPACE}/package/" + } + if (fileExists("${env.WORKSPACE}/rc/")) { + sh "rm -rf ${env.WORKSPACE}/rc/" + } + } catch (Exception e) { + echo "Failed to clean up workspace: ${e}" + } + } + } + success { + script { + when { + expression { env.CHANGE_BRANCH?.startsWith('rc') } + } + echo "Attempting to merge PR ${env.CHANGE_ID} into master..." + withCredentials([usernamePassword(credentialsId: 'Jenkins creds', usernameVariable: 'GITEA_USER', passwordVariable: 'GITEA_PASS')]) { + def prId = env.CHANGE_ID + sh """ + curl -X POST \ + -u "${GITEA_USER}:${GITEA_PASS}" \ + -H "Content-Type: application/json" \ + -d '{"Do":"merge"}' \ + http://git.entcor/api/v1/repos/VladislavD/runner-rs/pulls/${prId}/merge + """ + echo "PR ${prId} merged successfully into master!" + } + } + } + failure { + echo "Pipeline failed. Check the logs for details." + } + aborted { + echo "Pipeline was aborted." + } + } +} \ No newline at end of file -- 2.40.1 From 35dbce562ea515482147a4a1fbea1b6e37e567d3 Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Thu, 23 Jan 2025 11:54:41 +0300 Subject: [PATCH 24/27] Changed Gitea creds --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2cdee08..45f341a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -220,7 +220,7 @@ EOF expression { env.CHANGE_BRANCH?.startsWith('rc') } } echo "Attempting to merge PR ${env.CHANGE_ID} into master..." - withCredentials([usernamePassword(credentialsId: 'Jenkins creds', usernameVariable: 'GITEA_USER', passwordVariable: 'GITEA_PASS')]) { + withCredentials([usernamePassword(credentialsId: 'gitea_creds', usernameVariable: 'GITEA_USER', passwordVariable: 'GITEA_PASS')]) { def prId = env.CHANGE_ID sh """ curl -X POST \ -- 2.40.1 From abafa99e0e7624b513ec3d0c17684e3ec29d412e Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Thu, 23 Jan 2025 12:17:42 +0300 Subject: [PATCH 25/27] Changed prod creds --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 45f341a..4bf8940 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -186,7 +186,7 @@ EOF export DEBIAN_FRONTEND=noninteractive cd /home/user/repo/debs/ for deb in *.deb; do - reprepro --priority optional --section utils includedeb stable "$deb" + reprepro -b /var/www/deb/debian/ includedeb stable $deb done rm -f *.deb """ -- 2.40.1 From 3d179713a89867fea8ed7b68e7289b9df4b0436f Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Thu, 23 Jan 2025 12:28:16 +0300 Subject: [PATCH 26/27] Changed logic post deleting --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4bf8940..3edf690 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -29,7 +29,6 @@ pipeline { sh "docker cp e-monitor:/usr/src/kii/target/riscv64gc-unknown-linux-gnu/release/noxis-cli ${targetDirRisc}" sh "docker cp e-monitor:/usr/src/kii/target/riscv64gc-unknown-linux-gnu/release/noxis-rs ${targetDirRisc}" - sh "docker stop e-monitor && docker rm e-monitor" echo "Tests passed successfully and binaries were extracted!" } catch (Exception e) { echo "Tests failed during Docker run." @@ -209,6 +208,7 @@ EOF if (fileExists("${env.WORKSPACE}/rc/")) { sh "rm -rf ${env.WORKSPACE}/rc/" } + sh "docker stop e-monitor && docker rm e-monitor" } catch (Exception e) { echo "Failed to clean up workspace: ${e}" } -- 2.40.1 From b425b17d25c50fdae28b9c69238565aad583dcfa Mon Sep 17 00:00:00 2001 From: yuobrezkov Date: Thu, 23 Jan 2025 12:36:22 +0300 Subject: [PATCH 27/27] Disabled interpolation in Jenkinsfile for last stage --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3edf690..d3043e2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -181,14 +181,14 @@ EOF sshPut remote: remote, from: "${env.DEB_PATH_RISCV64}", into: "/home/user/repo/debs/" echo "Running repository update commands via sshCommand..." - sshCommand remote: remote, command: """ + sshCommand remote: remote, command: ''' export DEBIAN_FRONTEND=noninteractive cd /home/user/repo/debs/ for deb in *.deb; do reprepro -b /var/www/deb/debian/ includedeb stable $deb done rm -f *.deb - """ + ''' echo "Deb packages successfully uploaded and added to the repository!" } -- 2.40.1