summaryrefslogtreecommitdiff
path: root/src/libostree/ostree-sysroot-private.h
Commit message (Collapse)AuthorAgeFilesLines
* Update FSF license notices to use URL instead of addressJoseph Marrero2021-12-071-3/+1
|
* Use generator to enable ostree-remount.service and ostree-finalize-staged.pathColin Walters2021-06-161-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* sysroot: Also maintain canonical boot_fdColin Walters2021-01-101-0/+4
| | | | | | | 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.
* lib/deploy: Add support for overlay initrdsJonathan Lebon2020-09-301-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | 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.
* deploy: Remove deployment bootcsum assertionColin Walters2020-09-241-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Add "transient" unlockColin Walters2020-08-071-0/+1
| | | | | | | | | | | | | | | | | | | | | | I was thinking a bit more recently about the "live" changes stuff https://github.com/coreos/rpm-ostree/issues/639 (particularly since https://github.com/coreos/rpm-ostree/pull/2060 ) and I realized reading the last debates in that issue that there's really a much simpler solution; do exactly the same thing we do for `ostree admin unlock`, except mount it read-only by default. Then, anything that wants to modify it does the same thing libostree does for `/sysroot` and `/boot` as of recently; create a new mount namespace and do the modifications there. The advantages of this are numerous. First, we already have all of the code, it's basically just plumbing through a new entry in the state enumeration and passing `MS_RDONLY` into the `mount()` system call. "live" changes here also naturally don't persist, unlike what we are currently doing in rpm-ostree.
* Support mounting /sysroot (and /boot) read-onlyColin Walters2019-12-111-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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/kargs: Make API public and upstream new rpm-ostree APIsAllen Bai2019-06-181-1/+0
| | | | | | | | | | | | | | | | 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/deploy: Support locking deployment finalizationJonathan Lebon2019-04-241-0/+1
| | | | | | | | | | | 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
* boot: Add ostree-finalize-staged.pathJonathan Lebon2018-10-231-0/+3
| | | | | | | | | | | | | | | | 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: Maintain one variable for "root is ostree booted"Colin Walters2018-05-021-2/+1
| | | | | | | | | This was pointed out in a previous PR review; we don't have a need for the separate variables. Prep for adding an API for this. Closes: #1568 Approved by: jlebon
* Add concept of "staged" deploymentColin Walters2018-04-121-0/+21
| | | | | | | | | | | | | | | | | | | | | | Add API to write a deployment state to `/run/ostree/staged-deployment`, along with a systemd service which runs at shutdown time. This is a big change to the ostree model for hosts, but it closes a longstanding set of bugs; many, many people have hit the "losing changes in /etc" problem. It also avoids the other problem of racing with programs that modify `/etc` such as LVM backups: https://bugzilla.redhat.com/show_bug.cgi?id=1365297 We need this in particular to go to a full-on model for automatically updated host systems where (like a dual-partition model) everything is fully prepared and the reboot can be taken asynchronously. Closes: https://github.com/ostreedev/ostree/issues/545 Closes: #1503 Approved by: jlebon
* sysroot: Split out a helper function to delete a deployment dirColin Walters2018-04-111-0/+6
| | | | | | | Prep for staged deployments. Closes: #1535 Approved by: jlebon
* sysroot: Rework how we find booted deploymentColin Walters2018-03-151-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I was looking at this code in prep for "staging" deployments, and there are several cleanups to be made here. The first thing I noticed is that we look for the `ostree=` kernel argument, but the presence of that should be exactly equivalent to having `/run/ostree-booted` exist. We just added a member variable for that, so let's make use of it. Related to this, we were erroring out if we had the karg but didn't find a deployment. But this can happen if e.g. one is using `ostree admin --sysroot` from an ostree-booted system! It's actually a bit surprising no one has reported this so far; I guess in the end people are either using non-ostree systems or running from containers. Let's add a member variable `root_is_sysroot` that we can use to determine if we're looking at `/`. Then, our more precise "should find a booted deployment" state is when both `ostree_booted` and `root_is_sysroot` are TRUE. Next, rather than walking all of the deployments after parsing, we can inline the `fstatat()` while parsing. The mild ugly thing about this is assigning to the sysroot member variable while parsing, but I will likely clean that up later, just wanted to avoid rewriting everything in one go. Closes: #1497 Approved by: jlebon
* sysroot: Track whether /run/ostree-booted existsColin Walters2018-03-151-0/+1
| | | | | | | Prep for further work around deployment staging. Closes: #1497 Approved by: jlebon
* Add SPDX-License-Identifier to source filesMarcus Folkesson2018-01-301-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | SPDX License List is a list of (common) open source licenses that can be referred to by a “short identifier”. It has several advantages compared to the common "license header texts" usually found in source files. Some of the advantages: * It is precise; there is no ambiguity due to variations in license header text * It is language neutral * It is easy to machine process * It is concise * It is simple and can be used without much cost in interpreted environments like java Script, etc. * An SPDX license identifier is immutable. * It provides simple guidance for developers who want to make sure the license for their code is respected See http://spdx.org for further reading. Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com> Closes: #1439 Approved by: cgwalters
* tree-wide: Remove Emacs modelinesColin Walters2017-09-211-2/+1
| | | | | | | | | We added a `.dir-locals.el` in commit: 9a77017d87b74c5e2895cdd64ad098018929403f There's no need to have it per-file, with that people might think to add other editors, which is the wrong direction. Closes: #1206 Approved by: jlebon
* repo: Introduce ostree_repo_open_at() and ostree_repo_create_at()Colin Walters2017-08-151-2/+1
| | | | | | | | | | | This essentially completes our fd-relative conversion. While here, I cleaned up the semantics of `ostree_repo_create()` and `ostree_repo_create_at()` to be more atomic - basically various scripts were testing for the `objects` subdirectory, so let's formalize that. Closes: #820 Approved by: jlebon
* lib/sysroot: Add journal-msg signalColin Walters2017-08-101-0/+4
| | | | | | | | | | | | | | | This will allow us to drop the awful hack in rpm-ostree where we watch our own stdout. In general, libraries shouldn't write to stdout. Also we can kill the systemd journal wrapper code. There's some duplication at each call site now...but it's easier than trying to write a `sd_journal_send()` wrapper. I was originally going to have this emit all of the structured data too as a `GVariant` but decided it wasn't worth it right now. Closes: #1052 Approved by: jlebon
* lib/deploy: Use a FIFREEZE/FITHAW cycle for /bootColin Walters2017-08-081-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | See: http://marc.info/?l=linux-fsdevel&m=149520244919284&w=2 XFS doesn't flush the journal on `syncfs()`. GRUB doesn't know how to follow the XFS journal, so if the filesystem is in a dirty state (possible with xfs `/boot`, extremely likely with `/`, if the journaled data includes content for `/boot`, the system may be unbootable if a system crash occurs. Fix this by doing a `FIFREEZE`+`FITHAW` cycle. Now, most people probably would have replaced the `syncfs()` invocation with those two ioctls. But this would have become (I believe) the *only* place in libostree where we weren't safe against interruption. The failure mode would be ugly; nothing else would be able to write to the filesystem until manual intervention. The real fix here I think is to land an atomic `FIFREEZETHAW` ioctl in the kernel. I might try a patch. In the meantime though, let's jump through some hoops and set up a "watchdog" child process that acts as a fallback unfreezer. Closes: https://github.com/ostreedev/ostree/issues/876 Closes: #1049 Approved by: jlebon
* Add a notion of "physical" sysroot, use for remote writingColin Walters2017-07-181-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (Note this PR was reverted in <https://github.com/ostreedev/ostree/pull/902>; this version should be better) Using `${sysroot}` to mean the physical storage root: We don't want to write to `${sysroot}/etc/ostree/remotes.d`, since nothing will read it, and really `${sysroot}` should just have `/ostree` (ideally). Today the Anaconda rpmostree code ends up writing there. Fix this by adding a notion of "physical" sysroot. We determine whether the path is physical by checking for `/sysroot`, which exists in deployment roots (and there shouldn't be a `${sysroot}/sysroot`). In order to unit test this, I added a `--sysroot` argument to `remote add`. However, doing this better would require reworking the command line parsing for the `remote` argument to support specifying `--repo` or `--sysroot`, and I didn't quite want to do that yet in this patch. This second iteration of this patch fixes the bug we hit the first time; embarassingly enough I broke `ostree remote list` finding system remotes. The fix is to have `ostree_repo_open()` figure out whether it's the same as `/ostree/repo` for now. Down the line...we might consider having the `ostree remote` command line itself instatiate an `OstreeSysroot` by default, but this maximizes compatibility; we just have to pay a small cost that `ostree` usage outside of that case like `ostree static-delta` in a releng Jenkins job or whatever will do this `stat()` too. Closes: https://github.com/ostreedev/ostree/issues/892 Closes: #1008 Approved by: mbarnes
* Revert "Add a notion of "physical" sysroot, use for remote writing"Colin Walters2017-06-021-2/+1
| | | | | | | | | | | | | | | | This reverts commit 1eff3e83436b6129c0dc350dbbda52ba330e3834. There are a few issues with it. It's not a critical thing for now, so let's ugly up the git history and revisit when we have time to debug it and add more tests. Besides the below issue, I noticed that the simple `ostree remote add` now writes to `/ostree/repo/config` because we *aren't* using the `--sysroot` argument. Closes: https://github.com/ostreedev/ostree/issues/901 Closes: #902 Approved by: mike-nguyen
* Add a notion of "physical" sysroot, use for remote writingColin Walters2017-06-011-1/+2
| | | | | | | | | | | | | | | | | | | Using `${sysroot}` to mean the physical storage root: We don't want to write to `${sysroot}/etc/ostree/remotes.d`, since nothing will read it, and really `${sysroot}` should just have `/ostree` (ideally). Today the Anaconda rpmostree code ends up writing there. Fix this by adding a notion of "physical" sysroot. We determine whether the path is physical by checking for `/sysroot`, which exists in deployment roots (and there shouldn't be a `${sysroot}/sysroot`). In order to unit test this, I added a `--sysroot` argument to `remote add`. However, doing this better would require reworking the command line parsing for the `remote` argument to support specifying `--repo` or `--sysroot`, and I didn't quite want to do that yet in this patch. Closes: https://github.com/ostreedev/ostree/issues/892 Closes: #896 Approved by: jlebon
* lib/sysroot: Add non-failable ostree_sysroot_repo()Colin Walters2017-05-261-0/+1
| | | | | | | | | | | | Having a failable accessor is annoying, since it's really common to reference both. Instead, open the repo once when we load the sysroot, and provide a non-failable accessor. This is also prep for `ostree_repo_open_at()`, which collapses the separation between `ostree_repo_new()` and `ostree_repo_open()`. Closes: #886 Approved by: jlebon
* lib/cleanup: Port some of the cleanup code to fd-relative and new styleColin Walters2017-04-241-1/+2
| | | | | | | | | | There aren't many users of `g_file_enumerator_iterate()` left - those remaining are usually good candidates for porting. There's some more porting to do in this file; a mix of trivial and harder. This one is a good candidate for an individual commit. Closes: #803 Approved by: jlebon
* sysroot: Don't cache sepolicyColin Walters2017-03-281-2/+0
| | | | | | | | | | | | | | | | In [this commit](https://github.com/ostreedev/ostree/commit/6ce80f9685e6273dbcb4731d6650a10976ea220a) for some reason I added a `sepolicy` member to the sysroot. I have no idea why I did that, and it's conceptually wrong since the policy is specific to a *deployment*. This bit me when I was working on [a pull request](https://github.com/ostreedev/ostree/pull/763) elsewhere, since at that point it was `NULL`. We already pass around the sepolicy in the deployment code, so just stop caching it. Closes: #764 Approved by: jlebon
* repo+tests: Add [core]disable-xattrs=true, use it on overlayfsColin Walters2017-03-241-1/+3
| | | | | | | | | | | | | | | | | | | | | | There are a lot of things suboptimal about this approach, but on the other hand we need to get our CI back up and running. The basic approach is to - in the test suite, detect if we're on overlayfs. If so, set a flag in the repo, which gets picked up by a few strategic places in the core to turn on "ignore xattrs". I also had to add a variant of this for the sysroot work. The core problem here is while overlayfs will let us read and see the SELinux labels, it won't let us write them. Down the line, we should improve this so that we can selectively ignore e.g. `security.*` attributes but not `user.*` say. Closes: https://github.com/ostreedev/ostree/issues/758 Closes: #759 Approved by: jlebon
* sysroot: Add ostree_sysroot_write_deployments_with_options()Colin Walters2017-03-231-6/+0
| | | | | | | | | | | | | | More sophisticated users of libostree like rpm-ostree need control over things like the system repository. Previously we introduced a "no cleanup" flag to `ostree_sysroot_simple_write_deployment()`, but that's a high level API that does filtering on its own. Since rpm-ostree needs more control, let's expose the bare essentials of the "sysroot commit" operation with an extensible options structure, where one of the options is whether or not to do post-transaction repository operations. Closes: #745 Approved by: jlebon
* sysroot: Prep refactoring of cleanup logicColin Walters2017-03-201-12/+5
| | | | | | | | | | | | For future work I'm going to tweak how we handle cleanup, and the private cleanup flags didn't really end up being used - we only specify "prune repo or not". So fold that into a boolean for now. The sysroot deploy logic then has a single "do_postclean" boolean, which is all I want to expose as public API. Closes: #744 Approved by: jlebon
* sysroot: Avoid double cleanup, and ensure no cleanup if specifiedColin Walters2016-09-081-0/+6
| | | | | | | | | | | | | | | | | Since forever, we've been doing two cleanups. In https://github.com/ostreedev/ostree/commit/8ece4d6d51bdbe3e41ab318259276bb83e553aa0 I thought we were doing just one and wanted to go to zero (if specified), but I actually just dropped one cleanup. In https://github.com/projectatomic/rpm-ostree/pull/452 @jlebon pointed out the duplication. Fix this by creating a new internal deploy wrapper that takes cleanup flags. (Since we already had the "piecemeal cleanup" API internally, let's frame it in terms of that, rather than passing down a boolean). Closes: #500 Approved by: jlebon
* docs: Get API docs working againMathnerd3142016-06-091-0/+4
| | | | | | | | | | | | | | This changes around a few things that didn't work for me: * Section names seem to be ostree-* instead of libostree-* * Also XML files are ostree-* (they didn't show up at all) - gtk-doc doesn't seem to parse const _OSTREE_PUBLIC correctly * pull documentation is now on the actual functions rather than stubs * Update gitignore with some more files And there some changes to make gtk-doc give fewer warnings (not finished) Closes: #327 Approved by: cgwalters
* admin: Add an `unlock` command, and libostree APIColin Walters2016-03-231-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I'm trying to improve the developer experience on OSTree-managed systems, and I had an epiphany the other day - there's no reason we have to be absolutely against mutating the current rootfs live. The key should be making it easy to rollback/reset to a known good state. I see this command as useful for two related but distinct workflows: - `ostree admin unlock` will assume you're doing "development". The semantics hare are that we mount an overlayfs on `/usr`, but the overlay data is in `/var/tmp`, and is thus discarded on reboot. - `ostree admin unlock --hotfix` first clones your current deployment, then creates an overlayfs over `/usr` persistent to this deployment. Persistent in that now the initramfs switchroot tool knows how to mount it as well. In this model, if you want to discard the hotfix, at the moment you roll back/reboot into the clone. Note originally, I tried using `rofiles-fuse` over `/usr` for this, but then everything immediately explodes because the default (at least CentOS 7) SELinux policy denies tons of things (including `sshd_t` access to `fusefs_t`). Sigh. So the switch to `overlayfs` came after experimentation. It still seems to have some issues...specifically `unix_chkpwd` is broken, possibly because it's setuid? Basically I can't ssh in anymore. But I *can* `rpm -Uvh strace.rpm` which is handy. NOTE: I haven't tested the hotfix path fully yet, specifically the initramfs bits.
* lib: Add ostree_sysroot_load_if_changed() APIColin Walters2016-03-031-0/+1
| | | | | | | | | This will allow daemons like rpm-ostree to detect if there are any new deployments efficiently, in combination with using inotify. If there are any changes, rpm-ostree wants publish them on DBus. While we're here, add some changes to start doing unit C testing of the sysroot API.
* lib: Add ostree_sysroot_init_osname() API, bump mtimeColin Walters2016-03-031-0/+3
| | | | | | | | | | And change the command line to use it. rpm-ostree had a copy of this code, and thus there's a clear reason to have an API. While we're moving this into API, ensure the mtime on deploy is bumped after an osname is created, so that daemons like rpm-ostree can notice changes. (In reality, creating the directory should do this, but let's be double sure)
* ostree-sysroot: add debug option to help testingJonathan Lebon2016-02-191-0/+8
| | | | | | | | | | | If ostree is run in a test setup where it operates as root in a tmp directory, it might cause issues to flag the deployments as immutable. The test harness might simply be doing an `rm -rf` (effectively the case for gnome-desktop-testing-runner), which will then fail. We add a new debug option to the ostree_sysroot object using GLib's GDebugKey functionality to allow our tests to communicate to ostree that we don't want immutable deployments.
* sysroot: Add ostree_sysroot_prepare_cleanup()Matthew Barnes2015-09-161-0/+12
| | | | | | | | | | New public function works like ostree_sysroot_cleanup() EXCEPT FOR pruning the repository. Under the hood, add _ostree_sysroot_piecemeal_cleanup() which takes flags to better control what files are cleaned up. Both public cleanup functions are now wrappers for _ostree_sysroot_piecemeal_cleanup() with different flags.
* sysroot: Add an API to lockColin Walters2015-05-051-0/+5
| | | | | | | | | | | | | | | | | | If a system administrator happens to type `ostree admin upgrade` multiple times, currently that will lead to a potentially corrupted system. I originally attempted to do locking *internally* in `libostree`, but that didn't work out because currently a number of the commands perform multi-step operations that all need to be serialized. All of the current code in `ostree admin deploy` is an example. Therefore, allow callers to perform locking, as most of the higher level logic is presently implemented there. At some point, we can revisit having internal locking, but it will be difficult. A more likely approach would be similar to Java's approach with concurrency on iterators - a "fail fast" method.
* sysroot: Cache an OstreeRepo instanceMatthew Barnes2015-04-171-0/+3
| | | | | | Rather than returning a new OstreeRepo instance in each call to ostree_sysroot_get_repo(), cache one internally so the same instance is returned each time.
* sysroot: Port some deployment reading code to fd-relative APIsColin Walters2015-03-101-6/+6
| | | | More low hanging fruit in the sysroot department.
* syntax-check: Remove empty lines at the end of fileGiuseppe Scrivano2015-02-021-1/+0
| | | | Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
* Explicitly label .origin files as configurationColin Walters2015-01-231-0/+2
| | | | | | | | | | | | subscription-manager has a daemon that runs in a confined domain, and it doesn't have permission to write usr_t, which is the default label of /ostree/deploy/$osname/deploy. A better long term fix is probably to move the origin file into the deployment root as /etc/ostree/origin.conf or so. In the meantime, let's ensure the .origin files are labeled as configuration.
* Add (non-atomic) support for GRUB2 + UEFIColin Walters2014-10-231-1/+4
| | | | | | | | | | | | | | | | | | | We need basic support for UEFI - many newer servers don't support BIOS compatibility mode anymore. However, this patch only implements non-atomic because UEFI is FAT, and we can't do the previous design for OSTree of atomic swap of /boot/loader. The Fedora/RHEL UEFI layout has the kernels on a "real" /boot partition, and /boot/efi/EFI/$vendor just holds the grub2 UEFI binary and grub.cfg. Following this, /boot/loader is still on the OS boot partition, and we still atomically swap it. This potentially paves the way to atomic upgrades in the future. https://bugzilla.gnome.org/show_bug.cgi?id=724246
* deploy: Rework kernel arguments, add --karg-append to "admin deploy"Colin Walters2014-01-161-7/+1
| | | | | | | | | | | | | | | | | The "ordered hash" code was really just for kernel arguments. And it turns out it needs to be a multihash (for e.g. multiple console= arguments). So turn the OstreeOrderedHash into OstreeKernelArgs, and move the bits to split key=value and such into there. Now we're not making this public API yet - the public OstreeSysroot just takes char **kargs. To facilitate code reuse between ostree/ and libostree/, make it a noinst libtool library. It'll be duplicated in the binary and library, but that's OK for now. We can investigate making OstreeKernelArgs public later. https://bugzilla.gnome.org/show_bug.cgi?id=721136
* sysroot: Support more arbitrary deployment changesColin Walters2013-10-021-0/+6
| | | | | | | | | This commit changes the sysroot API so that one can create arbitrary new deployment checkouts, then commit them as one step. This is to enable things like an automatic bisection tool which say create 50 deployments at once, then when done clean them up. This also moves some printfs from the library into src/ostree.
* libostree: Remove private header file from ostree.hColin Walters2013-09-201-0/+1
| | | | Was breaking pkgsys-ostree.
* sysroot: Clean up APIColin Walters2013-09-161-0/+14
| | | | | | | | | | | | | Now that we have a real GObject for the sysroot, we have a convenient place to keep track of 4 pieces of state: * The current deployment list * The current bootversion * The current subbootversion * The current booted deployment (if any) Avoid requiring callers to pass all of this around and load it piecemeal; instead the new thing is ostree_sysroot_load().
* libostree: Make OstreeBootloader privateColin Walters2013-09-151-0/+2
| | | | | It was only temporarily public while functionality was being merged down; that's done now.
* libostree: Nearly complete move of API into OstreeSysrootColin Walters2013-09-151-0/+7
| | | | Move the deployment code too.
* libostree: Move a lot more sysroot API hereColin Walters2013-09-151-0/+57
OstreeBootloader is temporarily public API.