summaryrefslogtreecommitdiff
path: root/Makefile-libostree.am
Commit message (Collapse)AuthorAgeFilesLines
...
* Makefile-libostree.am: Work around clang issues with g-ir-scannerRobert Fairley2019-06-211-0/+4
| | | | | | | | | | | | Work around an issue with clang-7 in Fedora 29 where the `-fstack-clash-protection` flag is not recognized. Force the compiler used by `g-ir-scanner` to `gcc`, so that the flag is recognized. Related: https://github.com/projectatomic/rpm-ostree/pull/1787#issuecomment-473971585 Closes: #1871 Approved by: jlebon
* lib/kargs: Make API public and upstream new rpm-ostree APIsAllen Bai2019-06-181-10/+3
| | | | | | | | | | | | | | | | 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
* build: add ostree-soup-* to build process when configured with avahiMarcus Folkesson2018-07-031-0/+7
| | | | | | | | | | | | | | | | | | | | Avoid getting these link errors: ./.libs/libostree-1.so: undefined reference to `soup_uri_set_path' ./.libs/libostree-1.so: undefined reference to `soup_uri_new' ./.libs/libostree-1.so: undefined reference to `soup_uri_free' ./.libs/libostree-1.so: undefined reference to `soup_uri_set_scheme' ./.libs/libostree-1.so: undefined reference to `soup_uri_to_string' ./.libs/libostree-1.so: undefined reference to `soup_uri_set_host' ./.libs/libostree-1.so: undefined reference to `soup_uri_set_port' collect2: error: ld returned 1 exit status Reproduce with: ./configure --with-avahi --without-soup Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com> Closes: #1666 Approved by: cgwalters
* Make P2P API public (no longer experimental)Matthew Leeds2018-06-041-21/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the API that allows P2P operations (e.g. pulling an ostree ref from a LAN or USB source) is hidden behind the configure flag --enable-experimental-api. This commit makes the API public and makes that flag essentially a no-op (leaving it in place in case we want to use it again in the future). The P2P API has been tested over the last several months and proven to work. This means that since we're no longer using the "experimental" feature flag, P2P builds of Flatpak will fail when using versions of OSTree from this commit onwards, until Flatpak is patched in the near future. If you want to build Flatpak < 0.11.8 with P2P enabled and link against OSTree 2018.6, you'll have to patch Flatpak. However, since Flatpak won't yet have a hard dependency on OSTree 2018.6, it needs a new way to determine if the P2P API in OSTree is available, so this commit adds a "p2p" feature flag. This way the feature set is more semantically correct than if we had continued to use the "experimental" feature flag. In addition to making the P2P API public, this commit makes the P2P unit tests run by default, removes the f27-experimental CI instance that's no longer needed, changes a few man pages to reflect the changes, and updates the bash completion script to accept the new commands and options. Closes: #1596 Approved by: cgwalters
* 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
* build-sys: Link with -ldl for rust buildColin Walters2018-01-041-0/+4
| | | | | | | | | I didn't dive into this too much, it looks like something in rust changed that broke our build. Probably libstd gained a dependency on `-ldl` or so, and that's handled by cargo? Anyways linking against it isn't going to hurt. Closes: #1391 Approved by: smcv
* lib/pull: Split verify_bindings() out into a cmdprivate methodPhilip Withnall2017-12-141-0/+1
| | | | | | | | | | It will be used by the fsck utility in future. We could expose it publicly in future too, if needed. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #1347 Approved by: cgwalters
* build: Add a TODO comment about improving glib-mkenums usage in futurePhilip Withnall2017-11-071-0/+1
| | | | | | | | | Signed-off-by: Philip Withnall <withnall@endlessm.com> https://github.com/ostreedev/ostree/pull/1329 Closes: #1330 Approved by: cgwalters
* build: Define OSTREE_ENABLE_EXPERIMENTAL_API for g-ir-scannerDan Nicholson2017-11-031-0/+4
| | | | | | | | | | | | When compiling libostree, OSTREE_ENABLE_EXPERIMENTAL_API is managed via config.h. However, g-ir-scanner can't use that since it gets confused about the namespace of all the random macros. It won't include the experimental APIs unless the macro is defined through another means. Without this, none of the experimental APIs were being included in the gir data. Closes: #1322 Approved by: pwithnall
* build: Ensure enumtypes.h is built before enumtypes.cDan Nicholson2017-11-031-1/+1
| | | | | | | | | | | ostree-enumtypes.c includes ostree-enumtypes.h, so make needs to be told about the dependency. Without it, parallel make could try to build ostree-enumtypes.c before the header file exists. I hit this when running `make -j OSTree-1.0.gir`. Closes: #1322 Approved by: pwithnall
* lib/repo-finder: Add OstreeRepoFinderOverridePhilip Withnall2017-10-191-0/+2
| | | | | | | | | | | This is another OstreeRepoFinder implementation; it returns results from a given set of URIs. It’s designed to be used for implementing user overrides to other repo-finders, or for implementing unit tests. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #1281 Approved by: mwleeds
* Add --with-crypto=gnutlsJussi Laako2017-09-251-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | Introduce support for GnuTLS for computing cryptograpic hashes, similar to the OpenSSL backend. A reason to do this is some distributors want to avoid GPLv3, and GPG pulls that in. A possible extension of using GnuTLS would be replacing the GPG signing with `PKCS#7` signatures and `X.509` keys. We also support `--with-crypto=openssl`, which has the same effect as `--with-openssl`, and continues to be supported. Changes by Colin Walters <walters@verbum.org>: - Drop libgcrypt option for now - Unify buildsystem on --with-crypto Link: https://mail.gnome.org/archives/ostree-list/2017-June/msg00002.html Signed-off-by: Jussi Laako <jussi.laako@linux.intel.com> Closes: #1189 Approved by: cgwalters
* Move the include directive to the enum templateEmmanuele Bassi2017-07-171-1/+0
| | | | | | | | | | | There is no actual written guarantee in glib-mkenums that the template line specified using --fhead will be added after the templates specified inside the template file. Since the template file is only used once, we can simply move the `#include` directive inside the template, so that it is guaranteed to be in the right place. Closes: #1007 Approved by: cgwalters
* build: Ensure all .sym files are distributed in tarballsPhilip Withnall2017-07-121-1/+5
| | | | | | | | | | | | | | | | | | | | Since we’re using a custom variable for listing the .sym files, automake’s magic support for automatically distributing all files in conditionals doesn’t work, and the devel and experimental .sym files were only being distributed if `make dist` was run on a source tree which had been configured with --enable-experimental-api or not a release flag. Fix that by explicitly listing all the .sym files in EXTRA_DIST. Specifically, this fixes the case of trying to compile with --enable-experimental-api from a release tarball which was disted with --disable-experimental-api. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #1001 Approved by: cgwalters
* build: Don't scan ostree-remote.h for introspection if !experimental-apiColin Walters2017-06-271-3/+4
| | | | | | | | | | It's a bit unfortunate that the scanner doesn't error on this, but anyways Closes: https://github.com/ostreedev/ostree/issues/966 Closes: #967 Approved by: jlebon
* ci: Make introspection warnings fatalColin Walters2017-06-271-1/+1
| | | | | Closes: #965 Approved by: pwithnall
* lib/repo-finder: Add Avahi based OstreeRepoFinder implementationPhilip Withnall2017-06-261-1/+17
| | | | | | | | | | | | | | | | | | | | | This is a more complex implementation of OstreeRepoFinder which resolves ref names to remote URIs by looking for refs advertised by peers on the local network using DNS-SD records and mDNS (Avahi). The idea is to allow OS and app updates to be propagated over local networks, without the internet. It requires an OSTree server and code to generate the DNS-SD adverts in order to be fully functional — support for this will be added separately. Unit tests are included. Includes fixes by Krzesimir Nowak <krzesimir@kinvolk.io>. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #924 Approved by: cgwalters
* lib/bloom: Add an internal bloom filter implementationPhilip Withnall2017-06-261-0/+2
| | | | | | | | | | | | | | | | This will be used in an upcoming commit. It adds a basic bloom filter implementation, using the SipHash family of hash functions. The implementation (including its parameter choices and hash functions) will become a protocol detail in future, so must not be changed so that its output is bitwise incompatible between OSTree versions. Unit tests are included. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #924 Approved by: cgwalters
* lib/repo-finder: Add mount based OstreeRepoFinder implementationPhilip Withnall2017-06-261-1/+3
| | | | | | | | | | | | | | | | | | | | This is a basic implementation of OstreeRepoFinder which resolves ref names to remote URIs by looking for them on any currently mounted removable storage volumes. The idea is to support OS and app updates via USB stick. Unit tests are included. This bumps libostree’s maximum GLib dependency from 2.44 to 2.50 for g_drive_is_removable(). If GLib 2.50 is not available, the call which needs it will be omitted and the OstreeRepoFinderMount implementation will scan all volumes (not just removable ones); this is a performance hit, but not a functionality hit. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #924 Approved by: cgwalters
* lib/repo-finder: Add config-file based OstreeRepoFinder implementationPhilip Withnall2017-06-261-1/+3
| | | | | | | | | | | | | This is a basic implementation of OstreeRepoFinder which resolves ref names to remote URIs by looking their collection IDs up in the local configuration of remotes who have their collection-id key set. Unit tests are included. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #924 Approved by: cgwalters
* lib/repo-finder: Add basic support for finding remote URIs by ref namePhilip Withnall2017-06-261-1/+6
| | | | | | | | | | | | | | | | | | | | Add an initial OstreeRepoFinder interface (but no implementations), which will find remote URIs by ref names and collection IDs, the combination of which is globally unique. The new API is used in a new ostree_repo_find_updates() function, which resolves a list of ref names to update into a set of remote URIs to pull them from, which can be treated as mirrors. It is an attempt to generalise resolution of the URIs to pull from, and to generalise determination of the order and parallelisation which they should be downloaded from in. Includes fixes by Krzesimir Nowak <krzesimir@kinvolk.io>. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #924 Approved by: cgwalters
* lib/ref: Add OstreeCollectionRef type for globally unique refsPhilip Withnall2017-06-261-0/+2
| | | | | | | | | | | | | | | | | | This is a type representing the tuple (collection ID, ref name), which is guaranteed to be globally unique. It will be used in upcoming commits. It introduces the concept of a ‘collection’ which is a unique, curated set of refs which lie in the same trust domain (i.e. all signed by the same key and validated by the same developer). Flathub might be a collection, for example; or the set of OS refs coming from a particular OS vendor. It includes a function for validating collection IDs. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #924 Approved by: cgwalters
* build-sys: Add "release build" flag, use for symbol versioningColin Walters2017-06-191-3/+4
| | | | | | | | | | | | | | | | | I was trying to do a release and move the symbols from `-devel.sym` into `-release.sym`, but it turns out that at least GNU binutils `ld` treats an empty version script as a syntax error. Fix this by adding a "release build" flag, and only include `-devel` in non-release builds. This would also make it easier to inject that flag into our `.pc` and `ostree-version.h` and `ostree --version` metadata, but I didn't do that yet. EDIT: Turns out a simpler fix is just to add an empty section. However I kept this commit since it's a useful sanity check for whether we should include `-devel.sym` in builds, and we may want to inject the metadata later. Closes: #942 Approved by: jlebon
* lib: Split symbol versioning into -released and -develColin Walters2017-06-161-12/+12
| | | | | | | | | | | | | | | So far a lot of submitted PR have added symbols into the first section. Split the file into `-released` and `-devel` to make this more obvious. To further enforce things, we hardcode a checksum of the `-released` file in `test-symbols.sh`. Only release commits should update that checksum. Did you notice I like checksums? Closes: #931 Approved by: pwithnall
* Switch to using a systemd generator for /varColin Walters2017-05-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | If one wants to set up a mount for `/var` in `/etc/fstab`, it won't be mounted since `ostree-prepare-root` set up a bind mount for `/var` to `/sysroot/ostree/$stateroot/var`, and systemd will take the already extant mount over what's in `/etc/fstab`. There are a few options to fix this, but what I settled on is parsing `/etc/fstab` in a generator (exactly like `systemd-fstab-generator` does), except here we look for an explicit mount for `/var`, and if one *isn't* found, synthesize the default ostree mount to the stateroot. Another nice property is that if an admin creates a `var.mount` unit in `/etc` for example, that will also override our mount. Note that today ostree doesn't hard depend on systemd, so this behavior only kicks in if we're built with systemd *and* libmount support (for parsing `/etc/fstab`). I didn't really test that case though. Initially I started writing this as a "pure libc" program, but at one point decided to use `libostree.so` to find the booted deployment. That didn't work out because `/boot` wasn't necessarily mounted and hence we couldn't find the bootloader config. A leftover artifact from this is that the generator code calls into libostree via the "cmd private" infrastructure. But it's an easy way to share code, and doesn't hurt. Closes: #859 Approved by: jlebon
* libostree: Make OstreeRemote a public and internal APIPhilip Withnall2017-05-081-0/+7
| | | | | | | | | | | | | Previously it was static to ostree-repo.c. Make it usable throughout libostree so it can be used by an upcoming commit, but also expose the typedef and reference counting functions so that opaque OstreeRemote pointers can be used by user code, in anticipation of exposing more of its API publicly in future. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #832 Approved by: cgwalters
* build: Add --enable-experimental-api configure option for unstable APIsPhilip Withnall2017-05-081-1/+9
| | | | | | | | | | | | | | | | There are currently no unstable APIs, but some will be added in following commits. They will be built and exposed in the libostree global symbol list iff configured with --enable-experimental-api. Distributions should not package OSTree with --enable-experimental-api. This is designed for previewing new APIs on controlled platforms; any of the APIs hidden behind this option may be changed or removed at any point. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #832 Approved by: cgwalters
* build: Dist ostree-sepolicy-private.hColin Walters2017-03-231-0/+1
| | | | | | | | Should fix the Travis builds which actually generate a legacy tarball via Automake. Closes: #755 Approved by: jlebon
* build: Various fixes for openssl buildColin Walters2017-03-211-2/+3
| | | | | | | | | | | | | | | This actually worked before because `pkg-config --cflags openssl` is empty, and the linker was satisfying `-lssl -lcrypto` from our indirect dependencies. Also, in fact we *currently* just want `pkg-config libcrypto` i.e. `-lcrypto`, since we aren't actually using openssl to speak TLS. This doesn't actually matter on Fedora at least since they're both in the `openssl-libs` package, but they are separate for a reason. Closes: #749 Approved by: jlebon
* build: Quiet automake warning for bupsplitColin Walters2017-03-211-3/+3
| | | | | | | | Use `_SRCS` and not `_SOURCES`, the latter of which makes automake assume there's something for it to do. Closes: #749 Approved by: jlebon
* lib: Exclude soup header from introspectionColin Walters2017-03-131-1/+1
| | | | | | | | | | | We should fix this more reliably by defining a separate variable for introspection (and gtk-doc) sources at some point, but this does the trick for now. Avoids a spam of warnings, and it's definitely not public API. Closes: #734 Approved by: jlebon
* libostree: add versioning macrosGeorges Basile Stavracas Neto2017-03-111-2/+3
| | | | | | | | | | | | | | | | | OSTree currently provides no way to inspect the versioning information at run time, being only available at compile time through pkg-config. This is a problem for e.g. Flatpak, that needs to check whether the 'update-frequency' option is available. Checking at compile time isn't great since it's not looking for new symbols, but only if an optional feature is present. This commit, then, adds a new header that is generated at compile time, exposing OSTree's versioning information. Closes: #728 Approved by: cgwalters
* build: Remove .PHONY for Rust shared libraryColin Walters2017-02-141-1/+0
| | | | | | | | | I have no idea why I made the lib `.PHONY` originally; it's clearly wrong, and I noticed because when I was doing `sudo make install`, we were doing a rebuild, which in turn triggered other things to be built, and they'd be owned by root. Closes: #682 Approved by: jlebon
* libcurl backendColin Walters2017-02-091-2/+15
| | | | | | | | | | | | | | | | | | | | | For rpm-ostree, we already link to libcurl indirectly via librepo, and only having one HTTP library in process makes sense. Further, libcurl is (I think) more popular in the embedded space. It also supports HTTP/2.0 today, which is a *very* nice to have for OSTree. This seems to be working fairly well for me in my local testing, but it's obviously brand new nontrivial code, so it's going to need some soak time. The ugliest part of this is having to vendor in the soup-url code. With Oxidation we could follow the path of Firefox and use the [Servo URL parser](https://github.com/servo/rust-url). Having to redo cookie parsing also sucked, and that would also be a good oxidation target. But that's for the future. Closes: #641 Approved by: jlebon
* rust: Support `make dist` -> cargo vendorColin Walters2017-02-071-1/+3
| | | | | | | | | | What we do here basically is set things up in a `dist-hook` so that our Rust sources are vendored at `dist` time. This gives us a single tarball still, and ideally should be transparent to downstream builders, as long as they have the `cargo/rust` toolchain. Closes: #669 Approved by: jlebon
* trusted.gpg.d: keep in the same locationJonathan Lebon2017-02-031-1/+1
| | | | | | | | | | With the package rename from ostree to libostree, the trusted.gpg.d/ dir changed install location from /usr/share/ostree to /usr/share/libostree. Let's keep the same dir to remain compatible with existing installations that may already have keys there. Closes: #668 Approved by: cgwalters
* oxidation: Add implementation of bupsplit in RustColin Walters2017-02-031-7/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is an initial drop of "oxidation", or adding implementation of components in Rust. The bupsplit code is a good target - no dependencies, just computation. Translation into Rust had a few twists - - The C code relies a lot on overflowing unsigned ints, and also on the C promotion rules for e.g. `uint8_t -> int32_t` - There were some odd loops that I introduced bugs in while translating...in particular, the function always returns `len`, but I mistakenly translated to `len+1`, resulting in an OOB read on the C side, which was hard to debug. On the plus side, an off-by-one array indexing in the Rust code paniced nicely. In practice, we'll need a lot more build infrastructure to make this work, such as using `cargo vendor` when producing build artifacts for example. Also, Cargo is yet another thing we need to cache. Where do we go with this? Well, I think we should merge this, it's not a lot of code. We can just have it be an alternative CI target. Should we do a lot more right now? Probably not immediately, but I find the medium/long term prospects pretty exciting! Closes: #656 Approved by: jlebon
* libostree: Don't distribute generated enumtypes in tarballsSimon McVittie2017-01-311-3/+3
| | | | | | | | | | They are built at "make" time and cleaned up by "make clean", so there is no need to distribute them. Signed-off-by: Simon McVittie <smcv@debian.org> Closes: #665 Approved by: cgwalters
* fetcher: Move high level functions into "fetcher-util"Colin Walters2017-01-041-0/+2
| | | | | | | | Conceptually these now lay on top of the core API, and don't reference libsoup. This is preparation for libcurl porting, but it's also just generally better. Closes: #636 Approved by: jlebon
* build: Always do enum scanning nowColin Walters2016-12-081-6/+0
| | | | | | | | | | | Since we stopped including the libsoup headers in `ostree-fetcher.h`, we can now unconditionally do enum scanning, and drop a build time conditional. Prep for libcurl porting. Closes: #620 Approved by: jlebon
* Define and use cleanup helpers for libarchiveColin Walters2016-12-051-0/+1
| | | | | | | | This should fix some of the ASAN leaks around libarchive usage, and is generally better. Closes: #609 Approved by: jlebon
* libostree: mark ostree_repo_checkout_tree_at as deprecatedGiuseppe Scrivano2016-07-301-1/+2
| | | | | | | | | and move its definition to a separate file. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com> Closes: #417 Approved by: cgwalters
* build-sys: Make libostree-1.so depend on the symbol fileColin Walters2016-06-241-0/+1
| | | | | | | Otherwise one changing it doesn't cause a symbol to be exported. Closes: #365 Approved by: jlebon
* lib: Use sd_journal directly (optionally)Colin Walters2016-06-211-0/+5
| | | | | | | | | | | | | | This was the last caller of libgsystem that isn't `gs_file_get_path_cached()`. I think the use case ostree has where the same code can be called via command line and via a shared library *and* via a daemon is rather unusual, so let's just copy the code for logging from libgsystem into here. For example rpm-ostree hard depends on a daemon mode, so it'll just use `sd_journal` directly. Closes: #341 Approved by: jlebon
* build: distribute libostree.sym in tarballsSimon McVittie2016-06-131-0/+2
| | | | | | | Signed-off-by: Simon McVittie <smcv@debian.org> Closes: #337 Approved by: cgwalters
* pull: Move libsoup-related code from ostree-repo.c to ostree-repo-pull.cMathnerd3142016-06-091-1/+1
| | | | | | | | | | This centralizes the ifdef's in one file, which will make it easier to write new pull backends. ostree-repo-pull.c is now built unconditionally Closes: #327 Approved by: cgwalters
* libostree: Add g_autoptr() support for the public typesKrzesimir Nowak2016-05-171-0/+1
| | | | | | | | | | | | | | | | To avoid breaking the ostree users we hide the autoptr setup behind an OSTREE_WITH_AUTOCLEANUPS variable. The variable is set to 0 by default, so users that want to start using them, have to define the variable themselves to 1. Probably after some transition period, the variable will be set 1 by default. This is conditional on GLib >= 2.44.0 being available. It does not bump ostree's dependency on GLib. Closes: #295 Approved by: cgwalters
* build: Don't run glib-mkenums if there's nothing to doColin Walters2016-05-121-3/+7
| | | | | | | This fixes the build without libsoup. Closes: #296 Approved by: gatispaeglis
* Make enum generation private by default, export stub symbolColin Walters2016-05-121-0/+1
| | | | | | | | | | | | | | | | | When we added enum type generation, the generated symbols used the `ostree_` prefix, and at the time that implied they were public. So we started (if built with libsoup) exporting `ostree_fetcher_config_flags_get_type`. I think it's not worth confusing ABI checkers, so let's export the dummy symbol forever, and switch enums to be private by default. We should revisit this and also export some auto-generated enum types for public enums, but that's a separate patch. Closes: #296 Approved by: gatispaeglis
* deploy: Handle a read-only /bootColin Walters2016-03-211-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | I'd like to encourage people to make OSTree-managed systems more strictly read-only in multiple places. Ideally everywhere is read-only normally besides `/var/`, `/tmp/`, and `/run`. `/boot` is a good example of something to make readonly. Particularly now that there's work on the `admin unlock` verb, we need to protect the system better against things like `rpm -Uvh kernel.rpm` because the RPM-packaged kernel won't understand how to do OSTree right. In order to make this work of course, we *do* need to remount `/boot` as writable when we're doing an upgrade that changes the kernel configuration. So the strategy is to detect whether it's read-only, and if so, temporarily mount read-write, then remount read-only when the upgrade is done. We can generalize this in the future to also do `/etc` (and possibly `/sysroot/ostree/` although that gets tricky). One detail: In order to detect "is this path a mountpoint" is nontrivial - I looked at copying the systemd code, but the right place is to use `libmount` anyways.