sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
⎇ 8bf1623044075274682e4351a0f8e120047c2bed
crates/hammerd/src/main.rs
Ñawpa willay
Pi imata llamkarqan
ch'uya
Scaffold inicial: workspace Rust + SDDs completos
1//! `hammerd` — daemon de hammer. Dos responsabilidades:
2//! 1. Bus de agente: /run/agent.sock (JSON-líneas, SO_PEERCRED). Ver `docs/07-agent-bus.md`.
3//! 2. Diario de mutaciones: fanotify sobre /bin,/sbin,/lib,/etc. Ver `docs/05-journal.md`.
4//!
5//! Esqueleto de arranque. Las dos subsistemas (Fases 3 y 5) se implementarán por separado;
6//! aquí queda el binario navegable y el cableado básico de logging/argumentos.
7
8use clap::Parser;
9
10#[derive(Parser)]
11#[command(name = "hammerd", version, about = "Daemon de hammer: bus de agente + diario.")]
12struct Args {
13 /// Socket del bus de agente.
14 #[arg(long, default_value = "/run/agent.sock")]
15 agent_sock: String,
16 /// FIFO de control humano del init.
17 #[arg(long, default_value = "/run/init.control")]
18 init_control: String,
19 /// Directorio del diario de mutaciones.
20 #[arg(long, default_value = "/var/lib/hammer/journal")]
21 journal: String,
22}
23
24fn main() -> anyhow::Result<()> {
25 tracing_subscriber::fmt()
26 .with_env_filter(
27 tracing_subscriber::EnvFilter::try_from_default_env()
28 .unwrap_or_else(|_| "info".into()),
29 )
30 .init();
31
32 let args = Args::parse();
33 tracing::info!(
34 agent_sock = %args.agent_sock,
35 init_control = %args.init_control,
36 journal = %args.journal,
37 "hammerd: arranque (esqueleto)"
38 );
39
40 // TODO(fase-3): iniciar el watcher fanotify → diario.
41 // TODO(fase-5): servir el bus de agente en agent_sock (JSON-líneas, SO_PEERCRED).
42 tracing::warn!("subsistemas pendientes: diario (Fase 3) y bus de agente (Fase 5)");
43 Ok(())
44}