chiark / gitweb /
shared: add ring buffer
[elogind.git] / src / fstab-generator / fstab-generator.c
index 57d0a53f2847051759f3cd4c999ed84c64b86023..a9a5c0203f2cb8276a1486b1d2b809cad0d87efb 100644 (file)
@@ -35,6 +35,7 @@
 #include "fileio.h"
 #include "generator.h"
 #include "strv.h"
+#include "virt.h"
 
 static const char *arg_dest = "/tmp";
 static bool arg_fstab_enabled = true;
@@ -77,6 +78,11 @@ static int add_swap(const char *what, struct mntent *me) {
         assert(what);
         assert(me);
 
+        if (detect_container(NULL) > 0) {
+                log_info("Running in a container, ignoring fstab swap entry for %s.", what);
+                return 0;
+        }
+
         r = mount_find_pri(me, &pri);
         if (r < 0) {
                 log_error("Failed to parse priority");
@@ -189,6 +195,7 @@ static int add_mount(
                 return 0;
 
         if (path_equal(where, "/")) {
+                /* The root disk is not an option */
                 automount = false;
                 noauto = false;
                 nofail = false;
@@ -219,9 +226,7 @@ static int add_mount(
                 source);
 
         if (post && !noauto && !nofail && !automount)
-                fprintf(f,
-                        "Before=%s\n",
-                        post);
+                fprintf(f, "Before=%s\n", post);
 
         if (passno != 0) {
                 r = generator_write_fsck_deps(f, arg_dest, what, where, fstype);
@@ -249,17 +254,15 @@ static int add_mount(
                 return -errno;
         }
 
-        if (!noauto) {
-                if (post) {
-                        lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL);
-                        if (!lnk)
-                                return log_oom();
-
-                        mkdir_parents_label(lnk, 0755);
-                        if (symlink(unit, lnk) < 0) {
-                                log_error("Failed to create symlink %s: %m", lnk);
-                                return -errno;
-                        }
+        if (!noauto && post) {
+                lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL);
+                if (!lnk)
+                        return log_oom();
+
+                mkdir_parents_label(lnk, 0755);
+                if (symlink(unit, lnk) < 0) {
+                        log_error("Failed to create symlink %s: %m", lnk);
+                        return -errno;
                 }
         }
 
@@ -344,6 +347,11 @@ static int parse_fstab(bool initrd) {
                 if (!what)
                         return log_oom();
 
+                if (detect_container(NULL) > 0 && is_device_path(what)) {
+                        log_info("Running in a container, ignoring fstab device entry for %s.", what);
+                        continue;
+                }
+
                 where = initrd ? strappend("/sysroot/", me->mnt_dir) : strdup(me->mnt_dir);
                 if (!where)
                         return log_oom();
@@ -395,7 +403,6 @@ static int parse_fstab(bool initrd) {
 
 static int add_root_mount(void) {
         _cleanup_free_ char *o = NULL, *what = NULL;
-        bool noauto, nofail;
 
         if (isempty(arg_root_what)) {
                 log_debug("Could not find a root= entry on the kernel commandline.");
@@ -421,16 +428,14 @@ static int add_root_mount(void) {
         if (!o)
                 return log_oom();
 
-        noauto = mount_test_option(arg_root_options, "noauto");
-        nofail = mount_test_option(arg_root_options, "nofail");
-
         log_debug("Found entry what=%s where=/sysroot type=%s", what, strna(arg_root_fstype));
         return add_mount(what,
                          "/sysroot",
                          arg_root_fstype,
                          o,
                          1,
-                         noauto, nofail,
+                         false,
+                         false,
                          false,
                          SPECIAL_INITRD_ROOT_FS_TARGET,
                          "/proc/cmdline");