|
|
9fc0f6 |
From e16c7a905dbb6882970a13678e42816847565841 Mon Sep 17 00:00:00 2001
|
|
|
9fc0f6 |
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
|
9fc0f6 |
Date: Wed, 11 Dec 2013 22:00:33 -0500
|
|
|
9fc0f6 |
Subject: [PATCH] nspawn: complain and continue if machine has same id
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
If --link-journal=host or --link-journal=guest is used, this totally
|
|
|
9fc0f6 |
cannot work and we exit with an error. If however --link-journal=auto
|
|
|
9fc0f6 |
or --link-journal=no is used, just display a warning.
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
Having the same machine id can happen if booting from the same
|
|
|
9fc0f6 |
filesystem as the host. Since other things mostly function correctly,
|
|
|
9fc0f6 |
let's allow that.
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
https://bugs.freedesktop.org/show_bug.cgi?id=68369
|
|
|
9fc0f6 |
---
|
|
|
9fc0f6 |
src/nspawn/nspawn.c | 23 +++++++++++++++++++----
|
|
|
9fc0f6 |
1 file changed, 19 insertions(+), 4 deletions(-)
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
|
|
|
9fc0f6 |
index db47fbd..4bc49a3 100644
|
|
|
9fc0f6 |
--- a/src/nspawn/nspawn.c
|
|
|
9fc0f6 |
+++ b/src/nspawn/nspawn.c
|
|
|
9fc0f6 |
@@ -802,14 +802,11 @@ static int setup_hostname(void) {
|
|
|
9fc0f6 |
}
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
static int setup_journal(const char *directory) {
|
|
|
9fc0f6 |
- sd_id128_t machine_id;
|
|
|
9fc0f6 |
+ sd_id128_t machine_id, this_id;
|
|
|
9fc0f6 |
_cleanup_free_ char *p = NULL, *b = NULL, *q = NULL, *d = NULL;
|
|
|
9fc0f6 |
char *id;
|
|
|
9fc0f6 |
int r;
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
- if (arg_link_journal == LINK_NO)
|
|
|
9fc0f6 |
- return 0;
|
|
|
9fc0f6 |
-
|
|
|
9fc0f6 |
p = strappend(directory, "/etc/machine-id");
|
|
|
9fc0f6 |
if (!p)
|
|
|
9fc0f6 |
return log_oom();
|
|
|
9fc0f6 |
@@ -833,6 +830,24 @@ static int setup_journal(const char *directory) {
|
|
|
9fc0f6 |
return r;
|
|
|
9fc0f6 |
}
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
+ r = sd_id128_get_machine(&this_id);
|
|
|
9fc0f6 |
+ if (r < 0) {
|
|
|
9fc0f6 |
+ log_error("Failed to retrieve machine ID: %s", strerror(-r));
|
|
|
9fc0f6 |
+ return r;
|
|
|
9fc0f6 |
+ }
|
|
|
9fc0f6 |
+
|
|
|
9fc0f6 |
+ if (sd_id128_equal(machine_id, this_id)) {
|
|
|
9fc0f6 |
+ log_full(arg_link_journal == LINK_AUTO ? LOG_WARNING : LOG_ERR,
|
|
|
9fc0f6 |
+ "Host and machine ids are equal (%s): refusing to link journals", id);
|
|
|
9fc0f6 |
+ if (arg_link_journal == LINK_AUTO)
|
|
|
9fc0f6 |
+ return 0;
|
|
|
9fc0f6 |
+ return
|
|
|
9fc0f6 |
+ -EEXIST;
|
|
|
9fc0f6 |
+ }
|
|
|
9fc0f6 |
+
|
|
|
9fc0f6 |
+ if (arg_link_journal == LINK_NO)
|
|
|
9fc0f6 |
+ return 0;
|
|
|
9fc0f6 |
+
|
|
|
9fc0f6 |
free(p);
|
|
|
9fc0f6 |
p = strappend("/var/log/journal/", id);
|
|
|
9fc0f6 |
q = strjoin(directory, "/var/log/journal/", id, NULL);
|