|
|
||
|---|---|---|
| backend-service | ||
| config | ||
| config-loader | ||
| shared | ||
| tests | ||
| updater | ||
| version | ||
| welcome | ||
| README.md | ||
| generate_bash_product_id.sh | ||
| go.work | ||
| go.work.sum | ||
| install_product_id_generator.sh | ||
| main | ||
| reg.sh | ||
| uninstall_product_id_generator.sh | ||
README.md
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)
可能用于处理用户登录后的欢迎信息或初始化操作。
架构交互
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)
配置文件主要包含以下部分:
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 目录进行编译,例如:
# 编译 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 文件和操作共享内存。
# 启动 Backend Service (支持 daemon 模式)
sudo ./bin/backend-service daemon
# 运行 Config Loader (通常由 Backend Service 调用或独立运行)
sudo ./bin/config-loader
依赖管理
- 使用
go.work管理工作区。 - 各个子模块有独立的
go.mod。 - 共享代码通过
shared模块引用。