//! `hammerd` — daemon de hammer. Dos responsabilidades: //! 1. Bus de agente: /run/agent.sock (JSON-líneas, SO_PEERCRED). Ver `docs/07-agent-bus.md`. //! 2. Diario de mutaciones: fanotify sobre /bin,/sbin,/lib,/etc. Ver `docs/05-journal.md`. //! //! Esqueleto de arranque. Las dos subsistemas (Fases 3 y 5) se implementarán por separado; //! aquí queda el binario navegable y el cableado básico de logging/argumentos. use clap::Parser; #[derive(Parser)] #[command(name = "hammerd", version, about = "Daemon de hammer: bus de agente + diario.")] struct Args { /// Socket del bus de agente. #[arg(long, default_value = "/run/agent.sock")] agent_sock: String, /// FIFO de control humano del init. #[arg(long, default_value = "/run/init.control")] init_control: String, /// Directorio del diario de mutaciones. #[arg(long, default_value = "/var/lib/hammer/journal")] journal: String, } fn main() -> anyhow::Result<()> { tracing_subscriber::fmt() .with_env_filter( tracing_subscriber::EnvFilter::try_from_default_env() .unwrap_or_else(|_| "info".into()), ) .init(); let args = Args::parse(); tracing::info!( agent_sock = %args.agent_sock, init_control = %args.init_control, journal = %args.journal, "hammerd: arranque (esqueleto)" ); // TODO(fase-3): iniciar el watcher fanotify → diario. // TODO(fase-5): servir el bus de agente en agent_sock (JSON-líneas, SO_PEERCRED). tracing::warn!("subsistemas pendientes: diario (Fase 3) y bus de agente (Fase 5)"); Ok(()) }