diff --git a/bin/nanocld/src/services/system.rs b/bin/nanocld/src/services/system.rs index 7c51a83af9d92ccc582e3c36632d0f4b1cd037a2..47234db98ea7d9ac0f08d4718f94daf3274ae071 100644 --- a/bin/nanocld/src/services/system.rs +++ b/bin/nanocld/src/services/system.rs @@ -53,10 +53,10 @@ pub async fn get_version() -> web::HttpResponse { pub async fn get_info( state: web::types::State, ) -> HttpResult { - let docker = state.inner.docker_api.info().await?; + // let docker = state.inner.docker_api.info().await?; let host_gateway = state.inner.config.gateway.clone(); let info = HostInfo { - docker, + docker: Default::default(), host_gateway, config: state.inner.config.clone(), }; diff --git a/bin/nanocld/src/system/init.rs b/bin/nanocld/src/system/init.rs index f42aca11f5f0e28ebc3c20346b5d5f847d29e7a7..bdd6d31a9ad16778d71cae5417c33695b480718a 100644 --- a/bin/nanocld/src/system/init.rs +++ b/bin/nanocld/src/system/init.rs @@ -1,5 +1,5 @@ use std::{os::unix::prelude::PermissionsExt, path::Path, process::Command}; - +use futures_util::TryFutureExt; use notify::{Config, RecommendedWatcher, RecursiveMode, Watcher}; use ntex::rt; use tokio::fs; @@ -114,30 +114,59 @@ async fn ensure_state_dir(state_dir: &str) -> IoResult<()> { Ok(()) } +async fn ensure_state_dir_database(state_dir: &str) -> IoResult<()> { + let vm_dir = format!("{state_dir}/database"); + fs::create_dir_all(vm_dir).await.map_err(|err| { + err.map_err_context(|| format!("Unable to create {state_dir}/database")) + })?; + Ok(()) +} + +async fn ensure_state_dir_etc() -> IoResult<()> { + // let vm_dir = format!("{state_dir}/database"); + fs::create_dir_all("/etc/nanocl").await.map_err(|err| { + err.map_err_context(|| format!("Unable to create /etc/nanocl")) + })?; + Ok(()) +} + +async fn ensure_nanocl_sock_dir() -> IoResult<()> { + // let vm_dir = format!("{}/vms/images"); + fs::create_dir_all("/run/nanocl").await.map_err(|err| { + err.map_err_context(|| format!("Unable to create /run/nanocl")) + })?; + Ok(()) +} + /// Init function called before http server start. /// To boot and initialize our state and database. pub async fn init(conf: &DaemonConfig) -> IoResult { - spawn_crond(); + // spawn_crond(); set_uds_perm(); ensure_state_dir(&conf.state_dir).await?; + ensure_state_dir_database(&conf.state_dir).await?; + ensure_nanocl_sock_dir().await?; + ensure_state_dir_etc().await?; + let system_state = SystemState::new(conf).await?; let system_ptr = system_state.clone(); NodeDb::register(&system_ptr).await?; utils::system::register_namespace("global", &system_ptr).await?; utils::system::register_namespace("system", &system_ptr).await?; - rt::spawn(async move { - let fut = async move { - utils::system::sync_processes(&system_ptr).await?; - utils::system::sync_vm_images(&system_ptr).await?; - Ok::<_, IoError>(()) - }; - if let Err(err) = fut.await { - log::warn!("boot::init: {err}"); - } - Ok::<_, IoError>(()) - }); - super::docker_event::analyze(&system_state); - super::metric::spawn(&system_state); + // todo 是否需要分析containerd event + // rt::spawn(async move { + // let fut = async move { + // utils::system::sync_processes(&system_ptr).await?; + // utils::system::sync_vm_images(&system_ptr).await?; + // Ok::<_, IoError>(()) + // }; + // if let Err(err) = fut.await { + // log::warn!("boot::init: {err}"); + // } + // Ok::<_, IoError>(()) + // }); + // super::docker_event::analyze(&system_state); + // super::metric::spawn(&system_state); Ok(system_state) } diff --git a/rpmbuilds/SRPMS/fleet-v0.1.1-afa829c.oe2403.src.rpm b/rpmbuilds/SRPMS/fleet-v0.1.1-afa829c.oe2403.src.rpm new file mode 100644 index 0000000000000000000000000000000000000000..b4ae4803d983217d9920b93cbd64cdf90b9a2235 Binary files /dev/null and b/rpmbuilds/SRPMS/fleet-v0.1.1-afa829c.oe2403.src.rpm differ diff --git a/scripts/local-test/nanocl-uninstall.sh b/scripts/local-test/nanocl-uninstall.sh new file mode 100755 index 0000000000000000000000000000000000000000..9bd42d81fc39d8b4f85d64b1dbb7d691d6dcd591 --- /dev/null +++ b/scripts/local-test/nanocl-uninstall.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +systemctl stop nanocld +systemctl stop ncproxy +systemctl stop nproxy + + +# 删除 Nanocl 配置和数据 +rm -rf /etc/nanocl +rm -rf /var/lib/nanocl +rm -rf /run/nanocl + +# 停止并删除所有容器 +crictl ps -q | xargs -r crictl stop +crictl ps -qa | xargs -r crictl rm + +# 停止并删除所有 Pod +crictl pods -q | xargs -r crictl stopp +crictl pods -q | xargs -r crictl rmp + +# 删除 Nginx 配置文件 +rm -f /etc/nginx/nginx.conf diff --git a/scripts/local-test/start.sh b/scripts/local-test/start.sh new file mode 100755 index 0000000000000000000000000000000000000000..e8467b259fbfb758456d0a7e539074ac9aa061d5 --- /dev/null +++ b/scripts/local-test/start.sh @@ -0,0 +1 @@ +./nanocld --store-addr="./database.sqlite" --hosts=unix:///run/nanocl/nanocl.sock --state-dir=/var/lib/nanocl --conf-dir=/etc/nanocl diff --git a/scripts/local-test/startnginx.sh b/scripts/local-test/startnginx.sh new file mode 100755 index 0000000000000000000000000000000000000000..06e7eab12c784a05ee4bde560bc0b0782fe2dbfc --- /dev/null +++ b/scripts/local-test/startnginx.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +set -e +STATE_DIR="/var/lib/nanocl/proxy" +## Test is STATE_DIR is empty +if [ -z "$STATE_DIR" ]; then + echo "STATE_DIR env is not set" + exit 1 +fi + +mkdir -p /var/log/nginx + +## Test if STATE_DIR/nginx.conf exists +if [ ! -f "$STATE_DIR/nginx.conf" ]; then + cp /etc/nginx/nginx.conf $STATE_DIR +fi + +rm -f /etc/nginx/nginx.conf +ln -s $STATE_DIR/nginx.conf /etc/nginx/nginx.conf + +nginx -g "daemon off;" +#systemctl stop nginx +#systemctl daemon-reload +#systemctl restart nginx diff --git a/scripts/local-test/startproxy.sh b/scripts/local-test/startproxy.sh new file mode 100755 index 0000000000000000000000000000000000000000..f40c8908253f672d57234dfa20ef8af939951a0c --- /dev/null +++ b/scripts/local-test/startproxy.sh @@ -0,0 +1 @@ +./ncproxy --state-dir=/var/lib/nanocl/proxy