diff --git a/.cargo/config.toml b/.cargo/config.toml index 85f6d0a..d67b66e 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,12 +1,2 @@ [build] -target = "./x86_64-unknown-dragonos.json" - -[unstable] -build-std = ["core", "compiler_builtins", "alloc"] -build-std-features = ["compiler-builtins-mem"] - -[target.'cfg(target_os = "dragonos")'] -rustflags = [ - "-C", "target-feature=+crt-static", - "-C", "link-arg=-no-pie", -] \ No newline at end of file +target = "x86_64-unknown-linux-musl" diff --git a/.github/workflows/cache-toolchain.yml b/.github/workflows/cache-toolchain.yml index 86d9425..dda9532 100644 --- a/.github/workflows/cache-toolchain.yml +++ b/.github/workflows/cache-toolchain.yml @@ -37,4 +37,10 @@ jobs: rustup target add x86_64-unknown-none rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu rustup component add rustfmt + + rustup toolchain install nightly-2023-08-15-x86_64-unknown-linux-gnu + rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu + rustup target add x86_64-unknown-linux-musl --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu + rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu + cargo install dadk --version 0.1.2 \ No newline at end of file diff --git a/.github/workflows/standard-check.yml b/.github/workflows/standard-check.yml index eda3d5f..0216993 100644 --- a/.github/workflows/standard-check.yml +++ b/.github/workflows/standard-check.yml @@ -51,4 +51,4 @@ jobs: - name: Build check run: | - make all -j $(nproc) + make build-release -j $(nproc) diff --git a/.gitignore b/.gitignore index 5d8436c..69d643c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /target Cargo.lock /DragonReach +/install \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 5fd209e..a615e0e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,9 +3,5 @@ "./Cargo.toml", "./systemctl/Cargo.toml" ], - "rust-analyzer.check.overrideCommand": [ - "make", - "check" - ], - // "rust-analyzer.cargo.target": "x86_64-unknown-dragonos", + "rust-analyzer.checkOnSave": true } diff --git a/Cargo.toml b/Cargo.toml index 52778b1..162c888 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,20 +7,17 @@ edition = "2021" name = "DragonReach" path = "src/main.rs" +[[bin]] +name = "systemctl" +path = "systemctl/src/main.rs" + # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] hashbrown = "0.11" cfg-if = { version = "1.0"} - -[target.'cfg(target_os = "dragonos")'.dependencies] -drstd = {git = "https://github.com/DragonOS-Community/drstd.git", revision = "8b1e314e01"} -dragonos-dsc = { git = "https://git.mirrors.dragonos.org/DragonOS-Community/dragonos-dsc.git", rev = "aa61cb0109" } - -lazy_static = { version = "1.4.0", default-features = false, features = ["spin_no_std"] } - -[target.'cfg(not(target_os = "dragonos"))'.dependencies] lazy_static = { version = "1.4.0" } +libc = "0.2" [profile.release] panic = 'abort' diff --git a/Makefile b/Makefile index 6d327c0..49e715b 100644 --- a/Makefile +++ b/Makefile @@ -1,50 +1,37 @@ -export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static -export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup +# The toolchain we use. +# You can get it by running DragonOS' `tools/bootstrap.sh` +TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu" +RUSTFLAGS+="-C target-feature=+crt-static -C link-arg=-no-pie" -OUTPUT_DIR = $(DADK_BUILD_CACHE_DIR_DRAGONREACH_0_1_0) -REACH_ETC_DIR=$(OUTPUT_DIR)/etc/reach -REACH_BIN_DIR=$(OUTPUT_DIR)/bin/ -TMP_INSTALL_DIR=$(OUTPUT_DIR)/tmp_install +# 如果是在dadk中编译,那么安装到dadk的安装目录中 +INSTALL_DIR?=$(DADK_CURRENT_BUILD_DIR) +# 如果是在本地编译,那么安装到当前目录下的install目录中 +INSTALL_DIR?=./install -all: build build: - @$(MAKE) -C ./systemctl build - cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins build --target ./x86_64-unknown-dragonos.json --release + RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) build -install: - mkdir -p $(TMP_INSTALL_DIR) - mkdir -p $(REACH_ETC_DIR) - mkdir -p $(REACH_ETC_DIR)/system/ - mkdir -p $(REACH_BIN_DIR) - mkdir -p $(REACH_ETC_DIR)/ipc/ - - cp ./parse_test/shell.service $(REACH_ETC_DIR)/system/shell.service - - cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins install --target $(TARGET) --path . --root $(TMP_INSTALL_DIR) - mv $(TMP_INSTALL_DIR)/bin/DragonReach $(REACH_BIN_DIR)/DragonReach - - cargo -Z build-std=core,alloc,compiler_builtins install --target $(TARGET) --path ./systemctl --root $(TMP_INSTALL_DIR) - mv $(TMP_INSTALL_DIR)/bin/systemctl $(REACH_BIN_DIR)/systemctl - - rm -rf $(TMP_INSTALL_DIR) - -build-linux: - @$(MAKE) -C ./systemctl build-linux - cargo -Z build-std=core,alloc,compiler_builtins build --target x86_64-unknown-linux-gnu +run-dragonreach: + RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) run --bin DragonReach clean: - cargo clean - @$(MAKE) -C ./systemctl clean + RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) clean + +build-release: + RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) build --release + +clean-release: + RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) clean --release fmt: - cargo fmt - @$(MAKE) -C ./systemctl fmt + RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) fmt fmt-check: - cargo fmt --check - @$(MAKE) -C ./systemctl fmt-check + RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) fmt --check -check: - cargo -Z build-std=core,alloc,compiler_builtins check --workspace --message-format=json --target ./x86_64-unknown-dragonos.json - @$(MAKE) -C ./systemctl check +.PHONY: install +install: + mkdir -p $(INSTALL_DIR)/etc/reach/system + cp ./parse_test/shell.service $(INSTALL_DIR)/etc/reach/system/shell.service + RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) install --path . --no-track --root $(INSTALL_DIR) --force diff --git a/src/error/mod.rs b/src/error/mod.rs index 842c79f..216c63b 100644 --- a/src/error/mod.rs +++ b/src/error/mod.rs @@ -1,8 +1,6 @@ pub mod parse_error; pub mod runtime_error; -use std::string::String; - pub trait ErrorFormat { fn error_format(&self) -> String; } diff --git a/src/error/parse_error/mod.rs b/src/error/parse_error/mod.rs index 8cf3f8c..555c5d8 100644 --- a/src/error/parse_error/mod.rs +++ b/src/error/parse_error/mod.rs @@ -1,7 +1,3 @@ -use std::format; -use std::string::String; -use std::string::ToString; - use super::ErrorFormat; /// 解析错误,错误信息应该包括文件名以及行号 #[repr(i32)] diff --git a/src/error/runtime_error/mod.rs b/src/error/runtime_error/mod.rs index 043e504..3ad0b21 100644 --- a/src/error/runtime_error/mod.rs +++ b/src/error/runtime_error/mod.rs @@ -1,8 +1,5 @@ use super::ErrorFormat; -use std::format; -use std::string::String; - #[derive(Debug)] pub enum RuntimeErrorType { //启动失败 diff --git a/src/executor/dep_graph/mod.rs b/src/executor/dep_graph/mod.rs index e86a79c..c9d0dea 100644 --- a/src/executor/dep_graph/mod.rs +++ b/src/executor/dep_graph/mod.rs @@ -1,6 +1,4 @@ -use std::sync::Arc; -use std::sync::Mutex; -use std::vec::Vec; +use std::sync::{Arc, Mutex}; use crate::manager::UnitManager; use crate::{ diff --git a/src/executor/service_executor/mod.rs b/src/executor/service_executor/mod.rs index 2063218..3a0da99 100644 --- a/src/executor/service_executor/mod.rs +++ b/src/executor/service_executor/mod.rs @@ -1,3 +1,8 @@ +use std::{ + process::{Command, Stdio}, + time::Duration, +}; + use crate::{ error::runtime_error::{RuntimeError, RuntimeErrorType}, manager::{timer_manager::TimerManager, UnitManager}, @@ -8,12 +13,6 @@ use crate::{ }, }; -use std::process::Command; -use std::process::Stdio; -use std::time::Duration; -use std::vec::Vec; -use std::{eprint, eprintln}; - use super::{Executor, ExitStatus}; pub struct ServiceExecutor; diff --git a/src/main.rs b/src/main.rs index 179584e..8db196d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,4 @@ -#![no_std] -#![no_main] -#![feature(slice_pattern)] -#![feature(fn_traits)] - -#[cfg(target_os = "dragonos")] -extern crate drstd as std; - -extern crate hashbrown; +#![allow(non_snake_case)] mod contants; mod error; @@ -18,15 +10,9 @@ mod task; mod time; mod unit; -use std::{eprint, eprintln}; - -use std::string::ToString; -use std::vec::Vec; - use error::ErrorFormat; use executor::Executor; -use manager::timer_manager::TimerManager; -use manager::Manager; +use manager::{timer_manager::TimerManager, Manager}; use parse::UnitParser; use systemctl::listener::Systemctl; @@ -34,7 +20,6 @@ pub struct FileDescriptor(usize); const DRAGON_REACH_UNIT_DIR: &'static str = "/etc/reach/system/"; -#[no_mangle] fn main() { // 初始化 Systemctl::init(); @@ -46,9 +31,8 @@ fn main() { if let Ok(entry) = entry { if let Ok(file_type) = entry.file_type() { if file_type.is_file() { - let filename = entry.file_name(); - let filename = filename.to_str().unwrap(); - units_file_name.push(filename.to_string()); + let filename = entry.file_name().to_str().unwrap().to_string(); + units_file_name.push(filename); } } } diff --git a/src/manager/ctl_manager/mod.rs b/src/manager/ctl_manager/mod.rs index f752c3d..3e3509f 100644 --- a/src/manager/ctl_manager/mod.rs +++ b/src/manager/ctl_manager/mod.rs @@ -1,18 +1,13 @@ use lazy_static::lazy_static; use std::fs::File; use std::os::fd::FromRawFd; -use std::string::String; -use std::string::ToString; -use std::sync::Arc; -use std::{eprint, eprintln, format}; -use std::{libc, print, println}; -use std::{sync::Mutex, vec::Vec}; +use std::sync::{Arc, Mutex}; use crate::error::runtime_error::RuntimeError; use crate::error::runtime_error::RuntimeErrorType; use crate::error::ErrorFormat; use crate::parse::parse_util::UnitParseUtil; -use crate::systemctl::ctl_parser::Pattern; +use crate::systemctl::ctl_parser::{CommandOperation, Pattern}; use crate::systemctl::ctl_path; use crate::systemctl::listener::Command; use crate::unit::Unit; @@ -32,82 +27,76 @@ impl CtlManager { pub fn exec_ctl(cmd: Command) -> Result<(), RuntimeError> { // TODO:目前假设一个时刻只有一个进程使用systemdctl,后续应该使用DBus等更灵活的进程通信方式 match cmd.operation { - crate::systemctl::ctl_parser::CommandOperation::ListUnits => { - Self::list_unit(cmd.patterns) - } - crate::systemctl::ctl_parser::CommandOperation::Start => Self::start(cmd.args.unwrap()), - crate::systemctl::ctl_parser::CommandOperation::Restart => { - Self::restart(cmd.args.unwrap(), false) - } - crate::systemctl::ctl_parser::CommandOperation::Stop => Self::stop(cmd.args.unwrap()), - crate::systemctl::ctl_parser::CommandOperation::Reboot => Ok(Self::reboot()), - crate::systemctl::ctl_parser::CommandOperation::ListSockets => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ListTimers => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Reload => todo!(), - crate::systemctl::ctl_parser::CommandOperation::TryRestart => { - Self::restart(cmd.args.unwrap(), true) - } - crate::systemctl::ctl_parser::CommandOperation::ReloadOrRestart => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ReloadOrTryRestart => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Isolate => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Kill => todo!(), - crate::systemctl::ctl_parser::CommandOperation::IsActive => { + CommandOperation::ListUnits => Self::list_unit(cmd.patterns), + CommandOperation::Start => Self::start(cmd.args.unwrap()), + CommandOperation::Restart => Self::restart(cmd.args.unwrap(), false), + CommandOperation::Stop => Self::stop(cmd.args.unwrap()), + CommandOperation::Reboot => Ok(Self::reboot()), + CommandOperation::ListSockets => todo!(), + CommandOperation::ListTimers => todo!(), + CommandOperation::Reload => todo!(), + CommandOperation::TryRestart => Self::restart(cmd.args.unwrap(), true), + CommandOperation::ReloadOrRestart => todo!(), + CommandOperation::ReloadOrTryRestart => todo!(), + CommandOperation::Isolate => todo!(), + CommandOperation::Kill => todo!(), + CommandOperation::IsActive => { let mut patterns = cmd.patterns.clone(); patterns.push(Pattern::State(UnitState::Active)); Self::list_unit(patterns) } - crate::systemctl::ctl_parser::CommandOperation::IsFailed => { + CommandOperation::IsFailed => { let mut patterns = cmd.patterns.clone(); patterns.push(Pattern::State(UnitState::Failed)); Self::list_unit(patterns) } - crate::systemctl::ctl_parser::CommandOperation::Status => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Show => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Cat => todo!(), - crate::systemctl::ctl_parser::CommandOperation::SetProperty => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Help => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ResetFailed => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ListDependencies => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ListUnitFiles => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Enable => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Disable => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Reenable => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Preset => todo!(), - crate::systemctl::ctl_parser::CommandOperation::PresetAll => todo!(), - crate::systemctl::ctl_parser::CommandOperation::IsEnabled => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Mask => todo!(), - crate::systemctl::ctl_parser::CommandOperation::UnMask => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Link => todo!(), - crate::systemctl::ctl_parser::CommandOperation::AddWants => todo!(), - crate::systemctl::ctl_parser::CommandOperation::AddRequires => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Edit => todo!(), - crate::systemctl::ctl_parser::CommandOperation::GetDefault => todo!(), - crate::systemctl::ctl_parser::CommandOperation::SetDefault => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ListMachines => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ListJobs => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Cancel => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Snapshot => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Delete => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ShowEnvironment => todo!(), - crate::systemctl::ctl_parser::CommandOperation::SetEnvironment => todo!(), - crate::systemctl::ctl_parser::CommandOperation::UnsetEnvironment => todo!(), - crate::systemctl::ctl_parser::CommandOperation::ImportEnvironment => todo!(), - crate::systemctl::ctl_parser::CommandOperation::DeamonReload => todo!(), - crate::systemctl::ctl_parser::CommandOperation::DeamonReexec => todo!(), - crate::systemctl::ctl_parser::CommandOperation::IsSystemRunning => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Default => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Rescue => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Emergency => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Halt => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Poweroff => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Kexec => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Exit => todo!(), - crate::systemctl::ctl_parser::CommandOperation::SwitchRoot => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Suspend => todo!(), - crate::systemctl::ctl_parser::CommandOperation::Hibernate => todo!(), - crate::systemctl::ctl_parser::CommandOperation::HybridSleep => todo!(), - crate::systemctl::ctl_parser::CommandOperation::UnSupported => todo!(), - crate::systemctl::ctl_parser::CommandOperation::None => { + CommandOperation::Status => todo!(), + CommandOperation::Show => todo!(), + CommandOperation::Cat => todo!(), + CommandOperation::SetProperty => todo!(), + CommandOperation::Help => todo!(), + CommandOperation::ResetFailed => todo!(), + CommandOperation::ListDependencies => todo!(), + CommandOperation::ListUnitFiles => todo!(), + CommandOperation::Enable => todo!(), + CommandOperation::Disable => todo!(), + CommandOperation::Reenable => todo!(), + CommandOperation::Preset => todo!(), + CommandOperation::PresetAll => todo!(), + CommandOperation::IsEnabled => todo!(), + CommandOperation::Mask => todo!(), + CommandOperation::UnMask => todo!(), + CommandOperation::Link => todo!(), + CommandOperation::AddWants => todo!(), + CommandOperation::AddRequires => todo!(), + CommandOperation::Edit => todo!(), + CommandOperation::GetDefault => todo!(), + CommandOperation::SetDefault => todo!(), + CommandOperation::ListMachines => todo!(), + CommandOperation::ListJobs => todo!(), + CommandOperation::Cancel => todo!(), + CommandOperation::Snapshot => todo!(), + CommandOperation::Delete => todo!(), + CommandOperation::ShowEnvironment => todo!(), + CommandOperation::SetEnvironment => todo!(), + CommandOperation::UnsetEnvironment => todo!(), + CommandOperation::ImportEnvironment => todo!(), + CommandOperation::DeamonReload => todo!(), + CommandOperation::DeamonReexec => todo!(), + CommandOperation::IsSystemRunning => todo!(), + CommandOperation::Default => todo!(), + CommandOperation::Rescue => todo!(), + CommandOperation::Emergency => todo!(), + CommandOperation::Halt => todo!(), + CommandOperation::Poweroff => todo!(), + CommandOperation::Kexec => todo!(), + CommandOperation::Exit => todo!(), + CommandOperation::SwitchRoot => todo!(), + CommandOperation::Suspend => todo!(), + CommandOperation::Hibernate => todo!(), + CommandOperation::HybridSleep => todo!(), + CommandOperation::UnSupported => todo!(), + CommandOperation::None => { println!("No such command!"); return Err(RuntimeError::new(RuntimeErrorType::InvalidInput)); } @@ -167,10 +156,7 @@ impl CtlManager { } pub fn reboot() { - #[cfg(target_os = "dragonos")] - unsafe { - dsc::syscall!(SYS_REBOOT) - }; + unsafe { libc::syscall(libc::SYS_reboot, 0, 0, 0, 0, 0, 0) }; } pub fn restart(names: Vec, is_try: bool) -> Result<(), RuntimeError> { diff --git a/src/manager/mod.rs b/src/manager/mod.rs index ba0c6c3..82dbdb0 100644 --- a/src/manager/mod.rs +++ b/src/manager/mod.rs @@ -1,5 +1,3 @@ -use std::{eprint, eprintln, vec::Vec}; - pub mod ctl_manager; pub mod timer_manager; pub mod unit_manager; diff --git a/src/manager/timer_manager/mod.rs b/src/manager/timer_manager/mod.rs index a9a287d..dce6842 100644 --- a/src/manager/timer_manager/mod.rs +++ b/src/manager/timer_manager/mod.rs @@ -1,6 +1,7 @@ +use std::{sync::RwLock, time::Duration}; + use crate::{error::runtime_error::RuntimeError, time::timer::Timer}; use lazy_static::lazy_static; -use std::{boxed::Box, sync::RwLock, time::Duration, vec::Vec}; lazy_static! { // 管理全局计时器任务 diff --git a/src/manager/unit_manager/mod.rs b/src/manager/unit_manager/mod.rs index 90272d4..dac0a3a 100644 --- a/src/manager/unit_manager/mod.rs +++ b/src/manager/unit_manager/mod.rs @@ -1,11 +1,8 @@ -use std::hash::{Hash, Hasher}; use std::{ - collections::hash_map::DefaultHasher, - collections::vec_deque::VecDeque, - print, println, + collections::{hash_map::DefaultHasher, VecDeque}, + hash::{Hash, Hasher}, process::Child, sync::{Arc, Mutex, RwLock}, - vec::Vec, }; use crate::unit::Unit; diff --git a/src/parse/graph/mod.rs b/src/parse/graph/mod.rs index 958ed35..6ab25cb 100644 --- a/src/parse/graph/mod.rs +++ b/src/parse/graph/mod.rs @@ -1,12 +1,10 @@ +use std::io::BufRead; + use crate::{ error::parse_error::{ParseError, ParseErrorType}, unit::UnitType, }; -use std::io::BufRead; -use std::string::{String, ToString}; -use std::vec::Vec; - use super::UnitParser; pub struct GraphNode { diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 5c81441..1e27f51 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -1,3 +1,7 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use std::sync::{Arc, Mutex}; + use crate::error::parse_error::ParseErrorType; use crate::manager::UnitManager; use crate::unit::timer::TimerUnitAttr; @@ -10,13 +14,6 @@ use crate::{ use hashbrown::HashMap; use lazy_static::lazy_static; -use std::format; -use std::fs::File; -use std::io::{self, BufRead}; -use std::string::String; -use std::string::ToString; -use std::sync::{Arc, Mutex}; -use std::vec::Vec; use self::parse_service::ServiceParser; use self::parse_target::TargetParser; diff --git a/src/parse/parse_service/mod.rs b/src/parse/parse_service/mod.rs index ba24e1b..6cefcd5 100644 --- a/src/parse/parse_service/mod.rs +++ b/src/parse/parse_service/mod.rs @@ -4,8 +4,6 @@ use super::parse_util::UnitParseUtil; use crate::error::parse_error::ParseError; use crate::manager::UnitManager; -use std::string::ToString; - pub struct ServiceParser; impl ServiceParser { diff --git a/src/parse/parse_target/mod.rs b/src/parse/parse_target/mod.rs index 6ec222c..ae43c90 100644 --- a/src/parse/parse_target/mod.rs +++ b/src/parse/parse_target/mod.rs @@ -4,8 +4,6 @@ use super::parse_util::UnitParseUtil; use crate::error::parse_error::ParseError; use crate::manager::UnitManager; -use std::string::ToString; - pub struct TargetParser; impl TargetParser { diff --git a/src/parse/parse_util/mod.rs b/src/parse/parse_util/mod.rs index ee371ec..633f47f 100644 --- a/src/parse/parse_util/mod.rs +++ b/src/parse/parse_util/mod.rs @@ -1,3 +1,5 @@ +use std::{fs, io::BufRead, os::unix::fs::PermissionsExt, path::Path}; + use crate::{ contants::{AF_INET, AF_INET6, IPV4_MIN_MTU, IPV6_MIN_MTU, PRIO_MAX, PRIO_MIN}, error::{parse_error::ParseError, parse_error::ParseErrorType}, @@ -6,11 +8,6 @@ use crate::{ FileDescriptor, }; -use std::{ - fs, io::BufRead, os::unix::prelude::PermissionsExt, path::Path, string::String, - string::ToString, vec, vec::Vec, -}; - use super::{UnitParser, BASE_IEC, BASE_SI, SEC_UNIT_TABLE}; #[allow(dead_code)] @@ -691,7 +688,7 @@ impl UnitParseUtil { return false; } - ///// ## 通过文件名解析该Unit的类型 + /// ## 通过文件名解析该Unit的类型 pub fn parse_type(path: &str) -> UnitType { let ret: &str; if let Some(index) = path.rfind('.') { diff --git a/src/systemctl/ctl_parser/mod.rs b/src/systemctl/ctl_parser/mod.rs index 24191de..045bba5 100644 --- a/src/systemctl/ctl_parser/mod.rs +++ b/src/systemctl/ctl_parser/mod.rs @@ -3,10 +3,6 @@ use crate::parse::parse_util::UnitParseUtil; use crate::unit::{UnitState, UnitType}; use hashbrown::HashMap; use lazy_static::lazy_static; -use std::format; -use std::string::String; -use std::string::ToString; -use std::vec::Vec; use super::listener::Command; diff --git a/src/systemctl/listener/mod.rs b/src/systemctl/listener/mod.rs index f1bf8aa..ceab6c5 100644 --- a/src/systemctl/listener/mod.rs +++ b/src/systemctl/listener/mod.rs @@ -1,11 +1,9 @@ -use lazy_static::lazy_static; use std::fs::{self, File}; use std::io::Read; use std::os::fd::FromRawFd; -use std::string::String; use std::sync::{Arc, Mutex}; -use std::vec::Vec; -use std::{eprint, eprintln, libc}; + +use lazy_static::lazy_static; use crate::error::ErrorFormat; use crate::manager::ctl_manager::CtlManager; diff --git a/src/task/cmdtask/mod.rs b/src/task/cmdtask/mod.rs index 8642a24..75a0ece 100644 --- a/src/task/cmdtask/mod.rs +++ b/src/task/cmdtask/mod.rs @@ -1,4 +1,4 @@ -use std::{eprint, eprintln, print, process::Command, string::String, vec::Vec}; +use std::process::Command; use crate::{ error::runtime_error::{RuntimeError, RuntimeErrorType}, diff --git a/src/time/timer/mod.rs b/src/time/timer/mod.rs index c204a8d..16786fa 100644 --- a/src/time/timer/mod.rs +++ b/src/time/timer/mod.rs @@ -1,6 +1,4 @@ -use std::boxed::Box; use std::time::{Duration, Instant}; -use std::{print, println}; use crate::error::runtime_error::RuntimeError; diff --git a/src/unit/mod.rs b/src/unit/mod.rs index 9978589..f38c77b 100644 --- a/src/unit/mod.rs +++ b/src/unit/mod.rs @@ -1,6 +1,7 @@ -use std::format; - -use std::string::ToString; +use std::any::Any; +use std::fmt::Debug; +use std::sync::atomic::AtomicUsize; +use std::sync::atomic::Ordering; use crate::error::parse_error::ParseError; use crate::error::parse_error::ParseErrorType; @@ -10,20 +11,6 @@ use crate::executor::ExitStatus; use crate::parse::parse_util::UnitParseUtil; use crate::parse::Segment; -use std::any::Any; -use std::default::Default; -use std::fmt::Debug; -use std::marker::{Send, Sized, Sync}; - -use std::result::Result; -use std::result::Result::Err; -use std::result::Result::Ok; -use std::string::String; -use std::sync::atomic::AtomicUsize; -use std::sync::atomic::Ordering; - -use std::vec::Vec; - pub mod service; pub mod target; pub mod timer; diff --git a/src/unit/service/mod.rs b/src/unit/service/mod.rs index 9c4832a..01c371b 100644 --- a/src/unit/service/mod.rs +++ b/src/unit/service/mod.rs @@ -9,9 +9,6 @@ use crate::parse::parse_util::UnitParseUtil; use crate::parse::{Segment, SERVICE_UNIT_ATTR_TABLE}; use crate::task::cmdtask::CmdTask; -use std::string::{String, ToString}; - -use std::vec::Vec; #[derive(Clone, Debug)] pub struct ServiceUnit { unit_base: BaseUnit, diff --git a/src/unit/target/mod.rs b/src/unit/target/mod.rs index d80058e..f635f4b 100644 --- a/src/unit/target/mod.rs +++ b/src/unit/target/mod.rs @@ -5,8 +5,6 @@ use crate::parse::Segment; use core::result::Result::{self, Ok}; -use std::marker::{Send, Sized, Sync}; - #[derive(Debug, Clone, Default)] pub struct TargetUnit { unit_base: BaseUnit, diff --git a/systemctl/.cargo/config.toml b/systemctl/.cargo/config.toml deleted file mode 100644 index 013d467..0000000 --- a/systemctl/.cargo/config.toml +++ /dev/null @@ -1,12 +0,0 @@ -[build] -target = "../x86_64-unknown-dragonos.json" - -[unstable] -build-std = ["core", "compiler_builtins", "alloc"] -build-std-features = ["compiler-builtins-mem"] - -[target.'cfg(target_os = "dragonos")'] -rustflags = [ - "-C", "target-feature=+crt-static", - "-C", "link-arg=-no-pie", -] \ No newline at end of file diff --git a/systemctl/.gitignore b/systemctl/.gitignore index 869df07..a6f89c2 100644 --- a/systemctl/.gitignore +++ b/systemctl/.gitignore @@ -1,2 +1 @@ -/target -Cargo.lock \ No newline at end of file +/target/ \ No newline at end of file diff --git a/systemctl/Cargo.toml b/systemctl/Cargo.toml deleted file mode 100644 index 202ed61..0000000 --- a/systemctl/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "systemctl" -version = "0.1.0" -edition = "2021" - -[[bin]] -name = "systemctl" -path = "src/main.rs" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -cfg-if = { version = "1.0"} - -[target.'cfg(target_os = "dragonos")'.dependencies] -drstd = {git = "https://github.com/DragonOS-Community/drstd.git", revision = "8b1e314e01"} diff --git a/systemctl/Makefile b/systemctl/Makefile deleted file mode 100644 index 9bf72fb..0000000 --- a/systemctl/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static -export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup - -OUTPUT_DIR = $(DADK_BUILD_CACHE_DIR_DRAGONREACH_0_1_0) -REACH_BIN_DIR=$(OUTPUT_DIR)/bin/ -TMP_INSTALL_DIR=$(OUTPUT_DIR)/tmp_install - -all: build - -build: - cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins build --target ../x86_64-unknown-dragonos.json --release - -install: - mkdir -p $(TMP_INSTALL_DIR) - mkdir -p $(REACH_BIN_DIR) - - cargo -Z build-std=core,alloc,compiler_builtins install --target $(TARGET) --path . --root $(TMP_INSTALL_DIR) - mv $(TMP_INSTALL_DIR)/bin/systemctl $(REACH_BIN_DIR)/systemctl - rm -rf $(TMP_INSTALL_DIR) - -build-linux: - cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins build --target x86_64-unknown-linux-gnu - -clean: - cargo clean - -fmt: - cargo fmt - -fmt-check: - cargo fmt --check - -check: - cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins check --workspace --message-format=json --target ../x86_64-unknown-dragonos.json diff --git a/systemctl/src/main.rs b/systemctl/src/main.rs index c4b5313..96ed6b1 100644 --- a/systemctl/src/main.rs +++ b/systemctl/src/main.rs @@ -1,22 +1,8 @@ -#![no_std] -#![no_main] - -#[cfg(target_os = "dragonos")] -extern crate drstd as std; - -use std::fs::File; -use std::libc::c_str::CString; -use std::os::fd::FromRawFd; -use std::{env, libc}; -use std::{string::String, vec::Vec}; +use std::{env, fs::File, io::Write}; const REACH_PIPE_PATH: &str = "/etc/reach/ipc/ctl"; -#[cfg(target_os = "dragonos")] -#[no_mangle] fn main() { - use std::{eprint, eprintln, format, io::Write}; - let mut args: Vec = env::args().collect(); if args.len() <= 2 { @@ -32,27 +18,8 @@ fn main() { msg = format!("{} {}", msg, arg); } - if let Err(err) = get_writer().write_all(msg.as_bytes()) { + let mut file = File::open(REACH_PIPE_PATH).unwrap(); + if let Err(err) = file.write_all(msg.as_bytes()) { eprintln!("write error {}", err); } } - -#[cfg(not(target_os = "dragonos"))] -fn main() {} - -fn get_writer() -> File { - let fd = unsafe { libc::open(ctl_path().as_ptr(), libc::O_WRONLY) }; - - unsafe { File::from_raw_fd(fd) } -} - -#[allow(dead_code)] -fn get_reader() -> File { - let fd = unsafe { libc::open(ctl_path().as_ptr(), libc::O_RDONLY) }; - - unsafe { File::from_raw_fd(fd) } -} - -fn ctl_path() -> CString { - CString::new(REACH_PIPE_PATH).expect("create pipe path CString error") -} diff --git a/x86_64-unknown-dragonos.json b/x86_64-unknown-dragonos.json deleted file mode 100644 index ca99221..0000000 --- a/x86_64-unknown-dragonos.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "os": "dragonos", - "target-endian": "little", - "target-pointer-width": "64", - "target-family": [ - "unix" - ], - "env": "musl", - "target-c-int-width": "32", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", - "disable-redzone": true, - "features": "-3dnow,-3dnowa,-avx,-avx2", - "linker": "rust-lld", - "linker-flavor": "ld.lld", - "llvm-target": "x86_64-unknown-none", - "max-atomic-width": 64, - "panic-strategy": "abort", - "position-independent-executables": true, - "relro-level": "full", - "stack-probes": { - "kind": "inline-or-call", - "min-llvm-version-for-inline": [ - 16, - 0, - 0 - ] - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi" - ] -} \ No newline at end of file