mirror of
https://github.com/ostreedev/ostree.git
synced 2025-01-18 10:04:17 +03:00
442 lines
21 KiB
HTML
442 lines
21 KiB
HTML
|
||
|
||
<!DOCTYPE html>
|
||
|
||
<html lang="en-US">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||
|
||
<link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
|
||
|
||
|
||
|
||
|
||
<script src="/ostree/assets/js/vendor/lunr.min.js"></script>
|
||
|
||
|
||
|
||
|
||
<script src="/ostree/assets/js/just-the-docs.js"></script>
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
||
|
||
|
||
|
||
<!-- Begin Jekyll SEO tag v2.8.0 -->
|
||
<title>OSTree Overview | ostreedev/ostree</title>
|
||
<meta name="generator" content="Jekyll v3.9.5" />
|
||
<meta property="og:title" content="OSTree Overview" />
|
||
<meta property="og:locale" content="en_US" />
|
||
<meta name="description" content="ostree documentation" />
|
||
<meta property="og:description" content="ostree documentation" />
|
||
<link rel="canonical" href="https://ostreedev.github.io/ostree/introduction/" />
|
||
<meta property="og:url" content="https://ostreedev.github.io/ostree/introduction/" />
|
||
<meta property="og:site_name" content="ostreedev/ostree" />
|
||
<meta property="og:type" content="website" />
|
||
<meta name="twitter:card" content="summary" />
|
||
<meta property="twitter:title" content="OSTree Overview" />
|
||
<script type="application/ld+json">
|
||
{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"OSTree Overview","url":"https://ostreedev.github.io/ostree/introduction/"}</script>
|
||
<!-- End Jekyll SEO tag -->
|
||
|
||
|
||
|
||
|
||
</head>
|
||
|
||
<body>
|
||
<a class="skip-to-main" href="#main-content">Skip to main content</a>
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
|
||
<symbol id="svg-link" viewBox="0 0 24 24">
|
||
<title>Link</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
|
||
<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
|
||
</svg>
|
||
</symbol>
|
||
|
||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||
<title>Menu</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
|
||
<line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
|
||
</svg>
|
||
</symbol>
|
||
|
||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||
<title>Expand</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
|
||
<polyline points="9 18 15 12 9 6"></polyline>
|
||
</svg>
|
||
</symbol>
|
||
|
||
<!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
|
||
<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
|
||
<title id="svg-external-link-title">(external link)</title>
|
||
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
|
||
</symbol>
|
||
|
||
|
||
<symbol id="svg-doc" viewBox="0 0 24 24">
|
||
<title>Document</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
|
||
<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
|
||
</svg>
|
||
</symbol>
|
||
|
||
<symbol id="svg-search" viewBox="0 0 24 24">
|
||
<title>Search</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
|
||
<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
||
</svg>
|
||
</symbol>
|
||
|
||
|
||
|
||
<!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
|
||
<symbol id="svg-copy" viewBox="0 0 16 16">
|
||
<title>Copy</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
|
||
<path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
|
||
<path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
|
||
</svg>
|
||
</symbol>
|
||
<symbol id="svg-copied" viewBox="0 0 16 16">
|
||
<title>Copied</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
|
||
<path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
|
||
<path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
|
||
</svg>
|
||
</symbol>
|
||
|
||
|
||
</svg>
|
||
|
||
<div class="side-bar">
|
||
<div class="site-header">
|
||
<a href="/ostree/" class="site-title lh-tight">
|
||
ostreedev/ostree
|
||
|
||
</a>
|
||
<a href="#" id="menu-button" class="site-button">
|
||
<svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
|
||
</a>
|
||
</div>
|
||
<nav aria-label="Main" id="site-nav" class="site-nav">
|
||
|
||
|
||
<ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item active"><a href="/ostree/introduction/" class="nav-list-link active">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/atomic-rollbacks/" class="nav-list-link">Atomic Rollbacks</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/var/" class="nav-list-link">OSTree and /var handling</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/authenticated-repos/" class="nav-list-link">Handling access to authenticated remote repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/copying-deltas/" class="nav-list-link">Static deltas for offline updates</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/composefs/" class="nav-list-link">Using composefs with OSTree</a></li><li class="nav-list-item"><a href="/ostree/bootloaders/" class="nav-list-link">Bootloaders</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
|
||
|
||
</nav>
|
||
|
||
|
||
|
||
<footer class="site-footer">
|
||
This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
|
||
</footer>
|
||
|
||
</div>
|
||
|
||
<div class="main" id="top">
|
||
<div id="main-header" class="main-header">
|
||
|
||
|
||
|
||
<div class="search">
|
||
<div class="search-input-wrap">
|
||
<input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
|
||
<label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
|
||
</div>
|
||
<div id="search-results" class="search-results"></div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<nav aria-label="Auxiliary" class="aux-nav">
|
||
<ul class="aux-nav-list">
|
||
|
||
<li class="aux-nav-list-item">
|
||
<a href="https://github.com/ostreedev/ostree" class="site-button"
|
||
|
||
>
|
||
OSTree on GitHub
|
||
</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
|
||
</div>
|
||
|
||
<div id="main-content-wrap" class="main-content-wrap">
|
||
|
||
|
||
|
||
|
||
<div id="main-content" class="main-content" role="main">
|
||
|
||
<h1 class="no_toc" id="ostree-overview">
|
||
|
||
|
||
<a href="#ostree-overview" class="anchor-heading" aria-labelledby="ostree-overview"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OSTree Overview
|
||
|
||
|
||
</h1>
|
||
|
||
|
||
<ol id="markdown-toc">
|
||
<li><a href="#introduction" id="markdown-toc-introduction">Introduction</a></li>
|
||
<li><a href="#hello-world-example" id="markdown-toc-hello-world-example">Hello World example</a></li>
|
||
<li><a href="#comparison-with-package-managers" id="markdown-toc-comparison-with-package-managers">Comparison with “package managers”</a></li>
|
||
<li><a href="#comparison-with-blockimage-replication" id="markdown-toc-comparison-with-blockimage-replication">Comparison with block/image replication</a></li>
|
||
<li><a href="#atomic-transitions-between-parallel-installable-read-only-filesystem-trees" id="markdown-toc-atomic-transitions-between-parallel-installable-read-only-filesystem-trees">Atomic transitions between parallel-installable read-only filesystem trees</a></li>
|
||
</ol>
|
||
|
||
<!-- SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) -->
|
||
<h2 id="introduction">
|
||
|
||
|
||
<a href="#introduction" class="anchor-heading" aria-labelledby="introduction"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Introduction
|
||
|
||
|
||
</h2>
|
||
|
||
|
||
<p>OSTree is an upgrade system for Linux-based operating systems that
|
||
performs atomic upgrades of complete filesystem trees. It is
|
||
not a package system; rather, it is intended to complement them.
|
||
A primary model is composing packages on a server, and then
|
||
replicating them to clients.</p>
|
||
|
||
<p>The underlying architecture might be summarized as “git for
|
||
operating system binaries”. It operates in userspace, and will
|
||
work on top of any Linux filesystem. At its core is a git-like
|
||
content-addressed object store with branches (or “refs”) to track
|
||
meaningful filesystem trees within the store. Similarly, one can
|
||
check out or commit to these branches.</p>
|
||
|
||
<p>Layered on top of that is bootloader configuration, management of
|
||
<code class="language-plaintext highlighter-rouge">/etc</code>, and other functions to perform an upgrade beyond just
|
||
replicating files.</p>
|
||
|
||
<p>You can use OSTree standalone in the pure replication model,
|
||
but another approach is to add a package manager on top,
|
||
thus creating a hybrid tree/package system.</p>
|
||
<h2 id="hello-world-example">
|
||
|
||
|
||
<a href="#hello-world-example" class="anchor-heading" aria-labelledby="hello-world-example"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Hello World example
|
||
|
||
|
||
</h2>
|
||
|
||
|
||
<p>OSTree is mostly used as a library, but a quick tour of using its
|
||
CLI tools can give a general idea of how it works at its most
|
||
basic level.</p>
|
||
|
||
<p>You can create a new OSTree repository using <code class="language-plaintext highlighter-rouge">init</code>:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo init
|
||
</code></pre></div></div>
|
||
|
||
<p>This will create a new <code class="language-plaintext highlighter-rouge">repo</code> directory containing your
|
||
repository. Feel free to inspect it.</p>
|
||
|
||
<p>Now, let’s prepare some data to add to the repo:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ mkdir tree
|
||
$ echo "Hello world!" > tree/hello.txt
|
||
</code></pre></div></div>
|
||
|
||
<p>We can now import our <code class="language-plaintext highlighter-rouge">tree/</code> directory using the <code class="language-plaintext highlighter-rouge">commit</code>
|
||
command:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo commit --branch=foo tree/
|
||
</code></pre></div></div>
|
||
|
||
<p>This will create a new branch <code class="language-plaintext highlighter-rouge">foo</code> pointing to the full tree
|
||
imported from <code class="language-plaintext highlighter-rouge">tree/</code>. In fact, we could now delete <code class="language-plaintext highlighter-rouge">tree/</code> if we
|
||
wanted to.</p>
|
||
|
||
<p>To check that we indeed now have a <code class="language-plaintext highlighter-rouge">foo</code> branch, you can use the
|
||
<code class="language-plaintext highlighter-rouge">refs</code> command:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo refs
|
||
foo
|
||
</code></pre></div></div>
|
||
|
||
<p>We can also inspect the filesystem tree using the <code class="language-plaintext highlighter-rouge">ls</code> and <code class="language-plaintext highlighter-rouge">cat</code>
|
||
commands:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo ls foo
|
||
d00775 1000 1000 0 /
|
||
-00664 1000 1000 13 /hello.txt
|
||
$ ostree --repo=repo cat foo /hello.txt
|
||
Hello world!
|
||
</code></pre></div></div>
|
||
|
||
<p>And finally, we can check out our tree from the repository:</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo checkout foo tree-checkout/
|
||
$ cat tree-checkout/hello.txt
|
||
Hello world!
|
||
</code></pre></div></div>
|
||
<h2 id="comparison-with-package-managers">
|
||
|
||
|
||
<a href="#comparison-with-package-managers" class="anchor-heading" aria-labelledby="comparison-with-package-managers"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Comparison with “package managers”
|
||
|
||
|
||
</h2>
|
||
|
||
|
||
<p>Because OSTree is designed for deploying core operating
|
||
systems, a comparison with traditional “package managers” such
|
||
as dpkg and rpm is illustrative. Packages are traditionally
|
||
composed of partial filesystem trees with metadata and scripts
|
||
attached, and these are dynamically assembled on the client
|
||
machine, after a process of dependency resolution.</p>
|
||
|
||
<p>In contrast, OSTree only supports recording and deploying
|
||
<em>complete</em> (bootable) filesystem trees. It
|
||
has no built-in knowledge of how a given filesystem tree was
|
||
generated or the origin of individual files, or dependencies,
|
||
descriptions of individual components. Put another way, OSTree
|
||
only handles delivery and deployment; you will likely still want
|
||
to include inside each tree metadata about the individual
|
||
components that went into the tree. For example, a system
|
||
administrator may want to know what version of OpenSSL was
|
||
included in your tree, so you should support the equivalent of
|
||
<code class="language-plaintext highlighter-rouge">rpm -q</code> or <code class="language-plaintext highlighter-rouge">dpkg -L</code>.</p>
|
||
|
||
<p>The OSTree core emphasizes replicating read-only OS trees via
|
||
HTTP, and where the OS includes (if desired) an entirely
|
||
separate mechanism to install applications, stored in <code class="language-plaintext highlighter-rouge">/var</code> if they’re system global, or
|
||
<code class="language-plaintext highlighter-rouge">/home</code> for per-user
|
||
application installation. An example application mechanism is
|
||
<a href="http://docker.io/">http://docker.io/</a></p>
|
||
|
||
<p>However, it is entirely possible to use OSTree underneath a
|
||
package system, where the contents of <code class="language-plaintext highlighter-rouge">/usr</code> are computed on the client.
|
||
For example, when installing a package, rather than changing the
|
||
currently running filesystem, the package manager could assemble
|
||
a new filesystem tree that layers the new packages on top of a
|
||
base tree, record it in the local OSTree repository, and then
|
||
set it up for the next boot. To support this model, OSTree
|
||
provides an (introspectable) C shared library.</p>
|
||
<h2 id="comparison-with-blockimage-replication">
|
||
|
||
|
||
<a href="#comparison-with-blockimage-replication" class="anchor-heading" aria-labelledby="comparison-with-blockimage-replication"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Comparison with block/image replication
|
||
|
||
|
||
</h2>
|
||
|
||
|
||
<p>OSTree shares some similarity with “dumb” replication and
|
||
stateless deployments, such as the model common in “cloud”
|
||
deployments where nodes are booted from an (effectively)
|
||
readonly disk, and user data is kept on a different volumes.
|
||
The advantage of “dumb” replication, shared by both OSTree and
|
||
the cloud model, is that it’s <em>reliable</em>
|
||
and <em>predictable</em>.</p>
|
||
|
||
<p>But unlike many default image-based deployments, OSTree supports
|
||
exactly two persistent writable directories that are preserved across
|
||
upgrades: <code class="language-plaintext highlighter-rouge">/etc</code> and <code class="language-plaintext highlighter-rouge">/var</code>.</p>
|
||
|
||
<p>Because OSTree operates at the Unix filesystem layer, it works
|
||
on top of any filesystem or block storage layout; it’s possible
|
||
to replicate a given filesystem tree from an OSTree repository
|
||
into plain ext4, BTRFS, XFS, or in general any Unix-compatible
|
||
filesystem that supports hard links. Note: OSTree will
|
||
transparently take advantage of some BTRFS features if deployed
|
||
on it.</p>
|
||
|
||
<p>OSTree is orthogonal to virtualization mechanisms like AMIs and qcow2
|
||
images, though it’s most useful though if you plan to update stateful
|
||
VMs in-place, rather than generating new images.</p>
|
||
|
||
<p>In practice, users of “bare metal” configurations will find the OSTree
|
||
model most useful.</p>
|
||
<h2 id="atomic-transitions-between-parallel-installable-read-only-filesystem-trees">
|
||
|
||
|
||
<a href="#atomic-transitions-between-parallel-installable-read-only-filesystem-trees" class="anchor-heading" aria-labelledby="atomic-transitions-between-parallel-installable-read-only-filesystem-trees"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Atomic transitions between parallel-installable read-only filesystem trees
|
||
|
||
|
||
</h2>
|
||
|
||
|
||
<p>Another deeply fundamental difference between both package
|
||
managers and image-based replication is that OSTree is
|
||
designed to parallel-install <em>multiple versions</em> of multiple
|
||
<em>independent</em> operating systems. OSTree
|
||
relies on a new toplevel <code class="language-plaintext highlighter-rouge">ostree</code> directory; it can in fact
|
||
parallel install inside an existing OS or distribution
|
||
occupying the physical <code class="language-plaintext highlighter-rouge">/</code> root.</p>
|
||
|
||
<p>On each client machine, there is an OSTree repository stored
|
||
in <code class="language-plaintext highlighter-rouge">/ostree/repo</code>, and a set of “deployments” stored in <code class="language-plaintext highlighter-rouge">/ostree/deploy/$STATEROOT/$CHECKSUM</code>.
|
||
Each deployment is primarily composed of a set of hardlinks
|
||
into the repository. This means each version is deduplicated;
|
||
an upgrade process only costs disk space proportional to the
|
||
new files, plus some constant overhead.</p>
|
||
|
||
<p>The model OSTree emphasizes is that the OS read-only content
|
||
is kept in the classic Unix <code class="language-plaintext highlighter-rouge">/usr</code>; it comes with code to
|
||
create a Linux read-only bind mount to prevent inadvertent
|
||
corruption. There is exactly one <code class="language-plaintext highlighter-rouge">/var</code> writable directory shared
|
||
between each deployment for a given OS. The OSTree core code
|
||
does not touch content in this directory; it is up to the code
|
||
in each operating system for how to manage and upgrade state.</p>
|
||
|
||
<p>Finally, each deployment has its own writable copy of the
|
||
configuration store <code class="language-plaintext highlighter-rouge">/etc</code>. On upgrade, OSTree will
|
||
perform a basic 3-way diff, and apply any local changes to the
|
||
new copy, while leaving the old untouched.</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<hr>
|
||
<footer>
|
||
|
||
|
||
<p class="text-small text-grey-dk-100 mb-0">Copyright © <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
|
||
|
||
|
||
<div class="d-flex mt-2">
|
||
|
||
|
||
<p class="text-small text-grey-dk-000 mb-0">
|
||
<a href="https://github.com/ostreedev/ostree/tree/main/docs/introduction.md" id="edit-this-page">Edit this page on GitHub</a>
|
||
</p>
|
||
|
||
</div>
|
||
|
||
</footer>
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="search-overlay"></div>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
</body>
|
||
</html>
|
||
|