]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nspawn: make journal linking non-fatal in try and auto modes
authorLennart Poettering <lennart@poettering.net>
Thu, 28 Jan 2016 19:15:49 +0000 (20:15 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 28 Jan 2016 19:16:44 +0000 (20:16 +0100)
Fixes #2091

src/nspawn/nspawn.c

index b183e3aecc74661e76d780bf08f80fef90927532..44c91de85fc2f740af51c7e7410e278c94241a89 100644 (file)
@@ -1337,6 +1337,7 @@ static int setup_journal(const char *directory) {
         sd_id128_t machine_id, this_id;
         _cleanup_free_ char *b = NULL, *d = NULL;
         const char *etc_machine_id, *p, *q;
+        bool try;
         char *id;
         int r;
 
@@ -1344,16 +1345,21 @@ static int setup_journal(const char *directory) {
         if (arg_ephemeral)
                 return 0;
 
+        if (arg_link_journal == LINK_NO)
+                return 0;
+
+        try = arg_link_journal_try || arg_link_journal == LINK_AUTO;
+
         etc_machine_id = prefix_roota(directory, "/etc/machine-id");
 
         r = read_one_line_file(etc_machine_id, &b);
-        if (r == -ENOENT && arg_link_journal == LINK_AUTO)
+        if (r == -ENOENT && try)
                 return 0;
         else if (r < 0)
                 return log_error_errno(r, "Failed to read machine ID from %s: %m", etc_machine_id);
 
         id = strstrip(b);
-        if (isempty(id) && arg_link_journal == LINK_AUTO)
+        if (isempty(id) && try)
                 return 0;
 
         /* Verify validity */
@@ -1366,16 +1372,13 @@ static int setup_journal(const char *directory) {
                 return log_error_errno(r, "Failed to retrieve machine ID: %m");
 
         if (sd_id128_equal(machine_id, this_id)) {
-                log_full(arg_link_journal == LINK_AUTO ? LOG_WARNING : LOG_ERR,
+                log_full(try ? LOG_WARNING : LOG_ERR,
                          "Host and machine ids are equal (%s): refusing to link journals", id);
-                if (arg_link_journal == LINK_AUTO)
+                if (try)
                         return 0;
                 return -EEXIST;
         }
 
-        if (arg_link_journal == LINK_NO)
-                return 0;
-
         r = userns_mkdir(directory, "/var", 0755, 0, 0);
         if (r < 0)
                 return log_error_errno(r, "Failed to create /var: %m");
@@ -1392,21 +1395,19 @@ static int setup_journal(const char *directory) {
         q = prefix_roota(directory, p);
 
         if (path_is_mount_point(p, 0) > 0) {
-                if (arg_link_journal != LINK_AUTO) {
-                        log_error("%s: already a mount point, refusing to use for journal", p);
-                        return -EEXIST;
-                }
+                if (try)
+                        return 0;
 
-                return 0;
+                log_error("%s: already a mount point, refusing to use for journal", p);
+                return -EEXIST;
         }
 
         if (path_is_mount_point(q, 0) > 0) {
-                if (arg_link_journal != LINK_AUTO) {
-                        log_error("%s: already a mount point, refusing to use for journal", q);
-                        return -EEXIST;
-                }
+                if (try)
+                        return 0;
 
-                return 0;
+                log_error("%s: already a mount point, refusing to use for journal", q);
+                return -EEXIST;
         }
 
         r = readlink_and_make_absolute(p, &d);
@@ -1440,7 +1441,7 @@ static int setup_journal(const char *directory) {
         if (arg_link_journal == LINK_GUEST) {
 
                 if (symlink(q, p) < 0) {
-                        if (arg_link_journal_try) {
+                        if (try) {
                                 log_debug_errno(errno, "Failed to symlink %s to %s, skipping journal setup: %m", q, p);
                                 return 0;
                         } else
@@ -1458,7 +1459,7 @@ static int setup_journal(const char *directory) {
                  * permanent journal set up, don't force it here */
                 r = mkdir(p, 0755);
                 if (r < 0) {
-                        if (arg_link_journal_try) {
+                        if (try) {
                                 log_debug_errno(errno, "Failed to create %s, skipping journal setup: %m", p);
                                 return 0;
                         } else