# Bash Go Service `bash_go_service` 是 `execve_hook` 项目的配套后端服务,主要负责配置管理、进程间通信以及与外部服务的交互。它由多个微服务组件构成,共同支撑起整个智能 Bash 环境的功能。 ## 核心组件 ### 1. Backend Service (`backend-service`) 这是主服务模块,负责处理来自 `execve_hook` 的请求。 - **Socket 服务**: 监听 Unix Domain Socket (`/etc/exec_hook/exec.sock`),接收 C 客户端发送的命令执行信息(文件名、参数、环境变量、错误日志路径等)。 - **业务逻辑**: 解析接收到的数据,进行错误分析(如读取错误日志),并生成相应的建议或反馈。 - **外部交互**: 可能与远程服务器(如 Machine Registry)通信,上报数据或获取策略。 - **任务管理**: 使用 `WorkerPool` 管理多个后台任务,包括配置管理、Socket 服务、版本检查等。 - **守护进程**: 支持以守护进程模式运行 (`daemon` 命令),并提供 `force` 和 `quit` 命令来管理服务状态。 ### 2. Config Loader (`config-loader`) 负责管理 `execve_hook` 所需的配置数据。 - **共享内存管理**: 使用 System V 共享内存机制(`shmget`, `shmat`),将解析后的配置数据写入共享内存。 - **配置同步**: 确保 C 代码(`execve_hook`)能够高效地读取最新的拦截规则,而无需频繁读取磁盘文件。 - **配置来源**: 支持从本地文件(如 YAML)或远程服务器加载配置。 - **初始化**: 启动时会清理并重新初始化共享内存,确保配置的一致性。 ### 3. Shared Library (`shared`) 包含所有服务共用的代码库。 - **Constants**: 定义了 Socket 路径、共享内存 Key、命令常量等。 - **Logger**: 统一的日志处理模块。 - **Utils**: 通用工具函数。 ### 4. Updater (`updater`) 负责服务的自动更新检查和升级流程。 - **替换逻辑**: 接收旧文件路径、新文件路径和目标路径,执行原子替换操作。 - **回滚机制**: 如果替换失败或新程序启动失败,会自动回滚到旧版本。 - **自动重启**: 更新完成后可选择自动重启服务。 ### 5. Version (`version`) 版本管理模块,用于处理版本号和构建信息。 ### 6. Welcome (`welcome`) 可能用于处理用户登录后的欢迎信息或初始化操作。 ## 架构交互 ```mermaid graph TD subgraph "C Side (execve_hook)" Hook[execve_interceptor] Client[Socket Client] end subgraph "Go Side (bash_go_service)" Socket[Backend Service] Loader[Config Loader] SHM[(Shared Memory)] Updater[Updater] end Loader -->|Write Config| SHM Hook -->|Read Config| SHM Client -->|Send Exec Info| Socket Socket -->|Analyze & Reply| Client Socket -->|Check Update| Updater Updater -->|Replace Binary| Socket ``` ## 配置说明 (`config/config.yaml`) 配置文件主要包含以下部分: ```yaml machine_registry: endpoint: "http://localhost:3001/endpoint" # 远程注册/上报接口 log: level: DEBUG # 日志级别 bash_config: loader: SERVER # 配置加载方式 watch_interval: 86400 # 配置检查间隔 update_checker: interval: 86400 # 更新检查间隔 reporter: show_msg: false # 是否显示上报消息 ``` ## 构建与运行 项目使用 Go Workspaces (`go.work`) 管理多模块依赖。 ### 编译 进入各个服务的 `cmd` 目录进行编译,例如: ```bash # 编译 Backend Service cd backend-service/cmd go build -o ../../bin/backend-service # 编译 Config Loader cd config-loader/cmd/manager go build -o ../../../bin/config-loader # 编译 Updater cd updater/cmd go build -o ../../bin/updater ``` ### 运行 确保配置文件存在,并直接运行编译后的二进制文件。通常需要 root 权限以创建 Socket 文件和操作共享内存。 ```bash # 启动 Backend Service (支持 daemon 模式) sudo ./bin/backend-service daemon # 运行 Config Loader (通常由 Backend Service 调用或独立运行) sudo ./bin/config-loader ``` ## 依赖管理 - 使用 `go.work` 管理工作区。 - 各个子模块有独立的 `go.mod`。 - 共享代码通过 `shared` 模块引用。