turnip
项目描述
turnip
turnip是一个灵活且可扩展的Git服务器套件,使用Python和Twisted编写。
各种服务器提供可定制的虚拟主机,具有灵活的认证和授权,以及从前端到存储层的单个水平扩展。
这里的所有 Python 接口均不应被视为稳定。
架构
turnip 的架构旨在最大化简单性、可扩展性和鲁棒性。每个服务器提供大约一个服务,安装时只需运行所需的服务器。大多数服务器放弃本地状态以简化横向扩展,而那些有本地状态的服务器可以复制和/或分片它。
有两个独立的服务器堆栈:打包和 API。打包堆栈通过打包协议(git://)、智能 HTTP 或智能 SSH 与 Git 客户端通信。HTTP 和 SSH 前端解开隧道打包协议,并将其作为正常打包协议连接转发到中端。独立 HTTP API 堆栈提供对存储库高级读写操作的编程远程接口。
- 前端
打包
智能 HTTP
智能 SSH
HTTP API
- 中端
打包虚拟化
API 虚拟化
- 后端
打包
API
内部协议
turnip 使用 Git 打包协议的扩展来处理其服务器之间的大部分通信。唯一的变化是 turnip 请求可以指定任意命名的参数,而不仅仅是主机名。
Git 打包协议的 git-proto-request 相关部分如下所示(以 ABNF 表示)
git-proto-request = request-command SP pathname NUL [ host-parameter NUL ] host-parameter = "host=" hostname [ ":" port ]
turnip-proto-request 将其更改为以下内容
turnip-proto-request = request-command SP pathname NUL \*( param NUL ) param = param-name "=" param-value param-name = \*( %x01-3C / %x3E-FF ) ; exclude NUL and = param-value = \*%x01-FF ; exclude NUL
目前仅实现了两个附加参数,即“turnip-stateless-rpc”和“turnip-advertise-refs”,它们被智能 HTTP 服务器用于代理到标准打包协议。
开发
设置
创建一个可信容器(可选)
sudo lxc-create -t ubuntu -n turnip.trusty -- -r trusty -a amd64 -b $USER
运行以下命令
sudo add-apt-repository ppa:launchpad/ppa sudo apt-get update cat system-dependencies.txt | sudo xargs apt-get install -y --no-install-recommends
运行
可以使用以下命令启动打包智能 HTTP/SSH 服务
python turnipserver.py
可以使用以下命令启动 HTTP API
make run-api
部署
Turnip 可以通过 turnip juju 魅力进行部署,可从以下位置获取
git clone https://git.launchpad.net/~canonical-launchpad-branches/charms/+source/turnip
使用本地提供程序进行部署
juju switch local juju bootstrap juju deploy –repository=/path/to/loca/charm/repo/root local:trusty/turnip
turnip 的新闻
0.1.1 (2015-06-11)
添加了合并检测 API。
0.1 (2015-06-02)
初始发布。
turnip-0.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f70dab7061028a97d2b2447e2462c20497baac587e5c7ff54e9140212fd91308 |
|
MD5 | 278a32dca03c9d261f984269f73f4614 |
|
BLAKE2b-256 | 9a61ec0f40726ac5237cec5484aae030724e7d31b8d24c4f04356208707b3402 |