forked from wrenn/wrenn
Complete Rust rewrite of the Go envd guest daemon that runs as PID 1 inside Firecracker microVMs. Feature-complete across all 8 phases: - Health, metrics, and env var endpoints - Crypto (SHA-256/512, HMAC), auth (secure token, signing), init/snapshot - Connect RPC via connectrpc + buffa (process + filesystem services) - File transfer (GET/POST /files) with gzip, multipart, chown, ENOSPC - Port subsystem (/proc/net/tcp scanner, socat forwarder) - Cgroup2 manager with noop fallback - Snapshot/restore lifecycle (conntracker, port subsystem stop/restart) - SIGTERM graceful shutdown, --cmd initial process spawn - MMDS metadata polling for Firecracker mode 42 source files, ~4200 LOC, 4.1MB stripped release binary. Makefile updated: build-envd now targets Rust (musl static), build-envd-go preserved for Go builds.
27 lines
782 B
Rust
27 lines
782 B
Rust
pub mod pb;
|
|
pub mod entry;
|
|
pub mod process_handler;
|
|
pub mod process_service;
|
|
pub mod filesystem_service;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use crate::rpc::process_service::ProcessServiceImpl;
|
|
use crate::rpc::filesystem_service::FilesystemServiceImpl;
|
|
use crate::state::AppState;
|
|
|
|
use pb::process::ProcessExt;
|
|
use pb::filesystem::FilesystemExt;
|
|
|
|
/// Build the connect-rust Router with both RPC services registered.
|
|
pub fn rpc_router(state: Arc<AppState>) -> connectrpc::Router {
|
|
let process_svc = Arc::new(ProcessServiceImpl::new(Arc::clone(&state)));
|
|
let filesystem_svc = Arc::new(FilesystemServiceImpl::new(Arc::clone(&state)));
|
|
|
|
let router = connectrpc::Router::new();
|
|
let router = process_svc.register(router);
|
|
let router = filesystem_svc.register(router);
|
|
|
|
router
|
|
}
|