bash_go_service/README.md

133 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` 模块引用。