Skip to main content

turnip

Project description

======
turnip
======

turnip is a flexible and scalable Git server suite written in Python
using Twisted.

The various servers provide customisable virtual hosting, with flexible
authentication and authorisation, and individual horizontal scaling from
the frontend to the storage layer.

None of the Python interfaces here should be considered stable.


Architecture
------------

turnip's architecture is designed to maximise simplicity, scalability
and robustness. Each server provides roughly one service, and an
installation need only run the servers that it desires. Most servers
eschew local state to ease horizontal scaling, and those that do have
local state can replicate and/or shard it.

There are two separate server stacks: pack and API. The pack stack
communicates with Git clients via the pack protocol (git://), smart
HTTP, or smart SSH. The HTTP and SSH frontends unwrap the tunneled pack
protocol, and forward it onto the midends as a normal pack protocol
connection. The separate HTTP API stack provides a programmatic remote
interface to high-level read and write operations on the repositories


Frontends:
* Pack
* Smart HTTP
* Smart SSH
* HTTP API

Midends:
* Pack virtualisation
* API virtualisation

Backends:
* Pack
* API


Internal protocol
-----------------

turnip uses an extension of the Git pack protocol for most communication
between its servers. The only change is that turnip requests can specify
arbitrary named parameters, not just a hostname.

The relevant part of the Git pack protocol's git-proto-request is
represented in ABNF as follows:

git-proto-request = request-command SP pathname NUL [ host-parameter NUL ]
host-parameter = "host=" hostname [ ":" port ]

turnip-proto-request alters it to this:

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

The only additional parameters implemented today are
'turnip-stateless-rpc' and 'turnip-advertise-refs', which are used by
the smart HTTP server to proxy to the standard pack protocol.


Development
-----------

Pack smart-http/ssh services can be started with:

python turnipserver.py

The HTTP API can be started with:

make run-api


Deployment
----------

Turnip is deployed with the turnip juju charm, available from bzr branch lp:~canonical-launchpad-branches/charms/trusty/turnip/devel.

To deploy with the local provider:

juju switch local
juju bootstrap
juju deploy --repository=/path/to/loca/charm/repo/root local:trusty/turnip


===============
NEWS for turnip
===============

0.1 (2015-06-02)
================

- Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

turnip-0.1.tar.gz (68.5 kB view details)

Uploaded Source

File details

Details for the file turnip-0.1.tar.gz.

File metadata

  • Download URL: turnip-0.1.tar.gz
  • Upload date:
  • Size: 68.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for turnip-0.1.tar.gz
Algorithm Hash digest
SHA256 d805c7f49792eeee217e0ef4e32cde0492cb01df88d3bc5b6e671fbef98b347f
MD5 c7516268013a69b2f0332e0a47ff6c02
BLAKE2b-256 b4723b97d2fd1c12c1fe5a3f80453207a68a49b567c144a0b690235fc2fb2b80

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page