Go to file
Colin Walters 5879b96a64 jigdo V5: Use number of objects as cache invalidation trigger
Changes in a server-side tree can cause the need for clients to import different
objects from packages. For example, turning on documentation. Another more
subtle case is where an object might "move" from package A to B by being deleted
from A - then the jigdo build process will pick the B version.

We need a "cache validation key"; a way for the server to tell the client that
the objects it should import from the package have changed. Initially I was
thinking of using the libostree "content hash" but that would be awkward as we'd
have to do an import on the server side too.

After more consideration I realized a simple *count* of the number of objects
actually works, because (as I note in a comment) changing a file in the tree
will result in it ending up in the jigdoRPM (and count as a deletion).  And
obviously adding or removing objects changes the count too.

In fact we could have done this *without* breaking the format by just having the
client start recording the number of xattr entries, but this adds greater
flexibility down the line since we can in theory change how we do cache
invalidation if we *really* need to (but at the cost of triggering clients to
redownload packages).

Note the client logic got moved around as now we need to parse all the xattrs
before we decide what packages to download.

My test case here is turning on docs - I noticed this actually affects *every*
package which was surprising to me; I expected at least some packages wouldn't
have docs. I'll double check this.

It'd be good to have a "moving object" case too which I may look at.

Closes: https://github.com/projectatomic/rpm-ostree/issues/1197

Closes: #1256
Approved by: jlebon
2018-02-16 18:45:51 +00:00
.github Add issue template, move PR template to .github 2017-03-10 16:31:27 +00:00
api-doc lib: Expose new API around basearch 2017-07-21 16:02:41 +00:00
buildutil tap-test: create tmpdir in /var/tmp 2017-06-29 16:16:54 +00:00
ci Check and display pending security advisories 2018-02-15 15:30:26 +00:00
design Introduce experimental "rpm-ostree jigdo" 2017-12-04 14:24:53 +00:00
docs compose: Add --ex-jigdo-output-rpm 2018-01-10 19:18:40 +00:00
experiments-and-demos/skopeo2ostree experiments-and-demos: New subdir with skopeo2ostree Dockerfile 2018-01-11 14:07:17 +00:00
libdnf@e1950638d5 Switch libdnf to projectatomic branch 2018-01-16 14:14:32 +00:00
libglnx@6f1ee5db14 app/status: factor out escape chars logic 2018-01-11 15:37:57 +00:00
man Add rpm-ostree usroverlay 2018-02-11 18:03:06 +00:00
packaging Add polkit support 2017-06-19 21:19:42 +00:00
scripts bwrap: Don't use --unshare-net in nspawn by default 2017-03-10 17:27:56 +00:00
src jigdo V5: Use number of objects as cache invalidation trigger 2018-02-16 18:45:51 +00:00
tests jigdo V5: Use number of objects as cache invalidation trigger 2018-02-16 18:45:51 +00:00
vagrant Vagrantfile: specify full path to using_sshfs 2016-12-21 20:00:43 +00:00
.dir-locals.el .dir-locals.el: Global Emacs style settings 2017-01-12 16:09:16 +00:00
.editorconfig tree: add vimrc and editorconfig 2017-10-02 14:36:44 +00:00
.gitmodules Switch libdnf to projectatomic branch 2018-01-16 14:14:32 +00:00
.papr.yml ci: expand rootfs on CentOS 2018-02-14 16:16:52 +00:00
.vimrc tree: add vimrc and editorconfig 2017-10-02 14:36:44 +00:00
autogen.sh build-sys: Fix use of libglnx configure bits 2017-12-15 16:32:39 +00:00
configure.ac build-sys: Fix trailing comma causing syntax error 2018-01-19 14:18:19 +00:00
CONTRIBUTING.md docs: fix ostree and CONTRIBUTING.md links 2016-07-12 15:46:53 +00:00
COPYING COPYING: Update to latest LGPLv2+ 2014-03-10 16:40:16 -04:00
git.mk build: Use git.mk, make git status clean 2016-03-10 14:36:44 -05:00
HACKING.md hacking: make it easier to use a custom tree 2017-09-01 19:58:55 +00:00
LICENSE Add a LICENSE symlink 2016-04-28 13:09:22 +00:00
Makefile-daemon.am Initial support for automatic updates 2018-01-27 23:52:43 +00:00
Makefile-decls.am daemon/config: add new rpm-ostreed.conf 2018-01-16 16:51:01 +00:00
Makefile-lib-defines.am lib: Add version macros and version checking function 2017-07-21 20:35:26 +00:00
Makefile-lib.am lib: Expose new API around basearch 2017-07-21 16:02:41 +00:00
Makefile-libdnf.am build: Always recurse build into libdnf/ 2017-04-13 16:10:14 +00:00
Makefile-libpriv.am libpriv: add new rpmostree-types.h 2018-01-27 23:52:43 +00:00
Makefile-man.am daemon/config: add new rpm-ostreed.conf 2018-01-16 16:51:01 +00:00
Makefile-rpm-ostree.am Add rpm-ostree usroverlay 2018-02-11 18:03:06 +00:00
Makefile-tests.am Initial support for automatic updates 2018-01-27 23:52:43 +00:00
Makefile.am daemon/config: add new rpm-ostreed.conf 2018-01-16 16:51:01 +00:00
mkdocs.yml docs: Start using mkdocs 2016-03-09 11:10:58 -05:00
README.md README.md: Add arch diagram, tweak wording, add talk links 2018-02-14 17:36:29 +00:00
Vagrantfile Vagrantfile: specify full path to using_sshfs 2016-12-21 20:00:43 +00:00

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

Projects using rpm-ostree

Project Atomic uses rpm-ostree to provide a minimal host for Docker formatted Linux containers. Replicating a base immutable OS, then using Docker for applications.

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: