ostree.git
2 years agoadmin-deploy: Add `--stateroot` as alias for `--os`
Colin Walters [Thu, 17 Aug 2023 20:48:05 +0000 (16:48 -0400)]
admin-deploy: Add `--stateroot` as alias for `--os`

To further help deprecate the confusing "osname" terminology.

2 years agoAdd `ostree admin stateroot-init` as alias for `os-init`
Colin Walters [Thu, 17 Aug 2023 20:46:02 +0000 (16:46 -0400)]
Add `ostree admin stateroot-init` as alias for `os-init`

To further help deprecate the confusing "osname" terminology.

2 years agoMerge pull request #2989 from cgwalters/lock-timeout-longer
Eric Curtin [Thu, 17 Aug 2023 13:38:30 +0000 (14:38 +0100)]
Merge pull request #2989 from cgwalters/lock-timeout-longer

repo: Bump lock timeout to 5 minutes

2 years agoMerge pull request #2973 from ostreedev/dependabot/submodules/composefs-a6e827d
Colin Walters [Thu, 17 Aug 2023 13:36:20 +0000 (09:36 -0400)]
Merge pull request #2973 from ostreedev/dependabot/submodules/composefs-a6e827d

build(deps): bump composefs from `1704f82` to `a6e827d`

2 years agorepo: Bump lock timeout to 5 minutes
Colin Walters [Thu, 17 Aug 2023 12:26:29 +0000 (08:26 -0400)]
repo: Bump lock timeout to 5 minutes

And update the doc text to talk about having a timeout at all
by default being a mistake.

Timeouts are really best handled at a higher level; if two processes
are contending for the ostree lock and one is actually frozen,
resolving this is something an admin may want to handle and introspect/debug
instead of having the waiter error out.

Most people using ostree are doing it in a way in which they have
higher level timeouts (e.g. on a container pod).

2 years agoMerge pull request #2988 from cgwalters/prepare-root-binding-key
Eric Curtin [Wed, 16 Aug 2023 22:20:15 +0000 (23:20 +0100)]
Merge pull request #2988 from cgwalters/prepare-root-binding-key

prepare-root: Minor clarifications

2 years agoMerge pull request #2987 from cgwalters/prefix-stage-deploy
Eric Curtin [Wed, 16 Aug 2023 21:37:06 +0000 (22:37 +0100)]
Merge pull request #2987 from cgwalters/prefix-stage-deploy

deploy: Add some error prefixing

2 years agoprepare-root: Minor clarifications
Colin Walters [Wed, 16 Aug 2023 20:54:13 +0000 (16:54 -0400)]
prepare-root: Minor clarifications

No functional changes.

2 years agodeploy: Add some error prefixing
Colin Walters [Wed, 16 Aug 2023 20:16:24 +0000 (16:16 -0400)]
deploy: Add some error prefixing

We saw a bare
`Txn Rebase on <osname> failed: Failed to find kernel in /usr/lib/modules, /usr/lib/ostree-boot or /boot`
which isn't bad, but it'd be better to be a bit more specific.

2 years agoMerge pull request #2985 from cgwalters/cleanup-proc-cmdline
Eric Curtin [Wed, 16 Aug 2023 18:31:35 +0000 (19:31 +0100)]
Merge pull request #2985 from cgwalters/cleanup-proc-cmdline

switchroot,generator: Only read /proc/cmdline once

2 years agoMerge pull request #2984 from alexlarsson/prepare-root-no-raw-key
Colin Walters [Wed, 16 Aug 2023 13:05:39 +0000 (09:05 -0400)]
Merge pull request #2984 from alexlarsson/prepare-root-no-raw-key

prepare-root: Only support base64 formated public key files

2 years agoswitchroot,generator: Only read /proc/cmdline once
Colin Walters [Wed, 16 Aug 2023 13:02:11 +0000 (09:02 -0400)]
switchroot,generator: Only read /proc/cmdline once

Change the helper function to parse an existing cmdline instead
of potentially reading `/proc/cmdline` multiple times.

2 years agoprepare-root: Only support base64 formated public key files
Alexander Larsson [Wed, 16 Aug 2023 08:59:47 +0000 (10:59 +0200)]
prepare-root: Only support base64 formated public key files

I've updated the automotive samples to not use the raw format, so
there is no use anymore to support both formats, as base64 is strictly
better.

2 years agoMerge pull request #2980 from cgwalters/prepare-root-minor
Alexander Larsson [Wed, 16 Aug 2023 08:56:20 +0000 (10:56 +0200)]
Merge pull request #2980 from cgwalters/prepare-root-minor

Prepare root minor

2 years agoprepare-root: Use ptrarray, not linked list
Colin Walters [Mon, 14 Aug 2023 18:36:50 +0000 (14:36 -0400)]
prepare-root: Use ptrarray, not linked list

Linked lists are a data structure with only very obscure
use cases, and this is a classic one where since we're appending
it's O(N^2) behavior.

Also we were leaking the memory.

It's more ergonomic, clearer and efficient to use a ptrarray.

2 years agoprepare-root: Check for empty string, not strlen > 0
Colin Walters [Mon, 14 Aug 2023 18:30:42 +0000 (14:30 -0400)]
prepare-root: Check for empty string, not strlen > 0

No point in doing a full strlen, we can just check the first byte.
Also, invert the conditional using `continue` to avoid another
level of indentation.

2 years agoprepare-root: Use declare-and-initialize
Colin Walters [Mon, 14 Aug 2023 18:27:08 +0000 (14:27 -0400)]
prepare-root: Use declare-and-initialize

This is our default style.

2 years agoMerge pull request #2979 from cgwalters/enabled-discussions
Joseph Marrero Corchado [Mon, 14 Aug 2023 15:47:05 +0000 (11:47 -0400)]
Merge pull request #2979 from cgwalters/enabled-discussions

README.md: Drop dead mailing list, link to GH discussions

2 years agoMerge pull request #2974 from alexlarsson/composefs-config-file
Colin Walters [Mon, 14 Aug 2023 15:46:38 +0000 (11:46 -0400)]
Merge pull request #2974 from alexlarsson/composefs-config-file

Read composefs configuration from initrd instead of commandline

2 years agoREADME.md: Drop dead mailing list, link to GH discussions
Colin Walters [Mon, 14 Aug 2023 13:48:49 +0000 (09:48 -0400)]
README.md: Drop dead mailing list, link to GH discussions

While I resisted taking the next step in binding ourselves
more to GH with discussions...it's way, way better than answering
questions out of band in private (also proprietary) chats.

We haven't been successful in using the GNOME discussion forums.

2 years agoRead composefs configuration from initrd instead of commandline
Alexander Larsson [Tue, 8 Aug 2023 11:16:39 +0000 (13:16 +0200)]
Read composefs configuration from initrd instead of commandline

This drops the `ot-composefs` kernel commandline in favour
of a `[composefs]` section in the `prepare-rootfs.conf` file.

You can set `composefs.enabled` to `signed`, `yes`, `no` or `maybe`,
with `maybe` being the default.

You can also set `composefs.keypath` (or rely on the default
`/etc/ostree/initramfs-root-binding.key`) to point to ed25519 public
keys, one of which which the commit must be signed with, or boot
fails.

The ostree dracut module adds `/etc/ostree/initramfs-root-binding.key`
to the initrd if it exists.

NOTE: This drop the option to define a digest in the commandline.
However, that was currently unused
(i.e. ComposefsConfig.expected_digest was never read).

Additionally it very hard to actually store the composefs digest in
the initrd, as the initrd is typically part of the commit and thus the
composefs. It may be possible to handle this, but lets add it back
when we know exactly how that will work.

2 years agoMerge pull request #2966 from cgwalters/ostree-admin-edit
Eric Curtin [Tue, 8 Aug 2023 13:24:35 +0000 (14:24 +0100)]
Merge pull request #2966 from cgwalters/ostree-admin-edit

Add `admin set-default`

2 years agobuild(deps): bump composefs from `1704f82` to `a6e827d`
dependabot[bot] [Tue, 8 Aug 2023 12:05:10 +0000 (12:05 +0000)]
build(deps): bump composefs from `1704f82` to `a6e827d`

Bumps [composefs](https://github.com/containers/composefs) from `1704f82` to `a6e827d`.
- [Release notes](https://github.com/containers/composefs/releases)
- [Commits](https://github.com/containers/composefs/compare/1704f823db41b1056cabfba51254f8afa8bae41d...a6e827df2dbebb65d6d19a7211f2fb4a61d989ac)

---
updated-dependencies:
- dependency-name: composefs
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2 years agoMerge pull request #2958 from cgwalters/deploy-loosen-etc-usretc
Eric Curtin [Sat, 5 Aug 2023 15:48:28 +0000 (16:48 +0100)]
Merge pull request #2958 from cgwalters/deploy-loosen-etc-usretc

deploy: Support an empty `/etc` and populated `/usr/etc`

2 years agoMerge pull request #2969 from cgwalters/fix-sync-pthreads
Joseph Marrero Corchado [Fri, 4 Aug 2023 15:34:13 +0000 (11:34 -0400)]
Merge pull request #2969 from cgwalters/fix-sync-pthreads

deploy: Fix mutex locking for global sync timeout

2 years agoMerge pull request #2967 from cgwalters/drop-trivial-httpd-entrypoint
Eric Curtin [Fri, 4 Aug 2023 09:07:09 +0000 (10:07 +0100)]
Merge pull request #2967 from cgwalters/drop-trivial-httpd-entrypoint

More fully drop `trivial-httpd` entrypoint

2 years agodeploy: Fix mutex locking for global sync timeout
Colin Walters [Fri, 4 Aug 2023 02:49:48 +0000 (22:49 -0400)]
deploy: Fix mutex locking for global sync timeout

The locking here was always too long - by holding the mutex
during the `sync()` call, it means `g_cond_wait_until()` can
never wake up (because its API requires the mutex to be locked).

Confusingly though of course we do still print the "timed out"
message, and I think that tricked us when we were doing testing
here.

We only need to lock the mutex when we're manipulating shared
state, which basically boils down to the `gboolean success`.

2 years agoMore fully drop `trivial-httpd` entrypoint
Colin Walters [Wed, 2 Aug 2023 15:34:14 +0000 (11:34 -0400)]
More fully drop `trivial-httpd` entrypoint

It's just part of the tests and we should no longer
support `ostree trivial-httpd`.

This is a followup cleanup to previous work.

2 years agoAdd `admin set-default`
Colin Walters [Wed, 2 Aug 2023 15:25:58 +0000 (11:25 -0400)]
Add `admin set-default`

A core underlying primitive in the C library is the ability
to arbitrarily reorder bootloader entries.

Let's expose the basic functionality here with the ability to pick
an arbitrarily deployment for the next boot.

Closes: https://github.com/ostreedev/ostree/issues/2965
2 years agoMerge pull request #2962 from cgwalters/os-init-remount
Eric Curtin [Wed, 2 Aug 2023 19:41:32 +0000 (20:41 +0100)]
Merge pull request #2962 from cgwalters/os-init-remount

os-init: Create a mount namespace

2 years agoos-init: Create a mount namespace
Colin Walters [Tue, 1 Aug 2023 12:58:27 +0000 (08:58 -0400)]
os-init: Create a mount namespace

Today on anything using readonly sysroot `os-init` fails, because
we don't create a mount namespace if the `UNLOCKED` flag is specified
because we assume it's a readonly operation.

Since technically this is a mutation, let's just lock the sysroot
and use the tested path.

2 years agoMerge pull request #2963 from cgwalters/more-gfileinfo-fix
Joseph Marrero Corchado [Wed, 2 Aug 2023 17:44:05 +0000 (13:44 -0400)]
Merge pull request #2963 from cgwalters/more-gfileinfo-fix

composefs: Only call `_get_symlink_target()` on symlinks

2 years agocomposefs: Only call `_get_symlink_target()` on symlinks
Colin Walters [Tue, 1 Aug 2023 21:21:55 +0000 (17:21 -0400)]
composefs: Only call `_get_symlink_target()` on symlinks

This fixes a warning from newer glib that we're now seeing
in the Debian testing CI runs.

2 years agoMerge pull request #2960 from ostreedev/dependabot/submodules/libglnx-c02eb59
Colin Walters [Mon, 31 Jul 2023 15:04:26 +0000 (11:04 -0400)]
Merge pull request #2960 from ostreedev/dependabot/submodules/libglnx-c02eb59

build(deps): bump libglnx from `07e3e49` to `c02eb59`

2 years agobuild(deps): bump libglnx from `07e3e49` to `c02eb59`
dependabot[bot] [Mon, 31 Jul 2023 12:29:54 +0000 (12:29 +0000)]
build(deps): bump libglnx from `07e3e49` to `c02eb59`

Bumps libglnx from `07e3e49` to `c02eb59`.

---
updated-dependencies:
- dependency-name: libglnx
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2 years agoMerge pull request #2957 from cgwalters/transaction-test-suppress-global-sync
Eric Curtin [Mon, 31 Jul 2023 09:55:39 +0000 (10:55 +0100)]
Merge pull request #2957 from cgwalters/transaction-test-suppress-global-sync

tests/destructive: Turn off global sync()

2 years agodeploy: Support an empty `/etc` and populated `/usr/etc`
Colin Walters [Sat, 29 Jul 2023 12:47:47 +0000 (08:47 -0400)]
deploy: Support an empty `/etc` and populated `/usr/etc`

In preparation for support for a transient `/etc`:
https://github.com/ostreedev/ostree/issues/2868
particularly in combination with composefs.

Basically it's just much more elegant if we can directly mount
an overlayfs on the *empty* `etc` directory, using `usr/etc` as
the lower.

In the composefs case, we'd have to mount the composefs overlayfs
itself writable (and call `mkdir`) *just* so we can make that
empty `etc` directory which is ugly.

2 years agotests/destructive: Turn off global sync()
Colin Walters [Fri, 28 Jul 2023 21:54:37 +0000 (17:54 -0400)]
tests/destructive: Turn off global sync()

Let's verify that things work with that off, as they should.

Previously:
https://github.com/ostreedev/ostree/pull/2519/commits/cb731294837736e957ee595ce11ab115277dbb36
"deploy: Add a 5s max timeout on global filesystem sync()"

But we may still have problems even with that, see
https://issues.redhat.com/browse/OCPBUGS-15917
where it might be that even a thread doesn't work because
we're locked in the kernel.

2 years agoMerge pull request #2956 from cgwalters/finalize-more-verbose
Eric Curtin [Fri, 28 Jul 2023 15:16:57 +0000 (16:16 +0100)]
Merge pull request #2956 from cgwalters/finalize-more-verbose

deploy: Be way more verbose about what we're doing

2 years agodeploy: Be way more verbose about what we're doing
Colin Walters [Thu, 27 Jul 2023 18:08:15 +0000 (14:08 -0400)]
deploy: Be way more verbose about what we're doing

This will help us debug bugs like https://issues.redhat.com/browse/OCPBUGS-15917
in the future.

2 years agoMerge pull request #2954 from cgwalters/harden-gvariant-get-data
Eric Curtin [Thu, 27 Jul 2023 14:41:24 +0000 (15:41 +0100)]
Merge pull request #2954 from cgwalters/harden-gvariant-get-data

Harden gvariant get data

2 years agochecksum-utils: Add an assertion that `buf != NULL`
Colin Walters [Wed, 26 Jul 2023 22:05:36 +0000 (18:05 -0400)]
checksum-utils: Add an assertion that `buf != NULL`

Another hardening against https://bugzilla.redhat.com/show_bug.cgi?id=2217401

2 years agocore, switchroot: Harden a bit against `g_variant_get_data() == NULL`
Colin Walters [Wed, 26 Jul 2023 22:04:11 +0000 (18:04 -0400)]
core, switchroot: Harden a bit against `g_variant_get_data() == NULL`

I'm not totally sure this is the cause of
https://bugzilla.redhat.com/show_bug.cgi?id=2217401
but analyzing the code a bit it seems the most likely.

2 years agoMerge pull request #2953 from samcday/patch-1
Eric Curtin [Wed, 26 Jul 2023 14:10:27 +0000 (15:10 +0100)]
Merge pull request #2953 from samcday/patch-1

docs: update boot loader spec link

2 years agoMerge pull request #2930 from cgwalters/prepare-root-config3
Eric Curtin [Wed, 26 Jul 2023 09:17:35 +0000 (10:17 +0100)]
Merge pull request #2930 from cgwalters/prepare-root-config3

prepare-root: Introduce ostree/prepare-root.conf && sysroot.readonly improvements

2 years agodocs: update boot loader spec link
samcday [Tue, 25 Jul 2023 19:42:41 +0000 (21:42 +0200)]
docs: update boot loader spec link

2 years agoMerge pull request #2952 from cgwalters/silence-variant-lookup
Eric Curtin [Tue, 25 Jul 2023 16:36:12 +0000 (17:36 +0100)]
Merge pull request #2952 from cgwalters/silence-variant-lookup

tree-wide: Consistently `(void)g_variant_lookup()`

2 years agotree-wide: Consistently `(void)g_variant_lookup()`
Colin Walters [Tue, 25 Jul 2023 15:17:36 +0000 (11:17 -0400)]
tree-wide: Consistently `(void)g_variant_lookup()`

Coverity warns when we're checking the return value in most-but-not-all
instances.  The code is correct in these instances; we're initializing
the values to defaults.  So add a `(void)` cast like we are doing
in many other places.

2 years agoprepare-root: Don't parse target root when composefs enabled
Colin Walters [Sun, 23 Jul 2023 18:39:04 +0000 (14:39 -0400)]
prepare-root: Don't parse target root when composefs enabled

We shouldn't load anything from the target root filesystem *before*
verifying its integrity if composefs is enabled.

In effect, we want to force composefs users to migrate to
`/usr/lib/ostree/prepare-root.conf` which lives in the initramfs.
(But because we enable sysroot.readonly=true if composefs is enabled
 too, they don't actually need to)

2 years agoprepare-root: Default sysroot.readonly=true if composefs
Colin Walters [Sun, 23 Jul 2023 18:33:51 +0000 (14:33 -0400)]
prepare-root: Default sysroot.readonly=true if composefs

Not because it's logically required or anything, but because
it's just a good idea.

2 years agoprepare-root: Introduce `ostree/prepare-root.conf`
Colin Walters [Fri, 14 Jul 2023 18:31:58 +0000 (14:31 -0400)]
prepare-root: Introduce `ostree/prepare-root.conf`

Using the repository configuration for configuration of this
program was always a bit hacky.

But actually with composefs, we really must validate
the target root *before* we parse anything in it.

Let's add a config file for `ostree-prepare-root` that can live
in the initramfs, which will already have been verified.

In the future we'll also add configuration for composefs here.

We expect OS builders to drop this in `/usr/lib/ostree/prepare-root.conf`,
but system local configuration can live in `/etc`.

2 years agoMerge pull request #2948 from cgwalters/composefs-more-cleanups
Eric Curtin [Tue, 25 Jul 2023 09:25:29 +0000 (10:25 +0100)]
Merge pull request #2948 from cgwalters/composefs-more-cleanups

composefs: Use lowerdir in /run

2 years agoMerge pull request #2951 from cgwalters/errprefix-sysroot
Eric Curtin [Mon, 24 Jul 2023 20:07:28 +0000 (21:07 +0100)]
Merge pull request #2951 from cgwalters/errprefix-sysroot

sysroot: Add a bit more error prefixing

2 years agoMerge pull request #2949 from cgwalters/kargs-cleanup
Eric Curtin [Mon, 24 Jul 2023 20:06:59 +0000 (21:06 +0100)]
Merge pull request #2949 from cgwalters/kargs-cleanup

kernel-args: Move private functions out of public header

2 years agorepo: Clarify when we fail to parse a remote
Colin Walters [Mon, 24 Jul 2023 12:52:49 +0000 (08:52 -0400)]
repo: Clarify when we fail to parse a remote

This would have directly pointed at the failing config file.

2 years agosysroot: Add a bit more error prefixing
Colin Walters [Mon, 24 Jul 2023 12:48:51 +0000 (08:48 -0400)]
sysroot: Add a bit more error prefixing

While an error message I saw was pretty clear, this would
be even more explicit.

2 years agoMerge pull request #2950 from cgwalters/generator-cleanup
Eric Curtin [Mon, 24 Jul 2023 09:52:41 +0000 (10:52 +0100)]
Merge pull request #2950 from cgwalters/generator-cleanup

generator: Some cleanup

2 years agokernel-args: Move private functions out of public header
Colin Walters [Sun, 23 Jul 2023 14:26:30 +0000 (10:26 -0400)]
kernel-args: Move private functions out of public header

External users can't call `_` prefixed APIs, so move them
to a `-private.h`.

2 years agosrc/generator: Move all logic into libostree-1.so
Colin Walters [Sun, 23 Jul 2023 14:47:19 +0000 (10:47 -0400)]
src/generator: Move all logic into libostree-1.so

This pushes down the code for parsing the `ostree=` cmdline
in the generator into code that's part of libostree-1.so.

This is prep for using logic shared in libotcore.la.

But in general it's just cleaner to also keep the binary
entrypoint to just be a trampoline into the C library.

2 years agogenerator: Stop creating `/run/ostree-booted`
Colin Walters [Sun, 23 Jul 2023 14:40:20 +0000 (10:40 -0400)]
generator: Stop creating `/run/ostree-booted`

This must have always been dead code.  We're trying to iterate
towards a place where it's only `ostree-prepare-root.c` which
parses the `ostree=` kernel argument, and canonically sets up
`/run/ostree-booted`.

2 years agocomposefs: Use lowerdir in /run
Colin Walters [Sat, 22 Jul 2023 19:31:52 +0000 (15:31 -0400)]
composefs: Use lowerdir in /run

I just noticed that this was another constant string duplicated
between prepare-root.c and libostree-1.so, and I went to make
it a common `#define` in libotcore.la.

But then I thought "it's ugly to have this directory mixed into
the deployment namespace" because in some theoretical world
it could also be in the ostree commit, which would cause weird
behavior.

I think this is transient state that is better in `/run`, so move
it there.

2 years agoMerge pull request #2942 from ostreedev/android-bootloader-parsing
Eric Curtin [Thu, 20 Jul 2023 20:58:11 +0000 (21:58 +0100)]
Merge pull request #2942 from ostreedev/android-bootloader-parsing

bootloader: fold all Android Bootloader specific logic into prepare-root

2 years agoMerge pull request #2946 from cgwalters/add-inode-fix-feature
Colin Walters [Thu, 20 Jul 2023 19:12:31 +0000 (15:12 -0400)]
Merge pull request #2946 from cgwalters/add-inode-fix-feature

Add an always-on `inode64` feature

2 years agoAdd an always-on `inode64` feature
Colin Walters [Thu, 20 Jul 2023 13:13:43 +0000 (09:13 -0400)]
Add an always-on `inode64` feature

As I (and others) will be backporting the fix in
https://github.com/ostreedev/ostree/pull/2874/commits/de6fddc6adee09a93901243dc7074090828a1912
pretty far, I want a way for sysadmins and OS builders to
be able to reliably see when their version of ostree has this fix
(Because comparing version numbers isn't portable).

2 years agobootloader: fold all Android Bootloader specific logic into prepare-root
Eric Curtin [Thu, 20 Jul 2023 10:32:30 +0000 (11:32 +0100)]
bootloader: fold all Android Bootloader specific logic into prepare-root

Now that we use androidboot.slot_suffix karg to determine whether we
boot into /ostree/root.a or /ostree/root.b, we can use ostree= karg
simply for parsing the stateroot, although we will still boot into
what's pointed to by /ostree/root.a or /ostree/root.b.

2 years agoMerge pull request #2943 from cgwalters/mount-cleanup
Joseph Marrero Corchado [Wed, 19 Jul 2023 14:35:27 +0000 (10:35 -0400)]
Merge pull request #2943 from cgwalters/mount-cleanup

prepare-root: Drop code mounting `/proc`

2 years agoMerge pull request #2944 from cgwalters/prepare-root-more-cleanup
Joseph Marrero Corchado [Wed, 19 Jul 2023 14:34:46 +0000 (10:34 -0400)]
Merge pull request #2944 from cgwalters/prepare-root-more-cleanup

prepare-root: Drop more dead code

2 years agoprepare-root: Drop more dead code
Colin Walters [Wed, 19 Jul 2023 13:13:53 +0000 (09:13 -0400)]
prepare-root: Drop more dead code

Most of this was used for the old composefs signature model.  We
now reuse the core signature code and link to glib, so we don't
need reimplementations of hex strings and reading files.

2 years agoprepare-root: Drop code mounting `/proc`
Colin Walters [Wed, 19 Jul 2023 13:12:10 +0000 (09:12 -0400)]
prepare-root: Drop code mounting `/proc`

This must be done by the init process here; it was always
dead code in the initramfs path.

We keep the copy of this code in the now-forked -static.c.

2 years agoMerge pull request #2938 from cgwalters/dedup-ostree-parsing
Eric Curtin [Tue, 18 Jul 2023 13:35:45 +0000 (14:35 +0100)]
Merge pull request #2938 from cgwalters/dedup-ostree-parsing

generator: Deduplicate ostree= karg parsing

2 years agoMerge pull request #2939 from cgwalters/ed25519-cleanups
Eric Curtin [Tue, 18 Jul 2023 13:33:58 +0000 (14:33 +0100)]
Merge pull request #2939 from cgwalters/ed25519-cleanups

sign-ed25519: Minor cleanups

2 years agogenerator: Deduplicate ostree= karg parsing
Colin Walters [Mon, 17 Jul 2023 17:48:35 +0000 (13:48 -0400)]
generator: Deduplicate ostree= karg parsing

Avoid having two copies of a regular expression for parsing
the `ostree=` kernel argument.  Because the `ostree-system-generator`
binary already has access to the internals because it's implemented
in the shared library, expose the sysroot version internally
and use that.

Motivated by an attempt to change one of these copies but not
the other.

2 years agosign-ed25519: Don't set sk unless we've validated it
Colin Walters [Tue, 18 Jul 2023 11:54:03 +0000 (07:54 -0400)]
sign-ed25519: Don't set sk unless we've validated it

The semantics of this function now keep the key assigned
even if we fail to validate it, which is ugly.  Only assign
the key after verifying its length.

2 years agosign-ed25519: Add some comments for data structure
Colin Walters [Tue, 18 Jul 2023 11:53:37 +0000 (07:53 -0400)]
sign-ed25519: Add some comments for data structure

Like poor man's generics.

2 years agosign-ed25519: More verbose errors for invalid length
Colin Walters [Mon, 17 Jul 2023 22:03:54 +0000 (18:03 -0400)]
sign-ed25519: More verbose errors for invalid length

Add a helper to compare lengths which includes the found
and expected values.  Use it consistently.

The error message "Incorrect" is misleading; one might think
one had the *wrong* key.  "Ill-formed" makes it clearer that
we're not parsing it at all.

2 years agotests: Remove dead references to "SEED"
Colin Walters [Mon, 17 Jul 2023 21:56:56 +0000 (17:56 -0400)]
tests: Remove dead references to "SEED"

Nothing uses this.

2 years agoMerge pull request #2937 from ericcurtin/ostree2androidboot.slot_suffix
Colin Walters [Mon, 17 Jul 2023 13:46:02 +0000 (09:46 -0400)]
Merge pull request #2937 from ericcurtin/ostree2androidboot.slot_suffix

android-boot: Remove dependency on ostree= karg, use androidboot.slot_suffix=

2 years agoRemove steal_pointer and steal_pointer_impl as we link in glib now
Eric Curtin [Mon, 17 Jul 2023 12:23:27 +0000 (13:23 +0100)]
Remove steal_pointer and steal_pointer_impl as we link in glib now

These were necessary to keep initramfs small, but now we link in glib
anyway so these functions are now redundant.

2 years agoandroid-boot: Remove dependency on ostree= karg, use androidboot.slot_suffix=
Eric Curtin [Mon, 17 Jul 2023 12:22:49 +0000 (13:22 +0100)]
android-boot: Remove dependency on ostree= karg, use androidboot.slot_suffix=

Given the kernel argument androidboot.slot_suffix= is required in
Android AB updates [1] there is no need to check for ostree= or ostree=aboot
at all in the aboot case. This also ensures if the dependancy on ostree=
is removed, the android-boot technique will work regardless.

[1]: https://source.android.com/docs/core/ota/ab/ab_implement

2 years agoMerge pull request #2936 from cgwalters/sign-from-file
Eric Curtin [Sun, 16 Jul 2023 21:22:20 +0000 (22:22 +0100)]
Merge pull request #2936 from cgwalters/sign-from-file

commit: Add `--sign-from-file`

2 years agoMerge pull request #2931 from cgwalters/prepare-root-man
Eric Curtin [Sun, 16 Jul 2023 20:59:32 +0000 (21:59 +0100)]
Merge pull request #2931 from cgwalters/prepare-root-man

man: Add ostree-prepare-root

2 years agoMerge pull request #2929 from cgwalters/prepare-root-drop-pivot
Eric Curtin [Sat, 15 Jul 2023 16:33:56 +0000 (17:33 +0100)]
Merge pull request #2929 from cgwalters/prepare-root-drop-pivot

prepare-root: Drop dead `pivot_root` code

2 years agoMerge pull request #2927 from cgwalters/sysroot-errprefix-bootlinks
Eric Curtin [Sat, 15 Jul 2023 16:31:53 +0000 (17:31 +0100)]
Merge pull request #2927 from cgwalters/sysroot-errprefix-bootlinks

sysroot: Add some error prefixing for bootversion

2 years agoMerge pull request #2935 from cgwalters/prepare-root-config4
Colin Walters [Sat, 15 Jul 2023 13:52:11 +0000 (09:52 -0400)]
Merge pull request #2935 from cgwalters/prepare-root-config4

prepare-root: Refactor composefs config handling

2 years agocommit: Add `--sign-from-file`
Colin Walters [Fri, 14 Jul 2023 23:20:45 +0000 (19:20 -0400)]
commit: Add `--sign-from-file`

Passing the private key via a direct command line argument
is just a bad idea because it's highly likely to get logged
or appear in `ps`.
Spotted in review of work for composefs signatures.

2 years agoprepare-root: Refactor composefs config handling
Colin Walters [Thu, 13 Jul 2023 20:37:41 +0000 (16:37 -0400)]
prepare-root: Refactor composefs config handling

- Convert the current enum into a struct, using `OtTristate` and
  two member variables (expected signature and digest)
- Factor out a helper function to parse this config
- Clean up the logging by consistently using `composefs:` as a prefix
- Add more assertions to more strictly verify our runtime state
  since this is security relevant

2 years agoMerge pull request #2934 from cgwalters/enable-composefs-default
Eric Curtin [Fri, 14 Jul 2023 15:40:42 +0000 (16:40 +0100)]
Merge pull request #2934 from cgwalters/enable-composefs-default

build-sys: Enable composefs at *build time* by default

2 years agobuild-sys: Enable composefs at *build time* by default
Colin Walters [Fri, 14 Jul 2023 14:34:46 +0000 (10:34 -0400)]
build-sys: Enable composefs at *build time* by default

There's no additional dependencies, and it's a small amount
of new code.

The riskiest thing is the changes to ostree-prepare-root, but
I believe that things are in a good state now there.

Again, this just enables it at *build time* - it's still
off at runtime by default.

2 years agoMerge pull request #2928 from cgwalters/prepare-root-config
Colin Walters [Fri, 14 Jul 2023 14:26:25 +0000 (10:26 -0400)]
Merge pull request #2928 from cgwalters/prepare-root-config

More prepare-root cleanups

2 years agoMerge pull request #2932 from cgwalters/aboot-fix-nullderef
Eric Curtin [Fri, 14 Jul 2023 12:48:17 +0000 (13:48 +0100)]
Merge pull request #2932 from cgwalters/aboot-fix-nullderef

mount: Fix gcc -fanalyzer warning for parsing androidboot.slot_suffix

2 years agomount: Fix gcc -fanalyzer warning for parsing androidboot.slot_suffix
Colin Walters [Fri, 14 Jul 2023 10:51:34 +0000 (06:51 -0400)]
mount: Fix gcc -fanalyzer warning for parsing androidboot.slot_suffix

If the karg wasn't present, we'd do a NULL deref which is undefined
behavior.

2 years agoMerge pull request #2920 from ostreedev/dependabot/submodules/composefs-1704f82
Colin Walters [Thu, 13 Jul 2023 21:53:10 +0000 (17:53 -0400)]
Merge pull request #2920 from ostreedev/dependabot/submodules/composefs-1704f82

build(deps): bump composefs from `ac729b5` to `1704f82`

2 years agoman: Add ostree-prepare-root
Colin Walters [Thu, 13 Jul 2023 21:20:32 +0000 (17:20 -0400)]
man: Add ostree-prepare-root

Add an overdue man page that describes this.  Prep for also
documenting composefs things here.

2 years agoUse /run/ostree-booted metadata for sysroot-ro state passing
Colin Walters [Thu, 13 Jul 2023 11:56:29 +0000 (07:56 -0400)]
Use /run/ostree-booted metadata for sysroot-ro state passing

Just like we did with composefs, use the new metadata instead
of a "stamp file".

2 years agoprepare-root: Drop dead `pivot_root` code
Colin Walters [Thu, 13 Jul 2023 12:27:41 +0000 (08:27 -0400)]
prepare-root: Drop dead `pivot_root` code

I think this was only ever used in the "static pid1" path which
is now split out into a separate file.

We always expect that e.g. systemd does the switchroot in
the initramfs, so drop this dead code.

2 years agoremount: Use new metadata in `/run/ostree-booted` for composefs
Colin Walters [Thu, 13 Jul 2023 11:47:32 +0000 (07:47 -0400)]
remount: Use new metadata in `/run/ostree-booted` for composefs

Since we now have a generalized more structured way of serializing
state in the initramfs instead of "stamp files", use it for
passing the composefs state.

2 years agoremount: Don't overwrite /run/ostree-booted
Colin Walters [Thu, 13 Jul 2023 11:28:07 +0000 (07:28 -0400)]
remount: Don't overwrite /run/ostree-booted

Since it should always be written in the initramfs.

2 years agoprepare-root: Add metadata for composefs to `/run/ostree-booted`
Colin Walters [Wed, 12 Jul 2023 20:48:56 +0000 (16:48 -0400)]
prepare-root: Add metadata for composefs to `/run/ostree-booted`

Particularly for the signature case, having this metadata
acts as a reliable "proof of execution" of the signature verification
code (as opposed to parsing a log file or so).

Besides that, this is also just a stronger check for "we're using
composefs" instead of checking for "overlayfs on /".

2 years agoprepare-root: Use constant for ed25519 signature
Colin Walters [Wed, 12 Jul 2023 12:35:17 +0000 (08:35 -0400)]
prepare-root: Use constant for ed25519 signature

Minor cleanup.

2 years agoMerge pull request #2926 from cgwalters/otcore-cfs-constants
Colin Walters [Thu, 13 Jul 2023 11:10:59 +0000 (07:10 -0400)]
Merge pull request #2926 from cgwalters/otcore-cfs-constants

prepare-root: A few cleanups