CubeSandbox一键部署脚本install.sh全流程解析:每行命令都在做什么

CubeSandbox一键部署脚本install.sh全流程解析:每行命令都在做什么 CubeSandbox一键部署脚本install.sh全流程解析每行命令都在做什么【免费下载链接】CubeSandboxInstant, Concurrent, Secure Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandboxCubeSandbox 是一个为 AI Agent 提供隔离代码执行环境的轻量级安全沙箱它的部署入口是deploy/one-click/install.sh这个一键部署脚本一条sudo ./install.sh就能完成硬件预检、依赖安装、配置渲染、systemd 服务注册与健康检查的全部流程。本文按照脚本执行顺序逐阶段拆解 install.sh 每个命令块在做什么、失败时该看哪里让你在执行前就心中有数。部署完成后创建沙箱的端到端冷启动耗时约 60ms——这正是这套脚本要拉起的所有组件最终交付的能力。全流程速览10 个阶段一览表 先给一张导航图方便你对照deploy/one-click/install.sh源码阅读阶段大致代码位置做什么1. 严格模式与参数解析L4–L57set -euo pipefail、解析 CLI 参数与.env、确定部署角色2. 外部依赖默认值L64–L163填充 MySQL/Redis/MinIO/S3 默认配置并做安全校验3. 安装模式判定L202–L250区分全新安装 / 配置保留升级升级时先做三方合并4. 硬件与内核预检L1485–L1492KVM、内存、XFS、cgroup、eBPF、PVM 一致性检查5. 依赖安装与连通性检查L1532–L1538安装 Docker、检查外部 MySQL/Redis 可达性6. 解压与配置渲染L1540–L1601解开sandbox-package.tar.gz改写各组件配置模板7. 替换安装树L1609–L1694停旧服务、做版本库存、清空并拷贝新组件8. 持久化运行时配置L1726–L1937生成.one-click.env数据库连接串、S3 凭据等9. 符号链接与 systemd 注册L1939–L1978chmod x、软链到/usr/local/bin、enable --now启动 target10. 健康检查L1980–L1985运行quickcheck.sh并打印可用命令清单安装前准备拿到发布包并编辑 .env官方发布包是一个 tar.gz解压后包含安装脚本、组件二进制包sandbox-package.tar.gz、版本清单release-manifest.json和环境变量模板env.example。标准上手流程是tar -xzf cube-sandbox-one-click-version.tar.gz cd cube-sandbox-one-click-version cp env.example .env sudo ./install.shenv.example位于deploy/one-click/env.example里最值得新手关注的几个开关变量默认值作用ONE_CLICK_DEPLOY_ROLEcontrolcontrol 控制计算一体机compute 只装计算节点CUBE_SANDBOX_NODE_IP自动探测 eth0节点内网 IP用于 cube-proxy/DNS 地址渲染MIRROR空国际源设为cn走国内镜像源拉取组件镜像CUBE_PVM_ENABLE0是否使用 PVM 优化版 guest 内核ONE_CLICK_DEPLOY_ROLEcompute时—必须再设ONE_CLICK_CONTROL_PLANE_IP指向已有控制节点两种角色的分工很清晰控制节点control运行 CubeAPI、CubeMaster、CubeOps、WebUI 以及全部依赖容器计算节点compute只运行 Cubelet、cube-shim、guest 镜像与 cube-egress 出网代理并向控制节点注册。阶段 1严格模式启动与参数优先级脚本开头做三件事set -euo pipefailL4任何一条命令失败、使用未定义变量、管道中断都会立即终止安装——这是失败要早失败的基石。source lib/common.shL8引入deploy/one-click/lib/common.sh中的公共函数预检、合并 env、探测 IP 等逻辑都在这里。参数解析与优先级L22–L36、L45–L55one_click_parse_args同时支持--flagvalue和--flag value两种写法随后加载.env文件并对 CLI 值再应用一次覆盖最终确立优先级CLI 参数 .env 文件 进程环境变量 内置默认值。--mode有三种取值install全新重装重置配置、upgrade保留配置升级、auto检测到旧安装则自动升级。脚本还会用require_rootL43确保以 root 运行并通过one_click_deploy_roleL57确定本次部署角色。阶段 2硬件与内核预检先检查再动手 ⚠️install.sh 最贴心的设计是在改动系统之前先集中跑一遍预检L1485–L1492任何一项不满足都直接die并给出修复建议。检查项要求不满足时KVM存在/dev/kvm提示可用deploy/pvm/pvm_setup.sh搭建 PVM 环境后重试内存≥ 7500000 KB约 8GBCUBE_MIN_MEMORY_KB可调直接报错退出文件系统/data/cubelet必须位于XFS上cow/reflink 依赖提示mkfs.xfs分区并挂载到/data/cubeletcgroup v2根 cgroup 必须有cpu控制器自动尝试写入cpu失败时提示先停掉multipathd再重试eBPF内核支持 bpf 且/sys/fs/bpf已挂载为 bpffs提示升级内核或挂载 bpffsPVM 一致性若kvm_pvm模块已加载必须设CUBE_PVM_ENABLE1交互式确认或报错防止模板创建静默失败计算节点专属必须能连通控制平面启用 S3 卷时必须提供CUBE_S3_*check_compute_control_plane_preflight/check_compute_s3_required这些检查解释了为什么安装脚本对系统挑剔CubeSandbox 的沙箱跑在自研 hypervisorKVM之上网络数据面依赖 eBPF卷的 CoW 快照依赖 XFS reflink。阶段 3依赖安装与外部数据库连通性检查预检通过后脚本才允许动系统包install_required_dependenciesL1532自动安装 Docker 与 Docker Compose——注意即使计算节点也强制装 Docker因为透明出网代理 cube-egress 是容器形式运行。check_install_preflight确认tar、ss、systemctl、curl、pgrep等基础工具齐备。check_external_deps_preflightL571–L811如果你在.env里配置了外部 MySQLCUBE_EXTERNAL_MYSQL_HOST或 Redis含 Sentinel 模式脚本会用mysqladmin ping/redis-cli AUTH在 5 秒超时内实测连通性与密码有效性避免错误配置拖到服务启动阶段才暴露。warn_default_external_credentials当你把外部数据库配上却仍使用模板默认密码cube_pass/ceuhvu123时会打印醒目的安全警告。可选的ONE_CLICK_ENABLE_TENCENT_DOCKER_MIRROR1会把腾讯云镜像源写进/etc/docker/daemon.json并重启 Docker。阶段 4解压发布包与配置渲染 脚本把sandbox-package.tar.gz解压到临时目录WORK_DIR退出时由 trap 自动清理随后进行配置渲染——把用户选择写进各组件的配置模板generate_cubemaster_config_ports用sed把CubeMaster/conf.yaml里的__CUBE_SANDBOX_MYSQL_PORT__等占位符替换为实际端口、账号、监听地址。patch_cubemaster_external_deps若配置了外部 MySQL/Redis或 Sentinel改写conf.yaml的连接段从外部切回内置时还会清理残留的 Sentinel 键防止幽灵配置。节点探测detect_node_ip优先使用CUBE_SANDBOX_NODE_IP否则自动探测 eth0 的 IPv4detect_primary_interface确定主网卡名。CIDR 校验沙箱网络段默认192.168.0.0/18掩码必须在 /16–/24 之间并做主机冲突检测升级模式自动跳过冲突扫描。patch_cubelet_config_template把网卡名、CIDR、cube-router 开关、egress 管理端口写进Cubelet/config/config.toml。阶段 5升级模式——三方合并旧配置不丢这是脚本最精巧的部分L206–L250、L1615–L1621。检测到已存在.one-click.env时进入升级模式preflight_upgrade校验版本升降级与角色变更是否被允许merge_env_three_way做三方合并以新版 env.example为基准、旧版 env.example为基线、你现有的.one-click.env为输入区分出哪些是你自定义过的值——自定义值优先保留其余跟随新版本所有检查都通过后才调用backup_before_upgrade对旧安装目录做带时间戳的备份并把合并差异写入env-diff.txt留档。所以升级是安全的端口、CIDR、节点 IP、角色这些用户资产不会在一次升级中丢失。阶段 6替换安装树、版本库存与内核符号链接配置渲染完成后脚本开始真正的换血L1609–L1694停旧服务systemctl disable --now两个 target再显式stop所有cube-sandbox-*.service并兼容停止历史版本的 nohup 部署版本库存inventory_package_component_versions把新包中的 cube-shim、guest 镜像、cube-agent、内核按内容哈希归档到/data/cubelet/root/component_versions/同版本跳过、不同版本永久保留方便回溯清空并拷贝rm -rf掉旧组件目录后control 角色整包拷贝compute 角色只拷贝 Cubelet、cube-shim、cube-kernel-scf、cube-image、cube-egress 等子集——计算节点不会安装也不应该运行 MinIO内核符号链接select_installed_kernel_vmlinux让cube-kernel-scf/vmlinux指向vmlinux-bm普通内核或vmlinux-pvmCUBE_PVM_ENABLE1时创建数据目录/data/log/*、/data/cube-shared、/data/cube-shim/disks等启用 CubeS3lvol 时首次创建约 512GiB 的稀疏 WAL 镜像文件升级永不覆盖。阶段 7持久化运行时配置 .one-click.env安装目录下的.one-click.env是整套部署的运行时真相源L1726–L1937升级模式写入三方合并后的结果全新安装直接拷贝你的.env通过upsert_env_kv固化本次解析出的关键值部署角色、MIRROR、节点 IP、网卡名、CIDR、egress 管理端口、RCOW_*s3lvol 参数等DATABASE_URL在此拼出并做百分号编码外部 MySQL 与内置 MySQL 都会写供 CubeAPI 连接数据库外部 MySQL/Redis/Sentinel 的凭据成组写入并删除对立模式的旧键防止切换模式后残留配置复活内置 MinIO 密码留空时会自动生成 24 位随机密码存于此文件并用它回填CUBE_S3_*供 S3 卷插件使用最后chmod 600——因为文件里含数据库与 S3 密钥只允许 root 读取。阶段 8符号链接、systemd 单元注册与启动收尾阶段让系统活起来L1939–L1978chmod x所有二进制与脚本软链到/usr/local/bincube-runtime、containerd-shim-cube-rs、cubecli、cubevsmapdumpcompute 角色额外移除cubemastercli/cubeopsclirestore_selinux_contextsSELinux 主机上恢复安装目录的安全上下文write_l7_marks_conf生成/etc/cubeegress/l7-marks.conf让 eBPF 数据面打标与 iptables TPROXY 规则匹配使用同一组 L7 mark 值默认 HTTP0xCE010000、HTTPS0xCE020000install_systemd_units调用包内scripts/systemd/install-units.sh把单元文件装入/etc/systemd/system/若配置了外部 MySQL/Redis/MinIOmask_external_dep_services会移除并 mask 对应的本地服务单元确保 target 拉起时不会误启本地容器systemctl enable --nowcontrol 角色启动cube-sandbox-control.targetcompute 角色启动cube-sandbox-compute.target所有子服务随 target 级联拉起并设置开机自启。阶段 9quickcheck 健康检查与完成输出最后一步L1980–L1985默认ONE_CLICK_RUN_QUICKCHECK1执行scripts/one-click/quickcheck.sh在 120 秒预算内轮询各 systemd 单元、健康端点、套接字与容器状态直到全部就绪——短暂的就绪竞态不会让一次健康安装误报失败。通过后打印install complete和可用命令清单cubecli、cubemastercli、cubeopscli等。常见预检报错速查 ⚠️报错现象原因修复方法/dev/kvm not found宿主机无硬件虚拟化或未开启嵌套虚拟化开启 BIOS 虚拟化或按脚本提示用 PVM 方案改造主机文件系统类型非 XFS/data/cubelet不在 XFS 分区mkfs.xfs /dev/分区后挂载到/data/cubeletcpu写入 cgroup.subtree_control 失败multipathd等服务的实时线程阻塞了 cpu 控制器systemctl disable --now multipathd后重跑安装/sys/fs/bpf未挂载bpffs 缺失mount -t bpf bpf /sys/fs/bpfPVM 主机未设CUBE_PVM_ENABLE1会用错 guest 内核导致模板创建失败以CUBE_PVM_ENABLE1重跑 install.sh安装完成后Dashboard、smoke.sh 与关键端口 ✅安装成功后建议依次验收打开 Dashboardhttp://节点IP:12088WebUI经 nginx 反代到 CubeAPI/CubeOps运行sudo ./smoke.sh做基础健康检查systemctl status cube-sandbox-control.target确认所有子服务 active。关键端口速记方便排查网络问题组件端口用途CubeAPI3000沙箱创建/执行 APICubeMaster8089集群调度 APICubeOps3010运维管理 APICubeProxy80 / 443沙箱域名入口cube.appMinIO9000 / 9001S3 API / 本地控制台Cubelet9999节点 gRPC主节点访问计算节点WebUI12088可视化面板想停止整套服务用sudo ./down.sh想加第二台计算节点复用同一个发布包并设置ONE_CLICK_DEPLOY_ROLEcompute后执行install-compute.sh即可。理解了本文的 10 个阶段再配合deploy/one-click/README_zh.md中的完整配置映射你就能独立应对绝大多数部署与升级场景。【免费下载链接】CubeSandboxInstant, Concurrent, Secure Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考