mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
nspawn: make journal linking non-fatal in try and auto modes
Fixes #2091
This commit is contained in:
parent
9e83569d8f
commit
8054d749c4
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user