From 8db61a7bbb2b15dfe1678228fead7efd98f6e705 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 22 Oct 2025 22:14:14 +0800 Subject: [PATCH] added set_base_dir for recording log, rsa keys --- Cargo.lock | 340 +++++++++++++++++++++++++++++++++++++- Cargo.toml | 3 + src/bin/punchnet/main.rs | 5 +- src/config/mod.rs | 24 +++ src/lib.rs | 4 +- src/network/async_main.rs | 2 +- src/network/node.rs | 11 +- 7 files changed, 376 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dca581e..ea8e2ae 100755 --- a/Cargo.lock +++ b/Cargo.lock @@ -59,12 +59,68 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + [[package]] name = "anyhow" version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +[[package]] +name = "ar" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d67af77d68a931ecd5cbd8a3b5987d63a1d1d1278f7f6a60ae33db485cdebb69" + [[package]] name = "arrayvec" version = "0.7.6" @@ -180,6 +236,44 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "cargo-deb" +version = "3.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3709056228ca1e8eaada532d2f205b16f8455b9af4f2da4e78bb1c7162aceb1a" +dependencies = [ + "anstream", + "anstyle", + "ar", + "cargo_toml", + "clap 4.5.50", + "elf", + "env_logger", + "glob", + "itertools 0.14.0", + "log", + "quick-error", + "rayon", + "regex", + "serde", + "serde_json", + "tar", + "tempfile", + "toml", + "xz2", + "zopfli", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml", +] + [[package]] name = "cbc" version = "0.1.2" @@ -237,12 +331,45 @@ dependencies = [ "ansi_term", "atty", "bitflags 1.3.2", - "strsim", + "strsim 0.8.0", "textwrap", "unicode-width", "vec_map", ] +[[package]] +name = "clap" +version = "4.5.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.5.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_lex" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + [[package]] name = "const-oid" version = "0.9.6" @@ -297,6 +424,25 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-queue" version = "0.3.12" @@ -419,6 +565,34 @@ dependencies = [ "serde", ] +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "env_filter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "log", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -467,6 +641,18 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "filetime" +version = "0.2.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.60.2", +] + [[package]] name = "find-msvc-tools" version = "0.1.4" @@ -632,6 +818,12 @@ dependencies = [ "wasip2", ] +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "hashbrown" version = "0.14.5" @@ -874,6 +1066,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + [[package]] name = "itertools" version = "0.12.1" @@ -883,6 +1081,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -991,6 +1198,17 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[package]] +name = "lzma-sys" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "md-5" version = "0.10.6" @@ -1155,6 +1373,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + [[package]] name = "parking_lot" version = "0.12.5" @@ -1342,7 +1566,7 @@ checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", "heck 0.5.0", - "itertools", + "itertools 0.12.1", "log", "multimap", "once_cell", @@ -1362,7 +1586,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools", + "itertools 0.12.1", "proc-macro2", "quote", "syn 2.0.107", @@ -1381,6 +1605,7 @@ dependencies = [ name = "punchnet" version = "1.0.0" dependencies = [ + "cargo-deb", "crc", "crc32fast", "dashmap 6.1.0", @@ -1402,6 +1627,12 @@ dependencies = [ "wintun", ] +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quote" version = "1.0.41" @@ -1447,6 +1678,26 @@ dependencies = [ "getrandom 0.2.16", ] +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.5.18" @@ -1552,7 +1803,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdlan-sn-rs" version = "0.1.0" -source = "git+https://gitea.s5s8.com/punchnet/sdlan-rs.git#a5535d66f3ea6113f99afff4a2b8cba49af1726d" +source = "git+https://gitea.s5s8.com/punchnet/sdlan-rs.git#b58b18d9c31dea900f82a5a8d5d8d29a5b1aa47b" dependencies = [ "aes", "byteorder", @@ -1628,6 +1879,15 @@ dependencies = [ "syn 2.0.107", ] +[[package]] +name = "serde_spanned" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +dependencies = [ + "serde_core", +] + [[package]] name = "sha1" version = "0.10.6" @@ -1684,6 +1944,12 @@ dependencies = [ "rand_core", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "slab" version = "0.4.11" @@ -1948,13 +2214,19 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "structopt" version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" dependencies = [ - "clap", + "clap 2.34.0", "lazy_static", "structopt-derive", ] @@ -2011,6 +2283,16 @@ dependencies = [ "syn 2.0.107", ] +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", +] + [[package]] name = "tempfile" version = "3.23.0" @@ -2179,6 +2461,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", +] + [[package]] name = "toml_datetime" version = "0.7.3" @@ -2209,6 +2506,12 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_writer" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" + [[package]] name = "tracing" version = "0.1.41" @@ -2354,6 +2657,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.18.1" @@ -2835,6 +3144,15 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +[[package]] +name = "xz2" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" +dependencies = [ + "lzma-sys", +] + [[package]] name = "yoke" version = "0.8.0" @@ -2938,3 +3256,15 @@ dependencies = [ "quote", "syn 2.0.107", ] + +[[package]] +name = "zopfli" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] diff --git a/Cargo.toml b/Cargo.toml index 3312be8..a69dd69 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,3 +32,6 @@ wintun = "0.4.0" [features] tun = [] + +[build-dependencies] +cargo-deb = "3.6.2" diff --git a/src/bin/punchnet/main.rs b/src/bin/punchnet/main.rs index 1ea15a8..3072a4b 100755 --- a/src/bin/punchnet/main.rs +++ b/src/bin/punchnet/main.rs @@ -1,5 +1,7 @@ +use punchnet::get_base_dir; use punchnet::get_edge; use punchnet::run_sdlan; +use punchnet::set_base_dir; use punchnet::CommandLine; use punchnet::CommandLineInput; use sdlan_sn_rs::log; @@ -19,7 +21,8 @@ async fn main() { // true, // true, // ); - let _guard = log::init_log(); + set_base_dir("/usr/local/punchnet"); + let _guard = log::init_log(&format!("{}/.output", get_base_dir())); let cmd = CommandLineInput::from_args(); diff --git a/src/config/mod.rs b/src/config/mod.rs index 65b9b66..747ef47 100755 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -1,3 +1,6 @@ +use std::{fs, os}; + +use once_cell::sync::OnceCell; use sdlan_sn_rs::utils::Mac; pub const REGISTER_INTERVAL: u8 = 3; @@ -11,3 +14,24 @@ pub const MULTICAST_PORT: u16 = 1970; pub const TCP_PING_TIME: u64 = 7; pub const NULL_MAC: Mac = [0, 0, 0, 0, 0, 0]; + +pub static BASE_DIR: OnceCell = OnceCell::new(); + +pub fn get_base_dir() -> &'static str { + match BASE_DIR.get() { + Some(data) => { + data + } + None => { + "." + } + } +} + +pub fn set_base_dir(base_dir: &str) { + fs::create_dir_all(base_dir).unwrap(); + let base = base_dir.trim_end_matches("/"); + if let Err(e) = BASE_DIR.set(base.to_owned()) { + println!("failed to set base dir"); + } +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index ea667a1..5b0a366 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,8 @@ use tokio_util::sync::CancellationToken; use tracing::{debug, error}; pub use utils::{CommandLine, CommandLineInput}; +pub use config::{get_base_dir, set_base_dir}; + use sdlan_sn_rs::{ peer::SdlanSock, utils::{create_or_load_uuid, get_sdlan_sock_from_socketaddr, Result, SDLanError}, @@ -38,7 +40,7 @@ pub async fn run_sdlan( // start_stop_receiver: Receiver, ) -> Result<()> { let (start_stop_sender, start_stop_chan) = channel(20); - let edge_uuid = create_or_load_uuid("")?; + let edge_uuid = create_or_load_uuid(&format!("{}/.id", get_base_dir()))?; let node_conf = parse_config(edge_uuid, &args).await?; init_arp(); diff --git a/src/network/async_main.rs b/src/network/async_main.rs index 867ae7d..9ae80b5 100755 --- a/src/network/async_main.rs +++ b/src/network/async_main.rs @@ -251,7 +251,7 @@ pub async fn async_main( // let _ = PidRecorder::new(".pid"); // // gen public key - gen_rsa_keys(".client"); + // gen_rsa_keys(".client"); // let mut pubkey = String::new(); // File::open(".client/id_rsa.pub")?.read_to_string(&mut pubkey)?; // let privatekey = load_private_key_file(".client/id_rsa")?; diff --git a/src/network/node.rs b/src/network/node.rs index 92bf237..a5deabc 100755 --- a/src/network/node.rs +++ b/src/network/node.rs @@ -10,6 +10,7 @@ use tokio::sync::mpsc::Sender; use tokio::sync::oneshot; use tracing::{debug, error}; +use crate::get_base_dir; use crate::pb::{ encode_to_tcp_message, encode_to_udp_message, SdlEmpty, SdlStunProbe, SdlStunProbeReply, }; @@ -37,17 +38,17 @@ pub async fn init_edge( start_stop: Sender, mtu: u32, ) -> Result<()> { - let _ = PidRecorder::new(".pid"); - // gen public key - gen_rsa_keys(".client"); + let rsa_path = format!("{}/.client", get_base_dir()); + gen_rsa_keys(&rsa_path); let mut pubkey = String::new(); - File::open(".client/id_rsa.pub") + // File::open(".client/id_rsa.pub") + File::open(&format!("{}/id_rsa.pub", rsa_path)) .await? .read_to_string(&mut pubkey) .await?; - let privatekey = load_private_key_file(".client/id_rsa")?; + let privatekey = load_private_key_file(&format!("{}/id_rsa", rsa_path))?; // init sock // let edge_uuid = create_or_load_uuid("")?;