]> Anatomy of an OSTree repository Core object types and data model OSTree is deeply inspired by git. It is worth taking some time to familiarize yourself with Git Internals, as this section will assume some knowledge of how git works. Like git, OSTree is a userspace versioning filesystem. Its object types are similar to git; it has commit objects and content objects. Git has "tree" objects, whereas OSTree splits them into "dirtree" and "dirmeta" objects. But unlike git, OSTree's checksums are SHA256. Its content objects include uid, gid, and extended attributes (but still no timestamps). Also like git, each commit in OSTree can have a parent. It is designed to store a history of your binary builds, just like git stores a history of source control. However, OSTree also makes it easy to delete data, under the assumption that you can regenerate it from source code. Repository types and locations Also unlike git, an OSTree repository can be in one of two separate modes: bare and archive-z2. A bare repository is one where content files are just stored as regular files; it's designed to be the source of a "hardlink farm", where each operating system checkout is merely links into it. If you want to store files owned by e.g. root in this mode, you must run OSTree as root. In contrast, the archive-z2 mode is designed for serving via plain HTTP. Like tar files, it can be read/written by non-root users. On an OSTree-deployed system, the "system repository" is /ostree/repo. It can be read by any uid, but only written by root. Unless the --repo argument is given to the ostree command, it will operate on the system repository. Refs Like git, OSTree uses "refs" to which are text files that point to particular commits (i.e. filesystem trees). For example, the gnome-ostree operating system creates trees named like gnome-ostree/buildmaster/x86_64-runtime and gnome-ostree/buildmaster/x86_64-devel-debug. These two refs point to two different generated filesystem trees. In this example, the "runtime" tree contains just enough to run a basic GNOME system, and "devel-debug" contains all of the developer tools. The ostree supports a simple syntax using the carat ^ to refer to the parent of a given commit. For example, gnome-ostree/buildmaster/x86_64-runtime^ refers to the previous build, and gnome-ostree/buildmaster/x86_64-runtime^^ refers to the one before that.