summaryrefslogtreecommitdiffstats
path: root/src/nspawn
diff options
context:
space:
mode:
authorArian van Putten <arian.vanputten@gmail.com>2020-12-20 23:11:57 +0100
committerLennart Poettering <lennart@poettering.net>2021-01-12 18:29:19 +0100
commit089cd8b34b5732e57321c92c16382dc8366faa42 (patch)
tree2c20649ae7c5e544a74a1c5a30dd04da5757edef /src/nspawn
parenttimedate: actually reset system time with new timezone (diff)
downloadsystemd-089cd8b34b5732e57321c92c16382dc8366faa42.tar.xz
systemd-089cd8b34b5732e57321c92c16382dc8366faa42.zip
nspawn: make rootfs relative to oci bundle path
This is inline with the OCI runtime spec: On POSIX platforms, path is either an absolute path or a relative path to the bundle. For example, with a bundle at /to/bundle and a root filesystem at /to/bundle/rootfs, the path value can be either /to/bundle/rootfs or rootfs. The value SHOULD be the conventional rootfs. (https://github.com/opencontainers/runtime-spec/blob/master/config.md)
Diffstat (limited to 'src/nspawn')
-rw-r--r--src/nspawn/nspawn-oci.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/nspawn/nspawn-oci.c b/src/nspawn/nspawn-oci.c
index ccbae616ca..fe5768b022 100644
--- a/src/nspawn/nspawn-oci.c
+++ b/src/nspawn/nspawn-oci.c
@@ -444,6 +444,8 @@ static int oci_process(const char *name, JsonVariant *v, JsonDispatchFlags flags
}
static int oci_root(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
+ Settings *s = userdata;
+ int r;
static const JsonDispatch table[] = {
{ "path", JSON_VARIANT_STRING, json_dispatch_string, offsetof(Settings, root) },
@@ -451,7 +453,21 @@ static int oci_root(const char *name, JsonVariant *v, JsonDispatchFlags flags, v
{}
};
- return json_dispatch(v, table, oci_unexpected, flags, userdata);
+ r = json_dispatch(v, table, oci_unexpected, flags, s);
+ if (r < 0)
+ return r;
+
+ if (s->root && !path_is_absolute(s->root)) {
+ char *joined;
+
+ joined = path_join(s->bundle, s->root);
+ if (!joined)
+ return log_oom();
+
+ free_and_replace(s->root, joined);
+ }
+
+ return 0;
}
static int oci_hostname(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {