102 lines
3.1 KiB
Go
102 lines
3.1 KiB
Go
|
|
// sandbox.go v1.6
|
|||
|
|
package sandbox
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"os"
|
|||
|
|
"os/exec"
|
|||
|
|
"sync"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
var pluginConfig = struct {
|
|||
|
|
Root string // 沙盒临时根目录物理路径
|
|||
|
|
Runtime map[string]*RuntimeConfig // 运行时配置
|
|||
|
|
}{}
|
|||
|
|
|
|||
|
|
var sandboxList = map[string]*Sandbox{}
|
|||
|
|
var sandboxLock = sync.RWMutex{}
|
|||
|
|
|
|||
|
|
// Volume 挂载配置
|
|||
|
|
type Volume struct {
|
|||
|
|
Source string // 宿主机路径或类型(如 tmpfs)
|
|||
|
|
Target string // 沙盒内路径
|
|||
|
|
ReadOnly bool // 是否只读
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Limits 资源限制
|
|||
|
|
type Limits struct {
|
|||
|
|
Cpu float64 // CPU 核心限制 (如 0.5)
|
|||
|
|
Mem float64 // 内存限制 (单位: GB)
|
|||
|
|
Swap float64 // SWAP 限制 (单位: GB)
|
|||
|
|
Shm uint // /dev/shm 大小 (单位: MB)
|
|||
|
|
Tmp uint // /tmp 大小 (单位: MB)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Config 沙盒启动配置
|
|||
|
|
type Config struct {
|
|||
|
|
Name string // 沙盒名称
|
|||
|
|
ProjectDir string // 宿主机的工作目录(自动映射到SandboxWorkDir)
|
|||
|
|
WorkDir string // 沙盒内的工作目录
|
|||
|
|
Envs map[string]string // 环境变量
|
|||
|
|
Volumes []Volume // 挂载列表
|
|||
|
|
Limits Limits // 资源限制
|
|||
|
|
Network struct {
|
|||
|
|
AllowInternet bool // 是否允许出站网络连接,默认关闭,配置后只开放非本地网络访问
|
|||
|
|
AllowLocalNetwork bool // 是否允许访问本地网络,默认关闭,配置后只开放10.0.0.0/8、172.16.0.0/12、192.168.0.0/16
|
|||
|
|
AllowListen []int // 允许监听端口列表,默认关闭所有监听端口和进站连接
|
|||
|
|
AllowList []string // 允许出站访问的 IP/端口 列表,同时放开TCP&UDP,在拒绝的基础上允许访问白名单
|
|||
|
|
BlockList []string // 拒绝访问的 IP/端口 列表,同时拒绝TCP&UDP,在允许的基础上拒绝黑名单
|
|||
|
|
}
|
|||
|
|
Gpu struct {
|
|||
|
|
Driver string // 驱动或厂商,如 "nvidia", "amd", "apple"
|
|||
|
|
Devices []string // 设备 ID,如 ["0", "1"] 或 ["all"]
|
|||
|
|
}
|
|||
|
|
ExtraOptions []string // 额外参数
|
|||
|
|
AutoStart bool // 是否自动启动沙盒进程
|
|||
|
|
StartCmd string
|
|||
|
|
StartArgs []string
|
|||
|
|
Runtime struct {
|
|||
|
|
Language string
|
|||
|
|
Version string
|
|||
|
|
Venv string
|
|||
|
|
}
|
|||
|
|
NoLog bool // 是否不显示沙盒运行日志
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Status 沙盒实时状态信息
|
|||
|
|
type Status struct {
|
|||
|
|
Id string // 沙盒唯一标识 (用于目录名、Cgroup 名)
|
|||
|
|
Pid int // 宿主机上的进程 PID
|
|||
|
|
Alive bool // 物理进程是否正在运行
|
|||
|
|
Status string // 状态
|
|||
|
|
StartTime int64 // 启动时间 (Unix 时间戳)
|
|||
|
|
Uptime int64 // 运行耗时 (单位: 秒)
|
|||
|
|
MemoryUsage uint // 当前内存使用 (单位: MB)
|
|||
|
|
CpuUsage float64 // 当前 CPU 使用率 (百分比)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type State struct {
|
|||
|
|
Id string
|
|||
|
|
Pid int
|
|||
|
|
StartTime int64
|
|||
|
|
WorkDir string
|
|||
|
|
MountedList []string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type Sandbox struct {
|
|||
|
|
id string
|
|||
|
|
pid int
|
|||
|
|
uid int
|
|||
|
|
gid int
|
|||
|
|
root string
|
|||
|
|
workDir string
|
|||
|
|
config *Config
|
|||
|
|
cmd *exec.Cmd
|
|||
|
|
mountedList []string
|
|||
|
|
startTime int64
|
|||
|
|
lastLogFd *os.File
|
|||
|
|
errorLogFd *os.File
|
|||
|
|
status string
|
|||
|
|
lock sync.Mutex
|
|||
|
|
extra map[string]any
|
|||
|
|
}
|