Implements the requested cube service: a long-lived daemon that holds ONE CubeStore for its whole lifetime and serves the cube command language over a Unix-domain socket, plus cubec to talk to it. - cubesys::commands: factored the single command interpreter (Session::exec) so cube REPL, cubec client, and the daemon run identical logic - cubesys::net: dependency-free length-framed AF_UNIX transport - cubesys::persist: dependency-free JSON snapshot (atomic tmp+rename) so the store -- including sealed/encrypted records -- survives daemon restarts - cube-server: listens on $XDG_RUNTIME_DIR/cube/cube.sock, snapshots to $XDG_STATE_HOME/cube/cube-store.json, replays on startup - cubec: one-shot + REPL client over the socket - cube.rs trimmed to a thin REPL/script/demo driver (help text updated) - /etc/systemd/system/cube.service: runs as luulu, ProtectSystem=strict, RestrictAddressFamilies=AF_UNIX, Restart=on-failure; enabled + active - integration.md documents the daemon + caveat (open rewrites plaintext) Verified: ./check (fmt+tests+clippy -D warnings) green; ./check mount (27 FUSE e2e) green; socket CLI round-trips; sealed record survived a full service restart and reopened+r with original value.
30 lines
671 B
TOML
30 lines
671 B
TOML
[package]
|
|
name = "cubesys"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
description = "CUBELinux-2 system integration: one CubeStore shared by cubefs, cubecode and cubecrypt (PDF Packages 3-5 bound into a single running system)."
|
|
|
|
[dependencies]
|
|
cubecoords = { path = "../cubecoords" }
|
|
cubestore = { path = "../cubestore" }
|
|
cubefs = { path = "../cubefs" }
|
|
cubecode = { path = "../cubecode" }
|
|
cubecrypt = { path = "../cubecrypt" }
|
|
|
|
[[bin]]
|
|
name = "cube"
|
|
path = "src/bin/cube.rs"
|
|
|
|
[[bin]]
|
|
name = "cube-demo"
|
|
path = "src/bin/cube_demo.rs"
|
|
|
|
[[bin]]
|
|
name = "cube-server"
|
|
path = "src/bin/cube-server.rs"
|
|
|
|
[[bin]]
|
|
name = "cubec"
|
|
path = "src/bin/cubec.rs"
|