ostree.git
5 years agoMerge pull request #2226 from alexlarsson/fix-gir-arg
OpenShift Merge Robot [Wed, 28 Oct 2020 17:31:50 +0000 (13:31 -0400)]
Merge pull request #2226 from alexlarsson/fix-gir-arg

ostree_repo_gpg_sign_data: Fix API doc argument name

5 years agoostree_repo_gpg_sign_data: Fix API doc argument name
Alexander Larsson [Wed, 28 Oct 2020 14:53:18 +0000 (15:53 +0100)]
ostree_repo_gpg_sign_data: Fix API doc argument name

I got:
src/libostree/ostree-repo.c:5232: Warning: OSTree: ostree_repo_gpg_sign_data: unknown parameter 'out_signature' in documentation comment, should be 'out_signatures'

5 years agoMerge pull request #2224 from stb-tester/bootloader-refactorings
OpenShift Merge Robot [Wed, 28 Oct 2020 10:39:57 +0000 (06:39 -0400)]
Merge pull request #2224 from stb-tester/bootloader-refactorings

Bootloader probing and construction refactoring

5 years agoMerge pull request #2225 from jlebon/pr/clear-timer
OpenShift Merge Robot [Tue, 27 Oct 2020 19:10:58 +0000 (15:10 -0400)]
Merge pull request #2225 from jlebon/pr/clear-timer

lib/fetch-curl: Unref timeout source

5 years agolib/fetch-curl: Unref timeout source
Jonathan Lebon [Tue, 27 Oct 2020 15:58:14 +0000 (11:58 -0400)]
lib/fetch-curl: Unref timeout source

The timeout timer should always be one-shot, so let's just always
destroy it in the callback. The main context has its own ref on it, so
it won't be freed behind its back.

This *should* fix a leak that was brought up in
https://bugzilla.redhat.com/show_bug.cgi?id=1891761.

Reported-by: Milan Crha <mcrha@redhat.com>
5 years agolib/fetcher-curl: Use G_SOURCE_REMOVE instead of FALSE
Jonathan Lebon [Tue, 27 Oct 2020 15:57:00 +0000 (11:57 -0400)]
lib/fetcher-curl: Use G_SOURCE_REMOVE instead of FALSE

They're equivalent, though I prefer the former because it's more
descriptive and it makes it really obvious that it's a `GSource`
callback.

5 years agofixup! Refactor `ostree_sysroot_query_bootloader`
William Manley [Tue, 27 Oct 2020 13:24:46 +0000 (13:24 +0000)]
fixup! Refactor `ostree_sysroot_query_bootloader`

5 years agofixup! Refactor: Centralise choosing the appropriate bootloader
William Manley [Tue, 27 Oct 2020 12:35:29 +0000 (12:35 +0000)]
fixup! Refactor: Centralise choosing the appropriate bootloader

5 years agoTests: Refactor bootloader-entries-crosscheck
William Manley [Tue, 14 Jul 2020 12:32:30 +0000 (13:32 +0100)]
Tests: Refactor bootloader-entries-crosscheck

I've made this use functions to make it easier to add support for more
bootloaders.  Seeing as there will be a big diff anyway I've also adjusted
the formatting to make it pep8 compliant.

5 years agoRefactor `ostree_sysroot_query_bootloader`
William Manley [Tue, 14 Jul 2020 11:53:17 +0000 (12:53 +0100)]
Refactor `ostree_sysroot_query_bootloader`

This is more regular, so will make it easier to add more bootloader types
in the future.

5 years agoAdd support for explicitly requesting any specific bootloader type
William Manley [Mon, 6 Jul 2020 15:12:29 +0000 (16:12 +0100)]
Add support for explicitly requesting any specific bootloader type

...with the `sysroot.bootloader` configuration option.  This can be useful
when converting a system to use `ostree` which doesn't currently have a
bootloader configuration that `ostree` can automatically detect, and is
also useful in combination with the `--sysroot` option when provisioning a
rootfs for systems other than the one you're running `ostree admin deploy`
on.

5 years agoRefactor: sysroot.bootloader: Store enum value rather than string
William Manley [Mon, 6 Jul 2020 14:50:28 +0000 (15:50 +0100)]
Refactor: sysroot.bootloader: Store enum value rather than string

It's easier to extend and it centralises the config parsing.  In other
places we will no longer need to use `g_str_equal` to match these values,
a `switch` statement will be sufficient.

5 years agoRefactor: Centralise choosing the appropriate bootloader
William Manley [Mon, 6 Jul 2020 13:54:31 +0000 (14:54 +0100)]
Refactor: Centralise choosing the appropriate bootloader

In preparation for enhancing `_ostree_sysroot_query_bootloader`

5 years agoostree_repo_get_bootloader: Document transfer none
William Manley [Mon, 6 Jul 2020 13:58:35 +0000 (14:58 +0100)]
ostree_repo_get_bootloader: Document transfer none

I think this may affect bindings too.

5 years agoMerge pull request #2188 from alexlarsson/delta-indexes
OpenShift Merge Robot [Fri, 23 Oct 2020 13:05:24 +0000 (09:05 -0400)]
Merge pull request #2188 from alexlarsson/delta-indexes

Add indexes for deltas outside of the summary

5 years agoostree pull: Add more g_debug spew around fetching deltas
Alexander Larsson [Tue, 20 Oct 2020 13:51:08 +0000 (15:51 +0200)]
ostree pull: Add more g_debug spew around fetching deltas

This is useful to debug what is happening when downloading via deltas.

5 years agoAdd ostree_repo_gpg_sign_data()
Alexander Larsson [Tue, 20 Oct 2020 06:37:35 +0000 (08:37 +0200)]
Add ostree_repo_gpg_sign_data()

This is similar to ostree_sign_data() but for the old gpg code.
Flatpak will need this to reproduce a signed summary.

5 years agotests: Add a testcase to ensure we're not using the summary if we don't need it
Alexander Larsson [Fri, 9 Oct 2020 14:30:29 +0000 (16:30 +0200)]
tests: Add a testcase to ensure we're not using the summary if we don't need it

With deltas outside the summary, if a commit is specified when pulling
we don't download the summary. Verify this.

5 years agopull: Only download summary if we need it for the pull operation
Alexander Larsson [Fri, 23 Oct 2020 11:05:25 +0000 (13:05 +0200)]
pull: Only download summary if we need it for the pull operation

If we have a commit id for all the refs we're pulling, and if we
don't need the summary to list all the refs when mirroring then the
only reason to download the summary is for the list of deltas.

With the new "indexed-deltas" property in the config file (and mirrored
to the summary file) we can detect when we don't need the summary for
deltas and completely avoid downloading it then.

5 years agodeltas: Set `indexed-deltas` key in the config and summary
Alexander Larsson [Fri, 9 Oct 2020 08:55:52 +0000 (10:55 +0200)]
deltas: Set `indexed-deltas` key in the config and summary

Clients can use these during pull and avoid downloading the summary if
needed, or use the indexed-deltas instead of relying on the ones in
the summary which may be left out.

5 years agodeltas: Take a shared repo lock while reindexing deltas
Alexander Larsson [Fri, 9 Oct 2020 08:15:42 +0000 (10:15 +0200)]
deltas: Take a shared repo lock while reindexing deltas

This ensures we're not racing with a prune operation that can be removing
the delta indexes we're relying on.

5 years agodeltas: Add tests for delta indexes
Alexander Larsson [Tue, 1 Sep 2020 14:00:08 +0000 (16:00 +0200)]
deltas: Add tests for delta indexes

This tests generation of the index as well as using it when pulling

5 years agodeltas: Use delta indexes when pulling
Alexander Larsson [Tue, 1 Sep 2020 12:52:49 +0000 (14:52 +0200)]
deltas: Use delta indexes when pulling

If there is no delta index in the summary, try to fetch the
delta index for the commit we're going to and use that to find the
delta (if any).

5 years agodeltas: Add CLI ops to list and reindex delta-indexes
Alexander Larsson [Tue, 1 Sep 2020 10:28:17 +0000 (12:28 +0200)]
deltas: Add CLI ops to list and reindex delta-indexes

5 years agodeltas: Make ostree_repo_static_delta_reindex() public
Alexander Larsson [Mon, 12 Oct 2020 13:57:53 +0000 (15:57 +0200)]
deltas: Make ostree_repo_static_delta_reindex() public

It is useful to be able to trigger this without having to regenerate
the summary. For example, if you are not using summaries, or ar generating
the summaries yourself.

5 years agodeltas: Add and document no-deltas-in-summary config option
Alexander Larsson [Tue, 1 Sep 2020 10:26:17 +0000 (12:26 +0200)]
deltas: Add and document no-deltas-in-summary config option

By default this is FALSE to keep existing clients working.

5 years agodeltas: Update delta indexes when updating summary
Alexander Larsson [Tue, 1 Sep 2020 10:05:36 +0000 (12:05 +0200)]
deltas: Update delta indexes when updating summary

When we update the summary file (and its list of deltas) we also update
all delta indexes. The index format is a single `a{sv}` variant identical
to the metadata-part of the summary with (currently) only the
`ostree.static-deltas` key.

Since we expect most delta indexes to change rarely, we avoid
unnecessary writes when reindexing. New indexes are compared to
existing ones and only the changed ones are written to disk.  This
avoids unnecessary write load and mtime changes on the repo server.

5 years agodeltas: Add ostree_repo_list_static_delta_indexes() function
Alexander Larsson [Tue, 1 Sep 2020 10:03:40 +0000 (12:03 +0200)]
deltas: Add ostree_repo_list_static_delta_indexes() function

This lists all the available delta indexes.

5 years agodeltas: Add _ostree_get_relative_static_delta_index_path()
Alexander Larsson [Tue, 1 Sep 2020 10:00:32 +0000 (12:00 +0200)]
deltas: Add _ostree_get_relative_static_delta_index_path()

This gets the subpath for a delta index file, which is of the form
"delta-indexes/$commit.index", that contains all the deltas going
to the particular commit.

5 years agoMerge pull request #2205 from pwithnall/etags-and-last-modified
OpenShift Merge Robot [Thu, 22 Oct 2020 22:20:23 +0000 (18:20 -0400)]
Merge pull request #2205 from pwithnall/etags-and-last-modified

Add support for ETag and Last-Modified headers for summary and summary.sig

5 years agotests: Split RFC 2616 date parsing code out and add tests
Philip Withnall [Fri, 16 Oct 2020 16:05:54 +0000 (17:05 +0100)]
tests: Split RFC 2616 date parsing code out and add tests

This makes it testable, and increases its test coverage too 100% of
lines, as measured by `make coverage`.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
5 years agoostree/trivial-httpd: Add Last-Modified/ETag support
Philip Withnall [Fri, 9 Oct 2020 17:46:06 +0000 (18:46 +0100)]
ostree/trivial-httpd: Add Last-Modified/ETag support

This is basic support for the
Last-Modified/ETag/If-Modified-Since/If-None-Match headers. It’s not
high performance, and doesn’t support all of the related caching
features (like the If-Match header, etc.).

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
5 years agotests: Add simple test for summary file caching
Philip Withnall [Fri, 9 Oct 2020 17:34:55 +0000 (18:34 +0100)]
tests: Add simple test for summary file caching

This test would have actually passed before the summary file caching
changes (in the previous few commits) were added, as the `summary.sig`
essentially acted as the ETag for the summary file, and itself wasn’t
updated on disk if it didn’t change when querying the server.

Actually testing that the HTTP caching headers are working to reduce
HTTP traffic would require test hooks into the pull code or the
trivial-httpd server, neither of which I have the time to add at the
moment.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
5 years agolib/pull: Hook up HTTP caching headers for summary and summary.sig
Philip Withnall [Tue, 29 Sep 2020 09:51:26 +0000 (10:51 +0100)]
lib/pull: Hook up HTTP caching headers for summary and summary.sig

As `summary` and `summary.sig` aren’t immutable, HTTP requests to
download them can be optimised by sending the `If-None-Match` and
`If-Modified-Since` headers to avoid unnecessarily re-downloading them
if they haven’t changed since last being checked.

Hook them up to the new support for that in the fetcher.

The `ETag` and `Last-Modified` for each file in the cache are stored as
the `user.etag` xattr and the mtime, respectively. For flatpak, for
example, this affects the cached files in
`~/.local/share/flatpak/repo/tmp/cache/summaries`.

If xattrs aren’t supported, or if the server doesn’t support the caching
headers, the pull behaviour is unchanged from before.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
5 years agolibostree: Add support for ETag and Last-Modified headers
Philip Withnall [Thu, 24 Sep 2020 16:49:48 +0000 (17:49 +0100)]
libostree: Add support for ETag and Last-Modified headers

Add support in the soup and curl fetchers to send the `If-None-Match`
and `If-Modified-Since` request headers, and pass on the `ETag` and
`Last-Modified` response headers.

This currently introduces no functional changes, but once call sites
provide the appropriate integration, this will allow HTTP caching to
happen with requests (typically with metadata requests, where the data
is not immutable due to being content-addressed). That should reduce
bandwidth requirements.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
5 years agoMerge pull request #2222 from fkrull/patch-v2020.7
OpenShift Merge Robot [Tue, 20 Oct 2020 20:48:37 +0000 (16:48 -0400)]
Merge pull request #2222 from fkrull/patch-v2020.7

lib: add missing GI annotation

5 years agoMerge pull request #2221 from kelvinfan001/fix-docs
OpenShift Merge Robot [Mon, 19 Oct 2020 18:11:50 +0000 (14:11 -0400)]
Merge pull request #2221 from kelvinfan001/fix-docs

docs: Fix various typos

5 years agodocs: Fix various typos
Kelvin Fan [Thu, 15 Oct 2020 23:51:44 +0000 (19:51 -0400)]
docs: Fix various typos

5 years agolib: fix GI parameter tags
Felix Krull [Sat, 17 Oct 2020 20:14:09 +0000 (22:14 +0200)]
lib: fix GI parameter tags

5 years agoMerge pull request #2219 from jlebon/pr/fix-inode-print-format
OpenShift Merge Robot [Thu, 15 Oct 2020 20:15:37 +0000 (16:15 -0400)]
Merge pull request #2219 from jlebon/pr/fix-inode-print-format

ostree-prepare-root: print st_dev and st_ino as 64-bit ints

5 years agoMerge pull request #2218 from cgwalters/travis-32bit
OpenShift Merge Robot [Thu, 15 Oct 2020 19:27:48 +0000 (15:27 -0400)]
Merge pull request #2218 from cgwalters/travis-32bit

travis: Add a 32 bit build

5 years agoostree-prepare-root: print st_dev and st_ino as 64-bit ints
Jonathan Lebon [Thu, 15 Oct 2020 16:05:34 +0000 (12:05 -0400)]
ostree-prepare-root: print st_dev and st_ino as 64-bit ints

This matches what systemd does and should work fine on all platforms.

Possibly resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1888436

5 years agotravis: Add a 32 bit build
Colin Walters [Thu, 15 Oct 2020 13:35:40 +0000 (09:35 -0400)]
travis: Add a 32 bit build

In the past we've had 32 bit bugs that were caught by
the compiler, let's add this to Travis.

5 years agoMerge pull request #2215 from cgwalters/fd-transfer
OpenShift Merge Robot [Tue, 13 Oct 2020 22:45:13 +0000 (00:45 +0200)]
Merge pull request #2215 from cgwalters/fd-transfer

deploy: Remove (transfer none) from fd arg

5 years agoMerge pull request #2214 from cgwalters/release-2020-7
OpenShift Merge Robot [Tue, 13 Oct 2020 22:18:49 +0000 (00:18 +0200)]
Merge pull request #2214 from cgwalters/release-2020-7

Release 2020.7

5 years agodeploy: Remove (transfer none) from fd arg
Colin Walters [Tue, 13 Oct 2020 21:39:18 +0000 (17:39 -0400)]
deploy: Remove (transfer none) from fd arg

GI complains.  And in general one needs to assume that file
descriptors aren't stolen.

5 years agoPost-release version bump
Colin Walters [Tue, 13 Oct 2020 18:33:14 +0000 (14:33 -0400)]
Post-release version bump

5 years agoRelease 2020.7
Colin Walters [Tue, 13 Oct 2020 18:31:26 +0000 (14:31 -0400)]
Release 2020.7

5 years agoMerge pull request #2213 from alexlarsson/summary-bugfixes
OpenShift Merge Robot [Thu, 8 Oct 2020 19:18:34 +0000 (15:18 -0400)]
Merge pull request #2213 from alexlarsson/summary-bugfixes

Various fixes from the indexed-summaries branch

5 years agosignatures: Fix leak in _sign_detached_metadata_append()
Alexander Larsson [Wed, 16 Sep 2020 13:54:03 +0000 (15:54 +0200)]
signatures: Fix leak in _sign_detached_metadata_append()

This needs to ref_sink the returned variant, as it is used with g_autoptr
in the callers.

5 years agofetch_summary_with_options: Fix n-network-retries option parsing
Alexander Larsson [Wed, 16 Sep 2020 10:09:41 +0000 (12:09 +0200)]
fetch_summary_with_options: Fix n-network-retries option parsing

"&u" is not a valid gvariant format string, it should just be "u".

5 years agoostree_repo_find_remotes_async: Fix leak of summary
Alexander Larsson [Mon, 14 Sep 2020 11:52:10 +0000 (13:52 +0200)]
ostree_repo_find_remotes_async: Fix leak of summary

We were creating a GVariant from a GBytes and storing it in an
g_autoptr without ref_sinking it.

5 years agoMerge pull request #2212 from jlebon/pr/packit-tweak
OpenShift Merge Robot [Wed, 7 Oct 2020 19:34:22 +0000 (15:34 -0400)]
Merge pull request #2212 from jlebon/pr/packit-tweak

ci: Make Packit ignore downstream patches

5 years agoMerge pull request #2211 from jlebon/pr/close-fd
OpenShift Merge Robot [Wed, 7 Oct 2020 19:23:43 +0000 (15:23 -0400)]
Merge pull request #2211 from jlebon/pr/close-fd

lib/deploy: Don't leak fd when checksumming dtbs

5 years agoci: Make Packit ignore downstream patches
Jonathan Lebon [Wed, 7 Oct 2020 19:04:17 +0000 (15:04 -0400)]
ci: Make Packit ignore downstream patches

We don't really carry "Fedora-only" patches in dist-git. So we want to
nuke all the patches which exist there.

Follow-up to #2210.

5 years agolib/deploy: Don't leak fd when checksumming dtbs
Jonathan Lebon [Wed, 7 Oct 2020 18:44:25 +0000 (14:44 -0400)]
lib/deploy: Don't leak fd when checksumming dtbs

Likely the root of https://bugzilla.redhat.com/show_bug.cgi?id=1886149.

5 years agoMerge pull request #2210 from jlebon/pr/packit
OpenShift Merge Robot [Wed, 7 Oct 2020 13:46:14 +0000 (09:46 -0400)]
Merge pull request #2210 from jlebon/pr/packit

Add Packit integration

5 years agoAdd Packit integration
Jonathan Lebon [Sat, 3 Oct 2020 15:23:49 +0000 (11:23 -0400)]
Add Packit integration

This is a basic `.packit.yaml` integration file which will allow us have
continuous builds of OSTree in cosa and upstream CI. If things go well,
we'll likely deploy this in other build tools like rpm-ostree.

Prompted by wanting to get #2155 out to unblock
https://github.com/coreos/rpm-ostree/pull/2170.

5 years agoMerge pull request #2198 from cgwalters/no-hardlink-zerosize
OpenShift Merge Robot [Mon, 5 Oct 2020 20:06:38 +0000 (22:06 +0200)]
Merge pull request #2198 from cgwalters/no-hardlink-zerosize

checkout: Don't hardlink zero sized files

5 years agoMerge pull request #2209 from travier/docs-fixup
OpenShift Merge Robot [Mon, 5 Oct 2020 19:50:00 +0000 (21:50 +0200)]
Merge pull request #2209 from travier/docs-fixup

docs: Fix URL in Jekyll _config.yml

5 years agodocs: Fix URL in Jekyll _config.yml
Timothée Ravier [Mon, 5 Oct 2020 19:10:31 +0000 (21:10 +0200)]
docs: Fix URL in Jekyll _config.yml

5 years agoMerge pull request #2208 from cgwalters/bump-libglnx
OpenShift Merge Robot [Mon, 5 Oct 2020 18:56:35 +0000 (20:56 +0200)]
Merge pull request #2208 from cgwalters/bump-libglnx

libglnx: Bump to master

5 years agoMerge pull request #2207 from travier/docs
OpenShift Merge Robot [Mon, 5 Oct 2020 18:19:29 +0000 (20:19 +0200)]
Merge pull request #2207 from travier/docs

docs: Add GitHub Pages support

5 years agolibglnx: Bump to master
Colin Walters [Mon, 5 Oct 2020 18:04:21 +0000 (14:04 -0400)]
libglnx: Bump to master

To pull in the fix for `/var/tmp` on NixOS but also
on general principle.

Update submodule: libglnx

```
Colin Walters (1):
      xattrs: Add better error prefixing

Rebecca Turner (2):
      glnx-fdio: try $TMPDIR if /var/tmp doesn't exist
      glnx-fdio: use $TMPDIR if set
```

5 years agoMerge pull request #2155 from jlebon/pr/add-initrds
OpenShift Merge Robot [Fri, 2 Oct 2020 20:41:01 +0000 (16:41 -0400)]
Merge pull request #2155 from jlebon/pr/add-initrds

lib/deploy: Add support for overlay initrds

5 years agoREADME: Update and mention new docs
Timothée Ravier [Fri, 2 Oct 2020 12:40:16 +0000 (14:40 +0200)]
README: Update and mention new docs

5 years agodocs: Move historical README to the docs
Timothée Ravier [Fri, 2 Oct 2020 12:38:20 +0000 (14:38 +0200)]
docs: Move historical README to the docs

5 years agodocs: Move and update pages from the manual
Timothée Ravier [Fri, 2 Oct 2020 12:34:33 +0000 (14:34 +0200)]
docs: Move and update pages from the manual

5 years agodocs: Update Contributing and tutorial pages
Timothée Ravier [Wed, 30 Sep 2020 17:22:29 +0000 (19:22 +0200)]
docs: Update Contributing and tutorial pages

5 years agocheckout: Don't hardlink zero sized files
Colin Walters [Wed, 16 Sep 2020 00:35:33 +0000 (00:35 +0000)]
checkout: Don't hardlink zero sized files

Alternative to https://github.com/ostreedev/ostree/pull/2197

Python's (usually) zero-sized `__init__.py` files can provoke
us hitting the hardlink limits on some filesystems (`EMLINK`).
At least one Fedora rpm-ostree user hit this.

The benefits of hardlinking here are quite marginal; lots
of hardlinks can behave suboptimally in particular filesystems
like BTRFS too.

This builds on prior code which made this an option, introduced
in https://github.com/ostreedev/ostree/commit/673cacd633f9d6b653cdea530657d3e780a41bbd
Now we just do it uncondtionally.

Also this provoked a different bug in a very obscure user mode checkout
case; when the "real" permissions were different from the "physical"
permissions, we would still hardlink.  Fix the test case for this.

5 years agoMerge pull request #2167 from pwithnall/2165-dont-download-config
OpenShift Merge Robot [Thu, 1 Oct 2020 20:46:29 +0000 (16:46 -0400)]
Merge pull request #2167 from pwithnall/2165-dont-download-config

Avoid need to download remote config when pulling

5 years agodocs: Update Index page
Timothée Ravier [Mon, 28 Sep 2020 15:02:45 +0000 (17:02 +0200)]
docs: Update Index page

5 years agodocs: Add Jekyll and theme config
Timothée Ravier [Mon, 28 Sep 2020 14:55:03 +0000 (16:55 +0200)]
docs: Add Jekyll and theme config

5 years agoostree/dump: Fix a memory leak
Philip Withnall [Mon, 10 Aug 2020 11:07:22 +0000 (12:07 +0100)]
ostree/dump: Fix a memory leak

Re-using the `refs` variable for the main list of refs, plus the
iterated lists, meant that the main list was never freed (although all
the iterated ones were freed correctly).

Fix this by using two variables rather than reusing the one.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
5 years agolib/pull: Read mode and tombstone options from summary file if possible
Philip Withnall [Mon, 10 Aug 2020 11:06:35 +0000 (12:06 +0100)]
lib/pull: Read mode and tombstone options from summary file if possible

Otherwise, fall back to downloading and reading them from the `config`
file. See the previous commit for details.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Fixes: #2165
5 years agolib/repo: Add mode and tombstone config options to the summary file
Philip Withnall [Mon, 10 Aug 2020 11:05:06 +0000 (12:05 +0100)]
lib/repo: Add mode and tombstone config options to the summary file

Currently, they are set in the `config` file and cause that to be
downloaded on every pull. Given that the client is already pulling the
`summary` file, it makes sense to avoid an additional network round trip
and cache those options in the `summary` file.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #2165

5 years agolib/deploy: Add support for overlay initrds
Jonathan Lebon [Mon, 17 Aug 2020 13:48:18 +0000 (09:48 -0400)]
lib/deploy: Add support for overlay initrds

In FCOS and RHCOS, the need to configure software in the initramfs has
come up multiple times. Sometimes, using kernel arguments suffices.
Other times, it really must be a configuration file. Rebuilding the
initramfs on the client-side however is a costly operation. Not only
does it add complexity to the update workflow, it also erodes a lot of
the value obtained from using the baked "blessed" initramfs from the
tree itself.

One elegant way to address this is to allow specifying multiple
initramfses. This is supported by most bootloaders (notably GRUB) and
results in each initrd being overlayed on top of each other.

This patch allows libostree clients to leverage this so that they can
avoid regenerating the initramfs entirely. libostree itself is agnostic
as to what kind and how much data overlay initrds contain. It's up to
the clients to enforce such boundaries.

To implement this, we add a new ostree_sysroot_stage_overlay_initrd
which takes a file descriptor and returns a checksum. Then users can
pass these checksums when calling the deploy APIs via the new array
option `overlay_initrds`. We copy these files into `/boot` and add them
to the BLS as another `initrd` entry.

5 years agolib/deploy: Add deploy/stage APIs with options
Jonathan Lebon [Mon, 17 Aug 2020 13:48:17 +0000 (09:48 -0400)]
lib/deploy: Add deploy/stage APIs with options

And make the `override_kernel_argv` one of those options. This is mostly
a mechanical move here, no functional change otherwise.

Prep for adding a new option.

5 years agolib/bootconfig: Add support for multiple initrd keys
Jonathan Lebon [Mon, 17 Aug 2020 13:48:16 +0000 (09:48 -0400)]
lib/bootconfig: Add support for multiple initrd keys

Prep for actually teaching the rest of the codebase about this.

We keep the primary initrd in the `options` hash table for backwards
compatibility.

5 years agoMerge pull request #2204 from jlebon/pr/versioning-tweaks
OpenShift Merge Robot [Wed, 30 Sep 2020 17:22:49 +0000 (17:22 +0000)]
Merge pull request #2204 from jlebon/pr/versioning-tweaks

Various minor versioning related tweaks

5 years agolib: Minor versioning related fixes
Jonathan Lebon [Fri, 25 Sep 2020 19:01:09 +0000 (15:01 -0400)]
lib: Minor versioning related fixes

Fix/add the `Since` marker to the new static delta APIs, and update the
symbol versioning templates/comments.

5 years agoMakefile-libostree.am: Uncomment BUILDOPT_IS_DEVEL_BUILD conditional
Jonathan Lebon [Fri, 25 Sep 2020 18:59:45 +0000 (14:59 -0400)]
Makefile-libostree.am: Uncomment BUILDOPT_IS_DEVEL_BUILD conditional

We shouldn't have to toggle the conditional itself during release
builds. It should only evaluate to true during devel builds.

5 years agoMerge pull request #2203 from cgwalters/delta-sign-cleanups
OpenShift Merge Robot [Fri, 25 Sep 2020 13:57:33 +0000 (13:57 +0000)]
Merge pull request #2203 from cgwalters/delta-sign-cleanups

delta: Some minor code style fixups

5 years agoMerge pull request #2202 from cgwalters/bootcsum-dtb
OpenShift Merge Robot [Thu, 24 Sep 2020 22:14:31 +0000 (22:14 +0000)]
Merge pull request #2202 from cgwalters/bootcsum-dtb

 deploy: Remove deployment bootcsum assertion

5 years agodelta: Some minor code style fixups
Colin Walters [Thu, 24 Sep 2020 22:12:23 +0000 (22:12 +0000)]
delta: Some minor code style fixups

- Remove some unused variables
- Switch to declare-and-initialize with others
- Fix some indentation from 4 spaces to 2 (GNU style)

5 years agodeploy: Remove deployment bootcsum assertion
Colin Walters [Thu, 24 Sep 2020 19:28:31 +0000 (19:28 +0000)]
deploy: Remove deployment bootcsum assertion

When support for devicetree was added, it created a problem
because old and new ostree versions would compute different
checksums for the "boot data".  The scenario here is:

- Have system with ostree < 2020.4
- Reboot into system with ostree 2020.5
- Try to perform an operation that would retain
  that previous booted deployment (common)

Currently ostree iterates over all the deployments
that will be retained and calls `install_deployment_kernel()`,
even for the booted one (which is a bit silly), but
just to verify that all boot data for the targeted
deployments are installed.

This then re-computes the checksum and we'd trip this
assertion.

In practice though, we don't strictly require them to match;
the only thing that will happen if they don't is that we'll
end up with another copy of the kernel/initramfs - and
that only temporarily until the previous deployment
gets GC'd.

Longer term, I think what we really want to do anyways
is probably closer to like a little ostree repo for `/boot`
so that we can e.g. still hardlink kernels there even if
the initramfs changes, or hardlink both kernel/initramfs
if just the devicetree changes, etc.

Closes: https://github.com/ostreedev/ostree/issues/2154
5 years agoMerge pull request #1985 from fdanis-oss/wip/fda/sign_delta_metadata
OpenShift Merge Robot [Thu, 24 Sep 2020 14:21:16 +0000 (14:21 +0000)]
Merge pull request #1985 from fdanis-oss/wip/fda/sign_delta_metadata

Static-delta's superblock signature support

5 years agoMerge pull request #2199 from cgwalters/no-hardlink-unreadable
OpenShift Merge Robot [Wed, 16 Sep 2020 15:58:55 +0000 (17:58 +0200)]
Merge pull request #2199 from cgwalters/no-hardlink-unreadable

checkout: Ensure copies of unreadable usermode checkouts are readable

5 years agocheckout: Ensure copies of unreadable usermode checkouts are readable
Colin Walters [Wed, 16 Sep 2020 13:23:04 +0000 (13:23 +0000)]
checkout: Ensure copies of unreadable usermode checkouts are readable

The extreme special case of "zero mode" files like `/etc/shadow`
comes up again.  What we want is for "user mode" checkouts to
override it to make the file readable; otherwise when operating
as non-root without `CAP_DAC_OVERRIDE` it becomes very difficult
to work with.

Previously, we were hardlinking these files, but then it intersects
with *another* special case around zero sized files, which is
*also* true for `/etc/shadow`.

Trying to avoid hardlinking there unveiled this bug - when
we go to do a copy checkout, we need to override the mode.

5 years agoMerge pull request #2195 from ostreedev/avoid-shadows
OpenShift Merge Robot [Mon, 14 Sep 2020 14:43:40 +0000 (10:43 -0400)]
Merge pull request #2195 from ostreedev/avoid-shadows

Avoid shadowing local variables

5 years agotests/delta: Add new tests for applying signed deltas
Frédéric Danis [Fri, 21 Aug 2020 15:24:49 +0000 (17:24 +0200)]
tests/delta: Add new tests for applying signed deltas

Add new test to apply offline signed deltas.

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agobin/static-delta: Add signature parameters to apply-offline
Frédéric Danis [Fri, 21 Aug 2020 15:22:40 +0000 (17:22 +0200)]
bin/static-delta: Add signature parameters to apply-offline

This allows to check the delta signature before applying it.

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agolib/deltas: Check signed delta in execute_offline
Frédéric Danis [Tue, 25 Aug 2020 07:26:09 +0000 (09:26 +0200)]
lib/deltas: Check signed delta in execute_offline

Add a new function `ostree_repo_static_delta_execute_offline_with_signature`
which takes a signature engine to verify the delta before applying it.
The `ostree_repo_static_delta_execute_offline` is just a wrapper to this
new function, passing a NULL signature engine.
When this function is called without signature engine, but with a sign
delta, it will only fails if `sign-verify-deltas` is set to true in repo
core options.

This commits move signature existence check and delta signature
verification to share common parts between existing APIs and the new
function.

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agotests/delta: new tests for 'ed25519' signed deltas
Frédéric Danis [Tue, 3 Dec 2019 10:15:51 +0000 (11:15 +0100)]
tests/delta: new tests for 'ed25519' signed deltas

Add tests to generate signed deltas and verify them using 'ed25519'
signature engine.

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agotests/libtest.sh: Add skip_without_sign_ed25519() function
Frédéric Danis [Thu, 23 Apr 2020 13:24:53 +0000 (15:24 +0200)]
tests/libtest.sh: Add skip_without_sign_ed25519() function

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agotests/delta: new tests for signed deltas
Frédéric Danis [Fri, 29 Nov 2019 15:17:17 +0000 (16:17 +0100)]
tests/delta: new tests for signed deltas

Add tests to generate signed deltas and verify them using 'dummy'
signature engine.

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agolib/deltas: Support signed delta in dump
Frédéric Danis [Thu, 9 Jul 2020 15:35:00 +0000 (17:35 +0200)]
lib/deltas: Support signed delta in dump

This checks if the static delta file is signed or not to be able to
correctly get the superblock to dump.

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agolib/deltas: Support signed delta in execute_offline
Frédéric Danis [Thu, 9 Jul 2020 15:34:08 +0000 (17:34 +0200)]
lib/deltas: Support signed delta in execute_offline

This checks if the static delta file is signed or not to be able to
correctly get the superblock to apply.

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agobin/static-delta: Add command to verify delta signature
Frédéric Danis [Fri, 29 Nov 2019 11:40:11 +0000 (12:40 +0100)]
bin/static-delta: Add command to verify delta signature

Add new "static-delta verify" sub-command.
This supports multiple keys to verify the static-delta file.

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>
5 years agolib/deltas: Add signature check API for static-delta superblock
Frédéric Danis [Thu, 28 Nov 2019 11:18:59 +0000 (12:18 +0100)]
lib/deltas: Add signature check API for static-delta superblock

This retrieves the signatures and pass the static delta block as an array
of bytes to ostree_sign_data_verify().

Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>