docs: Add more details about 3-way merge

This came up a few times so let's go into more details in the docs.
This commit is contained in:
Jonathan Lebon 2021-04-30 10:50:15 -04:00
parent 89481ca4be
commit 788e171b7c
1 changed files with 20 additions and 4 deletions

View File

@ -69,10 +69,26 @@ given commit is deployed more than once, it will be incremented.
This is supported because the previous deployment may have This is supported because the previous deployment may have
configuration in `/etc` that we do not want to use or overwrite. configuration in `/etc` that we do not want to use or overwrite.
Now that we have a deployment directory, a 3-way merge is Now that we have a deployment directory, a 3-way merge is performed
performed between the (by default) currently booted deployment's between the (by default) currently booted deployment's `/etc`, its
`/etc`, its default default configuration, and the new deployment (based on its `/usr/etc`).
configuration, and the new deployment (based on its `/usr/etc`).
How it works is:
- Files in the currently booted deployment's `/etc` which were modified
from the default `/usr/etc` (of the same deployment) are retained.
- Files in the currently booted deployment's `/etc` which were not
modified from the default `/usr/etc` (of the same deployment) are
upgraded to the new defaults from the new deployment's `/etc/etc`.
Roughly, this means that as soon as you modify or add a file in `/etc`,
this file will be propagated forever as is (though there is a
corner-case, where if your modification eventually exactly matches a
future default file, then the file will go back to following future
default updates from that point on).
You can use `ostree admin config-diff` to see the differences between
your booted deployment's `/etc` and the OSTree defaults. A command like
`diff {/usr,}/etc` will additional print line-level differences.
## Atomically swapping boot configuration ## Atomically swapping boot configuration