nspawn: make journal linking non-fatal in try and auto modes

Fixes #2091
This commit is contained in:
Lennart Poettering 2016-01-28 20:15:49 +01:00
parent 9e83569d8f
commit 8054d749c4

View 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