summaryrefslogtreecommitdiff
path: root/src/libostree/ostree-sysroot-deploy.c
Commit message (Collapse)AuthorAgeFilesLines
* Update FSF license notices to use URL instead of addressJoseph Marrero2021-12-071-3/+1
|
* deploy: Ignore sockets, fifos in /etc during mergeColin Walters2021-10-011-3/+1
| | | | | | | | | | | https://bugzilla.redhat.com/show_bug.cgi?id=1945274 is an issue where a privileged kubernetes daemonset is writing a socket into `/etc`. This makes ostree upgrades barf. Now, they should clearly move it to `/run`. However, one option is for us to just ignore it instead of erroring out. Some brief investigation shows that e.g. `git add somesocket` is a silent no-op, which is an argument in favor of ignoring it. Closes: https://github.com/ostreedev/ostree/issues/2446
* Use generator to enable ostree-remount.service and ostree-finalize-staged.pathColin Walters2021-06-161-22/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We struggled for a long time with enablement of our "internal units", trying to follow the philosophy that units should only be enabled by explicit preset. See https://bugzilla.redhat.com/show_bug.cgi?id=1451458 and https://github.com/coreos/rpm-ostree/pull/1482 etc. And I just saw chat (RH internal on a proprietary system sadly) where someone hit `ostree-remount.service` not being enabled in CentOS8. Thinking about this more, I realized we've shipped a systemd generator for a long time and while its only role until now was to generate `var.mount`, but by using it to force on our internal units, we don't require people to deal with presets anymore. Basically we're inverting things so that "if ostree= is on the kernel cmdline, then enable our units" and not "enable our units, but have them use ConditionKernelCmdline=ostree to skip". Drop the weird gyrations we were doing around `ostree-finalize-staged.path` too; forking `systemctl start` is just asking for bugs. So after this, hopefully we won't ever again have to think about distribution presets and our units.
* deploy: Warn if we find content in the deployment's /varColin Walters2021-06-101-0/+36
| | | | | | | | | | | This will be ignored, so let's make it very clear people are doing something wrong. Motivated by a bug in a build pipeline that injected `/var/lib/rpm` into an ostree commit which ended up crashing rpm-ostree because it was an empty db which it wasn't expecting. It *also* turns out rpm-ostree is incorrectly dumping content in the deployment `/var` today, which is another bug.
* sysroot: Add _require_booted_deployment() APIColin Walters2021-03-171-2/+2
| | | | | This is a common pattern that is replicated both in our code and in rpm-ostree a lot. Let's add a canonical API.
* deploy: Add subbootversion to journalColin Walters2021-02-281-5/+13
| | | | | | To help debug an issue we've seen where `/boot` isn't in sync with the `/ostree/boot` dir, let's log to the journal what we're doing.
* sysroot: Handle ro /boot but rw /sysrootColin Walters2021-01-101-85/+2
| | | | | | | | | | | | | | | | | The recent change in https://github.com/coreos/fedora-coreos-config/pull/659 broke some of our tests that do `mount -o remount,rw /sysroot` but leave `/boot` read-only. We had code for having `/boot` read-only before `/sysroot` but in practice we had a file descriptor for `/sysroot` that we opened before the remount that would happen later on. Clean things up here so that in the library, we also remount `/boot` at the same time we remount `/sysroot` if either are readonly. Delete the legacy code for remounting `/boot` rw if we're not in a mount namespace. I am fairly confident most users are either using the `ostree` CLI, or they're using the mount namespace.
* sysroot: Also maintain canonical boot_fdColin Walters2021-01-101-17/+15
| | | | | | | Just like we hold a fd for `/sysroot`, also do so for `/boot` instead of opening and closing it in a few places. This is a preparatory cleanup for further work.
* Refactor: Centralise choosing the appropriate bootloaderWilliam Manley2020-10-261-25/+3
| | | | In preparation for enhancing `_ostree_sysroot_query_bootloader`
* deploy: Remove (transfer none) from fd argColin Walters2020-10-131-1/+1
| | | | | GI complains. And in general one needs to assume that file descriptors aren't stolen.
* lib/deploy: Don't leak fd when checksumming dtbsJonathan Lebon2020-10-071-2/+2
| | | | Likely the root of https://bugzilla.redhat.com/show_bug.cgi?id=1886149.
* lib/deploy: Add support for overlay initrdsJonathan Lebon2020-09-301-0/+112
| | | | | | | | | | | | | | | | | | | | | | | | | 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.
* lib/deploy: Add deploy/stage APIs with optionsJonathan Lebon2020-09-301-20/+89
| | | | | | | 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.
* deploy: Remove deployment bootcsum assertionColin Walters2020-09-241-31/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Avoid shadowing local variablesavoid-shadowsPhaedrus Leeds2020-09-131-4/+4
| | | | | | This should help with code readability. Fixes https://github.com/ostreedev/ostree/issues/2194
* deploy: Add some error prefixing around xattr settingColin Walters2020-09-091-3/+3
| | | | | | | | | | | Looking at https://github.com/coreos/coreos-assembler/issues/1703 a user is getting a bare: `error: fsetxattr: Permission denied` I don't think it's these code paths since a deploy isn't happening but on inspection I noticed we didn't have error prefixing here.
* Merge pull request #2149 from stb-tester/boot-self-symlinkOpenShift Merge Robot2020-08-191-0/+6
|\ | | | | sysroot: Support /boot on root or as seperate filesystem for syslinux and u-boot
| * sysroot: Support /boot on root or as seperate filesystem for syslinux and u-bootWilliam Manley2020-07-151-0/+6
| | | | | | | | | | | | | | | | | | | | We use a similar trick to having a `sysroot -> .` symlink on the real root here to support both /boot on root as well as on a separate filesystem. No matter how it's mounted `/boot/xyz` will always refer to the file you'd expect. This is nicer than my previous attempts at this because there's no configuration nor auto-detection required.
* | lib/deploy: Clarify comment re. staging APIJonathan Lebon2020-08-171-2/+2
| | | | | | | | | | | | | | | | | | Don't mention deprecation in the description for `ostree_sysroot_deploy_tree` since there are legitimate use cases for it (e.g. to create the first deployment via `ostree admin deploy`). Instead, make the comment clearly redirect to the staging API when booted into the sysroot.
* | lib/deploy: Drop unneccessary function argJonathan Lebon2020-08-171-5/+0
| |
* | lib/deploy: Simplify deployment creationJonathan Lebon2020-08-171-3/+1
| | | | | | | | Minor cleanup; we were declaring a superfluous variable.
* | lib/deploy: Avoid shadowing variableJonathan Lebon2020-08-171-2/+3
| | | | | | | | There's already a `boot_relpath` variable in the outside scope.
* | lib/deploy: Clean up kargs override handlingJonathan Lebon2020-08-171-11/+10
|/ | | | | | | Tighten up how we handle kargs here so it's more clear. When we call `sysroot_finalize_deployment`, any karg overrides have already been set on the bootconfig object of the deployment. So re-setting it here is redundant and confusing.
* deploy: support devicetree directoryStefan Agner2020-05-291-8/+119
| | | | | | | | | | | | | | | | | | | | | | | Add support for a devicetree directory at /usr/lib/modules/$kver/dtb/. In ARM world a general purpose distribution often suppports multiple boards with a single operating system. However, OSTree currently only supports a single device tree, which does not allow to use the same OSTree on different ARM machines. In this scenario typically the boot loader selects the effective device tree. This adds device tree directory support for the new boot artefact location under /usr/lib/modules. If the file `devicetree` does not exist, then the folder dtb will be checked. All devicetrees are hashed into the deployment hash. This makes sure that even a single devicetree change leads to a new deployment and hence can be rolled back. The loader configuration has a new key "devicetreepath" which contains the path where devicetrees are stored. This is also written to the U-Boot variable "fdtdir". The boot loader is expected to use this path to load a particular machines device tree from. Closes: #1900 Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
* Initial fs-verity supportColin Walters2020-01-271-31/+68
| | | | | | | | | | | | | | | | | | Using fs-verity is natural for OSTree because it's file-based, as opposed to block based (like dm-verity). This only covers files - not symlinks or directories. And we clearly need to have integrity for the deployment directories at least. Also, what we likely need is an API that supports signing files as they're committed. So making this truly secure would need a lot more work. Nevertheless, I think it's time to start experimenting with it. Among other things, it does *finally* add an API that makes files immutable, which will help against some accidental damage. This is basic enablement work that is being driven by Fedora CoreOS; see also https://github.com/coreos/coreos-assembler/pull/876
* Support mounting /sysroot (and /boot) read-onlyColin Walters2019-12-111-4/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We want to support extending the read-only state to cover `/sysroot` and `/boot`, since conceptually all of the data there should only be written via libostree. Or at least for `/boot` should *mostly* just be written by ostree. This change needs to be opt-in though to avoid breaking anyone. Add a `sysroot/readonly` key to the repository config which instructs `ostree-remount.service` to ensure `/sysroot` is read-only. This requires a bit of a dance because `/sysroot` is actually the same filesystem as `/`; so we make `/etc` a writable bind mount in this case. We also need to handle `/var` in the "OSTree default" case of a bind mount; the systemd generator now looks at the writability state of `/sysroot` and uses that to determine whether it should have the `var.mount` unit happen before or after `ostree-remount.service.` Also add an API to instruct the libostree shared library that the caller has created a new mount namespace. This way we can freely remount read-write. This approach extends upon in a much better way previous work we did to support remounting `/boot` read-write. Closes: https://github.com/ostreedev/ostree/issues/1265
* lib/deploy: Also install HMAC file into /bootJonathan Lebon2019-10-291-0/+28
| | | | | | | | | | | | To allow for FIPS mode, we need to also install the HMAC file from `/usr/lib/modules` to `/boot` alongside the kernel image where the `fips` dracut module will find it. For details, see: https://github.com/coreos/fedora-coreos-tracker/issues/302 Note I didn't include the file in the boot checksum since it's itself a checksum of the kernel, so we don't really gain much here other than potentially causing an unnecessary bootcsum bump.
* Merge pull request #1937 from cgwalters/zipl-backendOpenShift Merge Robot2019-10-161-1/+20
|\ | | | | bootloader: Add a zipl bootloader backend
| * bootloader: Add a zipl bootloader backendColin Walters2019-10-161-1/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | zipl is a bit special in that it parses the BLS config files directly *but* we need to run the command to update the "boot block". Hence, we're not generating a separate config file like the other backends. Instead, extend the bootloader interface with a `post_bls_sync` method that is run in the same place we swap the `boot/loader` symlink. We write a "stamp file" in `/boot` that says we need to run this command. The reason we use stamp file is to prevent the case where the system is interrupted after BLS file is updated, but before zipl is triggered, then zipl boot records are not updated. This opens the door to making things eventually-consistent/reconcilable by later adding a systemd unit to run `zipl` if we're interrupted via a systemd unit - I think we should eventually take this approach everywhere rather than requiring `/boot/loader` to be a symlink. Author: Colin Walters <walters@verbum.org> Tested-by: Tuan Hoang <tmhoang@linux.ibm.com> Co-Authored-By: Tuan Hoang <tmhoang@linux.ibm.com>
* | sysroot: [scan-build]: Remove a dead assignmentColin Walters2019-10-151-4/+3
|/ | | | Clarify the conditionals here and remove a dead assignment.
* lib/bootconfig-parser: Always include deployment index in BLS titleJavier Martinez Canillas2019-09-021-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If there are different deployments for the same commit version, the BLS snippets will have the same title fields (but different version fields): $ grep title * ostree-1-testos.conf:title TestOS 42 20190902.0 (ostree) ostree-2-testos.conf:title TestOS 42 20190902.0 (ostree) ostree-3-testos.conf:title TestOS 42 20190902.0 (ostree) But bootloaders could expect the title field to be unique for BLS files. For example, the zipl bootloader used in the s390x architecture uses the field to name the boot sections that are created from the BLS snippets. So two BLS snippets having the same title would lead to zipl failing to create the IPL boot sections because they would have duplicated names: $ zipl Using config file '/etc/zipl.conf' Using BLS config file '/boot/loader/entries/ostree-3-testos.conf' Using BLS config file '/boot/loader/entries/ostree-2-testos.conf' Using BLS config file '/boot/loader/entries/ostree-1-testos.conf' Error: Config file '/etc/zipl.conf': Line 0: section name 'TestOS 42 20190902.0 (ostree)' already specified Avoid this by always including the deployment index along with the commit version in the title field, so this will be unique even if there are BLS files for deployments that use the same commit version: $ grep title * ostree-1-testos.conf:title TestOS 42 20190902.0 (ostree:2) ostree-2-testos.conf:title TestOS 42 20190902.0 (ostree:1) ostree-3-testos.conf:title TestOS 42 20190902.0 (ostree:0) $ zipl Using config file '/etc/zipl.conf' Using BLS config file '/boot/loader/entries/ostree-3-testos.conf' Using BLS config file '/boot/loader/entries/ostree-2-testos.conf' Using BLS config file '/boot/loader/entries/ostree-1-testos.conf' Building bootmap in '/boot' Building menu 'zipl-automatic-menu' Adding #1: IPL section 'TestOS 42 20190902.0 (ostree:0)' (default) Adding #2: IPL section 'TestOS 42 20190902.0 (ostree:1)' Adding #3: IPL section 'TestOS 42 20190902.0 (ostree:2)' Preparing boot device: dasda (0120). Done. Closes: #1911 Approved by: cgwalters
* lib/deploy: handle FIFREEZE ENOSYS failureDaniel Drake2019-08-211-1/+1
| | | | | | | | | | | | | When running under qemu, unimplemented ioctls such as FIFREEZE return ENOSYS, and this causes the deployment to fail. Catch this and handle it like EOPNOTSUPP. I'm not sure if qemu's behaviour is fully correct here (or if it should return EOPNOTSUPP) but it's trivial to handle regardless. Closes: #1901 Approved by: cgwalters
* lib/kargs: Make API public and upstream new rpm-ostree APIsAllen Bai2019-06-181-13/+13
| | | | | | | | | | | | | | | | This change makes public the current kargs API in src/libostree/ostree-kernel-args.c and adds documentations. Upstreams the new kargs API from rpm-ostree/src/libpriv/rpmostree-kargs-process.c Merges libostree_kernel_args_la_SOURCES to libostree_1_la_SOURCES in Makefile-libostree.am Upstreams tests/check/test-kargs.c from rpm-ostree. Closes: #1833 Closes: #1869 Approved by: jlebon
* lib: add minimum version to various symbols based on libostree-released.symFelix Krull2019-05-191-0/+4
| | | | | Closes: #1861 Approved by: cgwalters
* lib/deploy: Support locking deployment finalizationJonathan Lebon2019-04-241-0/+11
| | | | | | | | | | | Teach `ostree-finalize-staged.service` to check for a file in `/run` to determine if it should do the finalization. This will be used in RPM-OSTree, where we want to be able to separate out "preparing updates" from "making update the default" for more fine-grained control. See: https://github.com/projectatomic/rpm-ostree/issues/1748 Closes: #1841 Approved by: cgwalters
* lib/deploy: Write to journal if nothing to finalizeJonathan Lebon2019-04-241-1/+4
| | | | | | | | | This can happen if a deployment was staged and later cleaned up. Though just as a helper when debugging issues, let's explicitly mention that case. Closes: #1841 Approved by: cgwalters
* lib: Add ot_journal_* helper macrosJonathan Lebon2019-04-241-12/+4
| | | | | | | | | Rather than wrapping each instance of `sd_journal_*` with `HAVE_SYSTEMD`, let's just add some convenience macros that are just no-op if we're not compiling with systemd. Closes: #1841 Approved by: cgwalters
* grub2: Generate config from pending deploymentRobert Fairley2019-04-241-1/+2
| | | | | | | | | | | Generate a grub2 config using the pending deployment, if a grub2 bootloader is detected in the sysroot. Allows grub2-mkconfig to run if there are no previous deployments. Fixes: #1774 Closes: #1831 Approved by: jlebon
* lib/deploy: Don't include version twice in bootmenu titleJonathan Lebon2019-03-091-1/+1
| | | | | | | | | | | | | | | In Silverblue right now, the boot menu title looks like this: Fedora 29.20190301.0 (Workstation Edition) 29.20190301.0 (ostree) This is because RPM-OSTree's `mutate-os-release` feature is enabled, which injects the OSTree version string directly into `VERSION` and `PRETTY_NAME`. So appending the version string again is a bit redundant. Let's just do a simple substring check here before adding the version to the title. Closes: #1829 Approved by: cgwalters
* Add sysroot.bootloader repo config keyRobert Fairley2019-03-011-2/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The sysroot.bootloader key configures the bootloader that OSTree uses when deploying a sysroot. Having this key allows specifying behavior not to use the default bootloader backend code, which is preferable when creating a first deployment from the sysroot (#1774). As of now, the key can take the values "auto" or "none". If the key is not given, the value defaults to "auto". "auto" causes _ostree_sysroot_query_bootloader() to be used when writing a new deployment, which is the original behavior that dynamically detects which bootloader to use. "none" avoids querying the bootloader dynamically. The BLS config fragments are still written to sysroot/boot/loader/entries for use by higher-level software. More values can be supported in future to specify a single bootloader, different behavior for the bootloader code, or a list of bootloaders to try. Resolves: #1774 Closes: #1814 Approved by: jlebon
* boot: Add ostree-finalize-staged.pathJonathan Lebon2018-10-231-0/+9
| | | | | | | | | | | | | | | | Rather than manually starting the `ostree-finalize-staged.service` unit, we can leverage systemd's path units for this. It fits quite nicely too, given that we already have a path we drop iif we have a staged deployment. To give some time for the preset to make it to systems, we don't yet drop the explicit call to `systemctl start`. Though we do make it conditional based on a DEBUG env var so that we can actually test it in CI for now. Once we're sure this has propagated, we can drop the `systemctl start` path and the env var together. Closes: #1740 Approved by: cgwalters
* lib/sysroot-deploy: Write to journal when finalizingJonathan Lebon2018-10-051-3/+19
| | | | | | | | | | Write to the journal when starting to finalize a staged deployment. Combined with the "Transaction completed" message we already emit, this makes it easy later on to determine whether the operation was successful by inspecting the journal. This will be used by `rpm-ostree status`. Closes: #1750 Approved by: cgwalters
* deploy: Fix removing /var/.updated with separate /var mountColin Walters2018-09-211-1/+45
| | | | | | | | | | | | | | | | | | | There's some subtlety to this, we don't handle all cases. But the 99% cases are using `--sysroot deploy` to create an initial deployment, and then doing upgrades from inside a booted deployment. It was only the latter case that didn't work with a separate `/var`. Fixing all of them would probably require libostree to learn how to e.g. look at `/etc/fstab` (or worse, systemd mount units?) and handle the mounting. I don't think we want to do anything like that right now, since there are no active drivers for the use case. Closes: https://github.com/ostreedev/ostree/issues/1729 Closes: #1730 Approved by: akiernan
* deploy: Fix overriding kernel args for staged deploymentsColin Walters2018-07-091-1/+1
| | | | | | | | | | | | | This is the inverse of https://github.com/ostreedev/ostree/pull/1558 aka commits cadece6c4f398ca61d21e497bd6e3fbb549f9cf6 and 3358698c86d80821d81443c906621c92672f99fb Needed to fix `rpm-ostree kargs` test suite with default staging; skipping a test here for now as eventually what we'll do is turn on the rpm-ostree suite fully here. Closes: #1677 Approved by: jlebon
* deploy: Retain staged by defaultColin Walters2018-07-061-24/+42
| | | | | | | | | | | | | | | | | | | | | | | | For `rpm-ostree ex livefs` we have a use case of pushing a rollback deployment. There's no reason this should require deleting the staged deployment (and doing so actually breaks livefs which tries to access it as a data source). I was initially very conservative here, but I think it ends up being fairly easy to retain the staged deployment. We need to handle two cases: First, when the staged is *intentionally* deleted; here, we just need to unlink the `/run` file, and then everything will be sync'd up after reloading. Second, (as in the livefs case) where we're retaining it, e.g. adding a deployment to the end. What I realized here is that we can have the code keep `new_deployments` as view without staged, and then when we do the final reload we'll end up re-reading it from disk anyways. Closes: #1672 Approved by: jlebon
* deploy: Change BootLoaderSpec filenames so they can be used for sortingJavier Martinez Canillas2018-06-271-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the BLS snippets are named ostree-$ID-$VARIANT_ID-$index.conf, but the BLS config files are actually sorted by using the version field which is the inverse of the index. In most places, _ostree_sysroot_read_boot_loader_configs() is used to get the BLS files and this function already returns them sorted by the version field. The only place where the index trailing number is used is in the ostree-grub-generator script that lists the BLS files to populate the grub config file. But for some bootloaders the BLS filename is the criteria for sorting by taking the filename as a string version. So on these bootloaders the BLS entries will be listed in the reverse order. To avoid that, change the BLS snippets filename to have the version field instead of the index and also to have the version before deployment name. Make the filenames to be of the form ostree-$version-$ID-$VARIANT_ID.conf so the version is before the deployment name. Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> Closes: #1654 Approved by: cgwalters
* deploy: Delete .updated file from /etc and /var on new deploymentsDan Nicholson2018-06-181-7/+16
| | | | | | | | | | | | | | | | | | | Systemd units using ConditionNeedsUpdate run if the mtime of .updated in the specified directory is newer than /usr. Since /usr has an mtime of 0, there's no way to have an older .updated file. Systemd units typically specify ConditionNeedsUpdate=/etc or ConditionNeedsUpdate=/var to support stateless systems like ostree. Remove the file from the new deployment's /etc and the OS's /var regardless of where they came from to ensure that these systemd units run when booting new deployments. This will provide a method to run services only on upgrade. Closes: #1628 https://bugzilla.gnome.org/show_bug.cgi?id=752950 Closes: #1631 Approved by: cgwalters
* lib/deploy: Add semi-colon in post-deployment msgJonathan Lebon2018-05-041-1/+1
| | | | | | | | | Let's add a semi-colon between the "bootconfig swap" part and the "deployment count change" to make it more clear they're separate statements. Closes: #1575 Approved by: cgwalters
* deploy: Use fdatasync() for new kernel/initramfs by defaultColin Walters2018-05-021-1/+1
| | | | | | | | | | | | | | | | | While we do a `syncfs()` plus `FIFREEZE/THAW` for `/boot`, that only comes during deployment finalization. The code here today generally assumes that if the file exists it's been fully written. So let's do a `fdatasync()` before we do the `rename()`. This just came out of looking through the code while working on deployment staging. In that scenario there's a much larger window between when we copy the kernel/initramfs and when we sync `/boot`. Closes: #1571 Approved by: jlebon
* lib/deploy: Do post-ops when removing staged commitColin Walters2018-05-021-9/+42
| | | | | | | | | | | | | | | | These are further fixes based on running more of the rpm-ostree test suite. When dropping the staged deployment, we do need to do the "post operations" such as bumping the sysroot mtime, so that clients know something changed. We also need to regenerate the deployment refs. And of course do a sysroot reload. Also, add a "base cleanup" after creating a staged deployment which also regenerates the refs. Closes: #1570 Approved by: jlebon