117 lines
4.4 KiB
Diff
117 lines
4.4 KiB
Diff
|
From 84d816c48b57b43e833e2917bbd278c116816fcf Mon Sep 17 00:00:00 2001
|
||
|
From: Lennart Poettering <lennart@poettering.net>
|
||
|
Date: Thu, 28 Jan 2016 20:15:49 +0100
|
||
|
Subject: [PATCH] nspawn: make journal linking non-fatal in try and auto modes
|
||
|
|
||
|
Fixes #2091
|
||
|
---
|
||
|
src/nspawn/nspawn.c | 39 ++++++++++++++++++++-------------------
|
||
|
1 file changed, 20 insertions(+), 19 deletions(-)
|
||
|
|
||
|
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
|
||
|
index f6a2c03..97ea51a 100644
|
||
|
--- a/src/nspawn/nspawn.c
|
||
|
+++ b/src/nspawn/nspawn.c
|
||
|
@@ -1338,6 +1338,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;
|
||
|
|
||
|
@@ -1345,16 +1346,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 */
|
||
|
@@ -1367,16 +1373,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");
|
||
|
@@ -1393,21 +1396,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);
|
||
|
@@ -1441,7 +1442,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
|
||
|
@@ -1459,7 +1460,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
|
||
|
--
|
||
|
2.7.0
|
||
|
|