{"id":15019956,"url":"https://github.com/rust-util-collections/ttstack","last_synced_at":"2025-10-24T20:32:07.136Z","repository":{"id":52931723,"uuid":"292987130","full_name":"rust-util-collections/TTstack","owner":"rust-util-collections","description":" A tiny private-cloud for developers and SMEs ! ","archived":false,"fork":false,"pushed_at":"2023-05-01T15:30:20.000Z","size":380,"stargazers_count":64,"open_issues_count":1,"forks_count":12,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-02-06T01:18:38.028Z","etag":null,"topics":["container","docker","firecracker","kvm","qemu"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rust-util-collections.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-09-05T02:32:30.000Z","updated_at":"2024-09-26T05:07:28.000Z","dependencies_parsed_at":"2023-07-14T03:08:09.839Z","dependency_job_id":"a3dc4577-1096-4daa-b651-b869a343b592","html_url":"https://github.com/rust-util-collections/TTstack","commit_stats":null,"previous_names":["rustcc/TTstack","rustcc/ttstack","ktmlm/ttstack"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-util-collections%2FTTstack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-util-collections%2FTTstack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-util-collections%2FTTstack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-util-collections%2FTTstack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rust-util-collections","download_url":"https://codeload.github.com/rust-util-collections/TTstack/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238035385,"owners_count":19405682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container","docker","firecracker","kvm","qemu"],"created_at":"2024-09-24T19:54:22.541Z","updated_at":"2025-10-24T20:32:02.080Z","avatar_url":"https://github.com/rust-util-collections.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tt\n\n![](https://tokei.rs/b1/github/rustcc/ttstack)\n![pipeline status](https://gitlab.com/ktmlm/ttstack/badges/master/pipeline.svg)\n![coverage report](https://gitlab.com/ktmlm/ttstack/badges/master/coverage.svg)\n\nA light-weight 'private cloud solution' for SMEs, it can bring huge help and commercial value to start-up companies.\n\n面向中小型企业的轻量级私有云平台, 可快速生成各种虚拟机环境, 为产品兼容性验证和自动化测试等场景提供高效的基础环境.\n\n\u003e #### 中小企业的效率悖论\n\u003e\n\u003e 初创的中小企业, 技术实力薄弱, 很多生产手段都停留在刀耕火种的蛮荒时代.\n\u003e\n\u003e **这就形成了一个悖论:**\n\u003e\n\u003e \u003e 原理上来讲, 初创公司要赶超大型公司, 必须要赢在效率; 确实, 在\"人\"的主观效率上, 如\"管理流程\"等方面, 大多数初创公司因为业务场景简单, 都能做到这一点；但\"技术流程\"上, 却是落后地一塌糊涂, 其结果当然是惨不忍睹, 尤如二战中的波兰骑兵, 高扬着马刀(原始工具)冲向德国人的坦克(现代工具), 不管马背上的骑士如何迅捷(\"人\"的效率高), 都干不过坐在坦克(\"工具\"的效率高)中的德国兵.\n\u003e \u003e\n\u003e \u003e 同时, 由于初创公司资金短缺, 很少有第三方的公司愿意去开拓这一块市场(无利可图); 而初创公司本身, 又没有足够的资源去自己解决, 这样就进入一个恶性循环, 永远处在\"头痛医头, 脚痛医脚\"的低效状态 , 直到公司倒闭, 或出现某个牛人以一己之力改变现状.\n\u003e\n\u003e 本项目以简洁易用为宗旨, 志在解决这个\"无人问津\"的悖论:\n\u003e\n\u003e - 专门面向中小企业设计, 分布式架构, 可扩展, 可伸缩\n\u003e - 充分利用硬件资源: 通过云平台统一调度所有硬件资源, 大幅提升资源利用率和灵活性\n\u003e - 极低的系统架设和维护成本: 运维人员通常只需半小时即可搭建起一套完整的 TT 私有云平台\n\u003e - 极低的学习和使用成本: 终端用户通常只需十分钟即可熟练使用 TT 客户端创建需要的虚拟环境\n\u003e - **省钱, 是的! 很省钱!** 你无需耗费巨资养活一个专门的云团队(OpenStack/K8S 专业人员的身价通常都很高)\n\u003e - 公有云真的很便宜? 很便利? 很安全? 用过的都知道答案\n\u003e - ...\n\n## 主要用途\n\n1. 广泛的平台兼容性验证\n    - 可在如下两个方向上做任意的交叉组合\n        1. Linux、BSD、Windows、MacOS 等各种 OS 类别与版本\n        2. AMD64、X86、AArch64、ARM、MIPS、RISC-V、SPARC 等各种硬件平台\n2. 与 DevOps 系统配合, 实现自动化的 CI\\CD 功能\n3. 用作原生编译平台\n    - 直接申请全量的原生 OS 环境, 避免交叉编译的复杂度和潜在问题\n4. 用作短期或长期的调试环境\n    - 可将 TT 视为传统的云平台, 申请虚拟机用于开发和测试\n5. 其它...\n\n## 技术特性\n\n- 整洁高效的资源管理\n    - 每个 VM 存在于独立的 Cgroup 中, 资源清理准确无误\n    - [可选] 使用 FireCracker 快速创建大量的轻量级 MicroVM\n    - [默认] 使用 zfs 的 `snapshot\\clone` 机制使 VM 获得原生 IO 性能\n    - [默认] 使用 nftables 的 `SET\\MAP` 等高级数据结构管理网络端口\n    - 服务进程运行在单独的 `PID NS` 中, 服务退出会自动销毁所有资源\n    - 通过 `Rust Drop` 机制自动管理 VM 生命周期\n    - ...\n- 分布式可扩展架构\n    - 后端支持多机分布式架构, 对用户完全透明\n- 轻量级的通信模型\n    - C\\S 两端基于 UDP\\SCTP 进行通信\n    - 自研的远程命令执行工具, 效率远超 SSH 协议\n- 镜像源与服务解耦\n    - 可随时增加受支持的系统镜像, 服务端不需要停机\n    - 支持多种虚拟机引擎, 如: Qemu\\FireCracker\\Bhyve 等\n    - 以镜像名称前缀识别虚拟机类型, 如: fire:centos-7.3:3.10.e17.x86_64\n- 使用`Rust`语言开发\n    - 安全稳定\n    - 高效运行\n    - 文档齐备\n    - 原生跨平台\n    - ...\n\n## Quick Start\n\n#### 编译\n\n```shell\nmake install\nexport PATH=~/.cargo/bin:$PATH\n```\n\n#### 启动服务端\n\n\u003e **注意**\n\u003e\n\u003e 镜像文件一定**不**能存放在'/tmp'或其子目录下, 会导致无法扫描到镜像信息(ttserver 的'/tmp'路径私有的, 与外界环境互相隔离).\n\n```shell\n# Slave Server 1\nttserver \\\n        --image-path /home/images \\\n        --cfgdb-path /tmp \\\n        --cpu-total 2 \\\n        --mem-total $[4 * 1024 * 1024] \\\n        --disk-total $[40 * 1024 * 1024] \\\n        --serv-addr 127.0.0.1 \\\n        --serv-port 20000\n\n# Slave Server 2\nttserver \\\n        --image-path /home/images \\\n        --cfgdb-path /tmp \\\n        --cpu-total 2 \\\n        --mem-total $[4 * 1024 * 1024] \\\n        --disk-total $[40 * 1024 * 1024] \\\n        --serv-addr 127.0.0.1 \\\n        --serv-port 20001\n\n# Proxy, 分布式代理服务, 负责调度各 Slave Server 的资源\nttproxy \\\n        --proxy-addr 127.0.0.1:20002 \\\n        --server-set 127.0.0.1:20000,127.0.0.1:20001\n```\n\n#### 客户端操作\n\n\u003e **Tips**\n\u003e - 完整的客户端操作文档, 参见: [《用户指南》](./documents/user_guide.md)\n\u003e - \"/home/images\" 路径下需要存在可正常启动的 Qemu 镜像文件\n\u003e - 镜像文件中的 \"/etc/rc.local\" 文件需要替换为本项目定制的 \"[rc.local](./tools/images/linux_vm/rc.local)\"\n\n```shell\n# 配置服务端地址,\n# 既可以是 Proxy 的地址,\n# 也可以是各个独立的 Slave Server 地址,\n# 这里配置成 Proxy 的地址, 以演示分布式架构的调度效果\ntt config --serv-addr 127.0.0.1 --serv-port 20002\n\n# 查看客户端本地信息\ntt status\n\n# 查看服务端资源信息\ntt status --server\n\n# 创建一个 \"ENV\",\n# TT 中的基本管理单位为 ENV (一组 VM 的集合),\n# 创建的 VM 类别是以系统前缀匹配的, 不区分大小写,\n# 如:\n#     - cent 会匹配到所有 CentOS 系统\n#     - ubuntu2004 只会匹配到 Ubuntu2004 一个系统\ntt env add TEST --os-prefix=cent,ubuntu2004\n\n# 查看已创建的 ENV 列表\ntt env list\n\n# 查看已创建的某个 ENV 的详情\ntt env show TEST\n\n# 在 ENV 的所有 VM 上执行相同的命令\ntt env run TEST --use-ssh --cmd 'ls /'\n\n# 删除 ENV,\n# 其中所有的 VM 及其相关数据都会被清理\ntt env del TEST\n```\n\n## 详细文档\n\n- [开发路线(RoadMap)](./documents/roadmap.md)\n- [终端用户指南](./documents/user_guide.md)\n- [系统管理指南](./documents/system_admin.md)\n- [架构设计与技术选型](./documents/arch_design.md)\n- [项目结构与代码规模](./documents/code_about.md)\n\n\u003e #### 接口文档\n\u003e\n\u003e ```shell\n\u003e # 在 Rust 开发环境下执行\n\u003e make doc\n\u003e ```\n\n## BUG\n\n- 单个 ENV 超过 400+ VM 时, 可能出现异常\n    - 原因是太大的 ENV 会超过 UDP 单次通信的最大载荷\n    - 目前采用了数据压缩的方式予以缓解, 后续将改用 HTTP\\SCTP\n\n## Statistics\n\n```\n# Tips: cargo install tokei\n\n(git)-[master]-% tokei\n===============================================================================\n Language            Files        Lines         Code     Comments       Blanks\n===============================================================================\n BASH                    1            5            2            1            2\n Makefile                1          108           92            0           16\n Shell                   8          278          198           30           50\n TOML                   10          234          192            1           41\n-------------------------------------------------------------------------------\n Markdown               10          662            0          492          170\n |- Shell                4          372          333           23           16\n (Total)                           1034          333          515          186\n-------------------------------------------------------------------------------\n Rust                   77         9182         7770          287         1125\n |- Markdown            71          803           41          707           55\n (Total)                           9985         7811          994         1180\n===============================================================================\n Total                 107        11644         8628         1541         1475\n===============================================================================\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frust-util-collections%2Fttstack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frust-util-collections%2Fttstack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frust-util-collections%2Fttstack/lists"}