diff --git a/Makefile b/Makefile index 786cc89ca..f7003913b 100644 --- a/Makefile +++ b/Makefile @@ -30,8 +30,10 @@ ALL_TARGETS := $(STARTD_SRC) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) $(VERSION_FILE echo cargo-deps/aarch64-unknown-linux-musl/release/pi-beep; \ fi) \ $(shell /bin/bash -c 'if [[ "${ENVIRONMENT}" =~ (^|-)unstable($$|-) ]]; then \ - echo cargo-deps/$(ARCH)-unknown-linux-musl/release/tokio-console; \ echo cargo-deps/$(ARCH)-unknown-linux-musl/release/flamegraph; \ + fi') \ + $(shell /bin/bash -c 'if [[ "${ENVIRONMENT}" =~ (^|-)console($$|-) ]]; then \ + echo cargo-deps/$(ARCH)-unknown-linux-musl/release/tokio-console; \ fi') REBUILD_TYPES = 1 @@ -139,9 +141,11 @@ install: $(ALL_TARGETS) $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/start-cli) if [ "$(PLATFORM)" = "raspberrypi" ]; then $(call cp,cargo-deps/aarch64-unknown-linux-musl/release/pi-beep,$(DESTDIR)/usr/bin/pi-beep); fi if /bin/bash -c '[[ "${ENVIRONMENT}" =~ (^|-)unstable($$|-) ]]'; then \ - $(call cp,cargo-deps/$(ARCH)-unknown-linux-musl/release/tokio-console,$(DESTDIR)/usr/bin/tokio-console); \ $(call cp,cargo-deps/$(ARCH)-unknown-linux-musl/release/flamegraph,$(DESTDIR)/usr/bin/flamegraph); \ fi + if /bin/bash -c '[[ "${ENVIRONMENT}" =~ (^|-)console($$|-) ]]'; then \ + $(call cp,cargo-deps/$(ARCH)-unknown-linux-musl/release/tokio-console,$(DESTDIR)/usr/bin/tokio-console); \ + fi $(call cp,cargo-deps/$(ARCH)-unknown-linux-musl/release/startos-backup-fs,$(DESTDIR)/usr/bin/startos-backup-fs) $(call ln,/usr/bin/startos-backup-fs,$(DESTDIR)/usr/sbin/mount.backup-fs) diff --git a/core/Cargo.lock b/core/Cargo.lock index 719090006..69515d048 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -881,6 +881,17 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "backtrace-on-stack-overflow" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd2d70527f3737a1ad17355e260706c1badebabd1fa06a7a053407380df841b" +dependencies = [ + "backtrace", + "libc", + "nix 0.23.2", +] + [[package]] name = "barrage" version = "0.2.3" @@ -4679,6 +4690,19 @@ dependencies = [ "smallvec", ] +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + [[package]] name = "nix" version = "0.24.3" @@ -7276,6 +7300,7 @@ dependencies = [ "async-trait", "axum 0.8.4", "backhand", + "backtrace-on-stack-overflow", "barrage", "base32", "base64 0.22.1", diff --git a/core/build-cli.sh b/core/build-cli.sh index 16de9f1a6..bc70c2983 100755 --- a/core/build-cli.sh +++ b/core/build-cli.sh @@ -46,7 +46,7 @@ if [ -n "$FEATURES" ]; then fi RUSTFLAGS="" -if [[ "${ENVIRONMENT:-}" =~ (^|-)unstable($|-) ]]; then +if [[ "${ENVIRONMENT:-}" =~ (^|-)console($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi diff --git a/core/build-containerbox.sh b/core/build-containerbox.sh index 277aaa396..b3899097f 100755 --- a/core/build-containerbox.sh +++ b/core/build-containerbox.sh @@ -22,7 +22,7 @@ cd .. FEATURES="$(echo $ENVIRONMENT | sed 's/-/,/g')" RUSTFLAGS="" -if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then +if [[ "${ENVIRONMENT}" =~ (^|-)console($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi diff --git a/core/build-registrybox.sh b/core/build-registrybox.sh index e00200454..4550a5043 100755 --- a/core/build-registrybox.sh +++ b/core/build-registrybox.sh @@ -22,7 +22,7 @@ cd .. FEATURES="$(echo $ENVIRONMENT | sed 's/-/,/g')" RUSTFLAGS="" -if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then +if [[ "${ENVIRONMENT}" =~ (^|-)console($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi diff --git a/core/build-startbox.sh b/core/build-startbox.sh index 30721ff0e..2782d2c80 100755 --- a/core/build-startbox.sh +++ b/core/build-startbox.sh @@ -27,7 +27,7 @@ cd .. FEATURES="$(echo $ENVIRONMENT | sed 's/-/,/g')" RUSTFLAGS="" -if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then +if [[ "${ENVIRONMENT}" =~ (^|-)console($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi diff --git a/core/build-ts.sh b/core/build-ts.sh index 106054cdf..f564026a9 100755 --- a/core/build-ts.sh +++ b/core/build-ts.sh @@ -22,7 +22,7 @@ cd .. FEATURES="$(echo $ENVIRONMENT | sed 's/-/,/g')" RUSTFLAGS="" -if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then +if [[ "${ENVIRONMENT}" =~ (^|-)console($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi diff --git a/core/build-tunnelbox.sh b/core/build-tunnelbox.sh index 525b84bcd..b5a00304d 100755 --- a/core/build-tunnelbox.sh +++ b/core/build-tunnelbox.sh @@ -22,7 +22,7 @@ cd .. FEATURES="$(echo $ENVIRONMENT | sed 's/-/,/g')" RUSTFLAGS="" -if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then +if [[ "${ENVIRONMENT}" =~ (^|-)console($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi diff --git a/core/run-tests.sh b/core/run-tests.sh index 02ec34d55..185eb5a3e 100755 --- a/core/run-tests.sh +++ b/core/run-tests.sh @@ -22,7 +22,7 @@ cd .. FEATURES="$(echo $ENVIRONMENT | sed 's/-/,/g')" RUSTFLAGS="" -if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then +if [[ "${ENVIRONMENT}" =~ (^|-)console($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi diff --git a/core/startos/Cargo.toml b/core/startos/Cargo.toml index 9c3a26816..b7ea7dcf2 100644 --- a/core/startos/Cargo.toml +++ b/core/startos/Cargo.toml @@ -48,13 +48,14 @@ cli-registry = [] cli-startd = [] cli-tunnel = [] default = ["cli", "startd", "registry", "cli-container", "tunnel"] -dev = [] +dev = ["backtrace-on-stack-overflow"] docker = [] registry = [] startd = ["mail-send"] test = [] tunnel = [] -unstable = ["console-subscriber", "tokio/tracing"] +console = ["console-subscriber", "tokio/tracing"] +unstable = ["backtrace-on-stack-overflow"] [dependencies] arti-client = { version = "0.33", features = [ @@ -82,6 +83,7 @@ async-trait = "0.1.74" axum = { version = "0.8.4", features = ["ws"] } barrage = "0.2.3" backhand = "0.21.0" +backtrace-on-stack-overflow = { version = "0.3.0", optional = true } base32 = "0.5.0" base64 = "0.22.1" base64ct = "1.6.0" diff --git a/core/startos/src/context/rpc.rs b/core/startos/src/context/rpc.rs index 4319f4209..0e05a1cf8 100644 --- a/core/startos/src/context/rpc.rs +++ b/core/startos/src/context/rpc.rs @@ -78,7 +78,7 @@ pub struct RpcContextSeed { } impl Drop for RpcContextSeed { fn drop(&mut self) { - tracing::error!("RpcContext is dropped"); + tracing::info!("RpcContext is dropped"); } } diff --git a/core/startos/src/main.rs b/core/startos/src/main.rs index 371cd5e7d..09cf7c27e 100644 --- a/core/startos/src/main.rs +++ b/core/startos/src/main.rs @@ -1,3 +1,7 @@ fn main() { + #[cfg(feature = "backtrace-on-stack-overflow")] + unsafe { + backtrace_on_stack_overflow::enable() + }; startos::bins::startbox() } diff --git a/core/startos/src/tunnel/api.rs b/core/startos/src/tunnel/api.rs index 11c5ec512..da73232f2 100644 --- a/core/startos/src/tunnel/api.rs +++ b/core/startos/src/tunnel/api.rs @@ -2,7 +2,7 @@ use std::net::Ipv4Addr; use clap::Parser; use ipnet::Ipv4Net; -use rpc_toolkit::{Context, Empty, HandlerExt, ParentHandler, from_fn_async}; +use rpc_toolkit::{from_fn_async, Context, Empty, HandlerExt, ParentHandler}; use serde::{Deserialize, Serialize}; use crate::context::CliContext; @@ -22,7 +22,7 @@ pub fn tunnel_api() -> ParentHandler { subnet_api::().with_about("Add, remove, or modify subnets"), ) // .subcommand( - // "forward", + // "port-forward", // ParentHandler::::new() // .subcommand( // "add", @@ -77,19 +77,19 @@ pub fn subnet_api() -> ParentHandler { // .with_call_remote::(), // ) // .subcommand( - // "add-client", - // from_fn_async(add_client) + // "add-device", + // from_fn_async(add_device) // .with_metadata("sync_db", Value::Bool(true)) // .no_display() - // .with_about("Add a client to a subnet") + // .with_about("Add a device to a subnet") // .with_call_remote::(), // ) // .subcommand( - // "remove-client", - // from_fn_async(remove_client) + // "remove-device", + // from_fn_async(remove_device) // .with_metadata("sync_db", Value::Bool(true)) // .no_display() - // .with_about("Remove a client from a subnet") + // .with_about("Remove a device from a subnet") // .with_call_remote::(), // ) } diff --git a/core/startos/src/util/logger.rs b/core/startos/src/util/logger.rs index d6bc01418..9dfc8e412 100644 --- a/core/startos/src/util/logger.rs +++ b/core/startos/src/util/logger.rs @@ -59,7 +59,7 @@ impl StartOSLogger { fn base_subscriber(logfile: LogFile) -> impl Subscriber { use tracing_error::ErrorLayer; use tracing_subscriber::prelude::*; - use tracing_subscriber::{EnvFilter, fmt}; + use tracing_subscriber::{fmt, EnvFilter}; let filter_layer = || { EnvFilter::builder() @@ -80,10 +80,8 @@ impl StartOSLogger { let sub = tracing_subscriber::registry(); - #[cfg(feature = "unstable")] + #[cfg(feature = "console-subscriber")] let sub = sub.with(console_subscriber::spawn()); - #[cfg(not(feature = "unstable"))] - let sub = sub.with(filter_layer()); let sub = sub.with(fmt_layer).with(ErrorLayer::default());