Distributing Images¶
A Tako server is a regular http server, with a particular directory layout. The origin uri points to a directory that contains the manifest file and the image store.
manifest
is a file that lists all available versions and their SHA256 digests. The manifest is signed. See Manifest Format for more information about the manifest format.store
is a directory that contains all images. Files are named after their digest.
Images can be added to the directory with tako store
. The most convenient way to maintain the server directory is to have a local copy that Tako can act on, and to sync that to a server.
Immutable Images¶
Tako is designed as an append-only system where images are immutable. Changing an image is not possible: publish it as a new version instead. The Tako client tako fetch
stores a copy of the manifest locally, and when it downloads a new version of the manifest, it must be a superset of the local manifest. If the hash of a particular version has changed in the remote manifest, or if a version was removed, the client rejects the new manifest, even if it has a valid signature.
In some occasions, it might be necessary to remove a previously published image. To do so, simply stop serving the image by removing it from the store
directory. The manifest will still list the image. If a client selects that particular image as a candidate to download, the tako fetch
will fail. This is generally not an issue if a newer compatible version is available. If this is not the case, you can configure the server to serve “410 Gone” on the url of the removed image. In the future — the following has not yet been implemented — if tako fetch
encounters a 410 it will not fail, but instead select an earlier compatible version and try again.