Skip to content
βš›πŸ“¦ Hybrid image/package system with atomic upgrades and package layering
C Shell Rust Makefile M4 Python Other
Branch: master
Clone or download
cgwalters and openshift-merge-robot tree-wide: [scan-build] Add some not-null assertions
I don't understand why this doesn't happen in more places;
it may have to do with the depth of the call chain?
Anyways, add some more asserts that values aren't NULL.
Latest commit 122811a Oct 16, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Fix GitHub issue template formatting Mar 14, 2018
api-doc rust/treefile: Support dash convention for all options Mar 2, 2019
bindgen rust: Add nix as a dependency Aug 30, 2019
buildutil buildutils: Add libglnx.m4 to .gitignore Apr 5, 2018
ci ci/prow: Use cosa buildroot Oct 2, 2019
completion Add support for bash completion Mar 1, 2019
design Initial renaming pass of "jigdo" to "rojig" Feb 26, 2018
docs README.md: Add a "why" section, update background.md Sep 4, 2019
experiments-and-demos/skopeo2ostree experiments-and-demos: New subdir with skopeo2ostree Dockerfile Jan 11, 2018
libdnf @ 8a6b583 libdnf: Bump for GPG subkeys fix Apr 28, 2019
libglnx @ 470af87 Update libglnx Jul 17, 2018
man app/deploy: Gate 77 exit behind --unchanged-exit-77 Sep 24, 2019
packaging Detect whether zchunk (zck) is available at build time Oct 18, 2019
rust Add hidden `coreos-rootfs seal` command Oct 4, 2019
scripts tests: Bump to Python 3 only May 8, 2019
src tree-wide: [scan-build] Add some not-null assertions Oct 18, 2019
tests tests/vmcheck: Fix test-misc-1.sh syntax Oct 8, 2019
vagrant vagrant: Add header noting coreos-assembler May 13, 2019
.cci.jenkinsfile ci/jenkins: don't pass `GIT_COMMIT` to ci-commitmessage-submodules.sh Oct 3, 2019
.dir-locals.el .dir-locals.el: Global Emacs style settings Jan 12, 2017
.editorconfig tree: add vimrc and editorconfig Oct 2, 2017
.gitmodules Rebase to latest libdnf Mar 19, 2019
.papr.yml ci/papr: Drop `required` commit status context Oct 9, 2019
.vimrc tree: add vimrc and editorconfig Oct 2, 2017
CONTRIBUTING.md docs: fix ostree and CONTRIBUTING.md links Jul 12, 2016
COPYING.GPL Clarify license situation to include GPLv2, relicense Rust code Sep 5, 2019
COPYING.LGPL Clarify license situation to include GPLv2, relicense Rust code Sep 5, 2019
HACKING.md HACKING.md: Document libdnf vendoring rationale Oct 18, 2019
LICENSE Clarify license situation to include GPLv2, relicense Rust code Sep 5, 2019
Makefile-bash.am build: Hook up bash completions Mar 7, 2019
Makefile-daemon.am Move D-Bus conf file to $(datadir)/dbus-1/system.d Sep 17, 2019
Makefile-decls.am packaging: Support vendoring the Rust sources Jun 6, 2018
Makefile-extra.inc ci: Verify rustfmt Nov 21, 2018
Makefile-lib-defines.am lib: Add version macros and version checking function Jul 21, 2017
Makefile-lib.am Makefile-libs.am: Work around `g-ir-scanner` issues with clang Mar 19, 2019
Makefile-libdnf.am Rebase to latest libdnf Mar 19, 2019
Makefile-libpriv.am app,daemon: Use public libostree's kargs API Aug 21, 2019
Makefile-man.am man: Add rpm-ostreed-automatic page Mar 7, 2018
Makefile-rpm-ostree.am Add hidden `coreos-rootfs seal` command Oct 4, 2019
Makefile-tests.am app,daemon: Use public libostree's kargs API Aug 21, 2019
Makefile.am build: Bump minimum glib2 version to 2.56 Mar 23, 2019
OWNERS OWNERS: New file for Prow integration Sep 27, 2019
README.md Clarify license situation to include GPLv2, relicense Rust code Sep 5, 2019
Vagrantfile vagrant: Use a Fedora 29 container May 9, 2019
autogen.sh build-sys: Fix use of libglnx configure bits Dec 15, 2017
configure.ac Detect whether zchunk (zck) is available at build time Oct 18, 2019
git.mk build: Use git.mk, make git status clean Mar 10, 2016
mkdocs.yml docs: Start using mkdocs Mar 9, 2016

README.md

rpm-ostree: A true hybrid image/package system

rpm-ostree combines libostree (an image system), with libdnf (a package system), bringing many of the benefits of both together.

                         +-----------------------------------------+
                         |                                         |
                         |       rpm-ostree (daemon + CLI)         |
                  +------>                                         <---------+
                  |      |     status, upgrade, rollback,          |         |
                  |      |     pkg layering, initramfs --enable    |         |
                  |      |                                         |         |
                  |      +-----------------------------------------+         |
                  |                                                          |
                  |                                                          |
                  |                                                          |
+-----------------|-------------------------+        +-----------------------|-----------------+
|                                           |        |                                         |
|         libostree (image system)          |        |            libdnf (pkg system)          |
|                                           |        |                                         |
|   C API, hardlink fs trees, system repo,  |        |    ties together libsolv (SAT solver)   |
|   commits, atomic bootloader swap         |        |    with librepo (RPM repo downloads)    |
|                                           |        |                                         |
+-------------------------------------------+        +-----------------------------------------+

For more information, see the online manual: Read The Docs (rpm-ostree)

Features:

  • Transactional, background image-based (versioned/checksummed) upgrades
  • OS rollback without affecting user data (/usr but not /etc, /var) via libostree
  • Client-side package layering (and overrides)
  • Easily make your own: rpm-ostree compose tree and CoreOS Assembler

Projects using rpm-ostree

The OSTree project is independent of distributions and agnostic to how content is delivered and managed; it's used today by e.g. Debian, Fedora, and OpenEmbedded derived systems among others. There are some examples in the OSTree github.

In contrast, rpm-ostree is intended to be tightly integrated with the Fedora ecosystem. Today it is the underlying update mechanism of Fedora CoreOS as well as its derivative RHEL CoreOS. It is also used by Fedora IoT and Fedora Silverblue.

Originally, it was productized as part of Project Atomic.

Why?

Package systems such as apt and yum are highly prevalent in Linux-based operating systems. The core premise of rpm-ostree is that image-based updates should be the default. This provides a high degree of predictability and resiliency. However, where rpm-ostree is fairly unique in the ecosystem is supporting client-side package layering and overrides; deeply integrating RPM as an (optional) layer on top of OSTree.

A good way to think of package layering is recasting RPMs as "operating system extensions", similar to how browser extensions work (although before those were sandboxed). One can use package layering for components not easily containerized, such as PAM modules, custom shells, etc.

Further, one can easily use rpm-ostree override replace to override the kernel or userspace components with the very same RPMs shipped to traditional systems. The Fedora project for example continues to only have one kernel build.

Layering and overrides are still built on top of the default OSTree engine - installing and updating client-side packages constructs a new filesystem root, it does not by default affect your booted root. This preserves the "image" nature of the system.

Manual

For more information, see the online manual: Read The Docs (rpm-ostree)

Talks and media

A number of Project Atomic talks are available; see for example this post which has a bigger collection that also includes talks on containers.

rpm-ostree specific talks:

License

rpm-ostree includes code licensed under GPLv2+, LGPLv2+, (Apache 2.0 OR MIT). For more information, see LICENSE.

You can’t perform that action at this time.