[systemd-devel] [PATCH v2] core: improve error message when machine id is missing

2014-10-30 Thread Jan Synacek
---
Changes in v2:
 - show long explanation only when errno == EROFS

 src/core/machine-id-setup.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c
index efb074f..2360904 100644
--- a/src/core/machine-id-setup.c
+++ b/src/core/machine-id-setup.c
@@ -191,7 +191,14 @@ int machine_id_setup(const char *root) {
 else {
 fd = open(etc_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY);
 if (fd  0) {
-log_error(Cannot open %s: %m, 
etc_machine_id);
+if (errno == EROFS)
+log_error(System cannot boot: Missing 
/etc/machine-id and /etc is mounted read-only.\n
+  Booting up is supported 
only when:\n
+  1) /etc/machine-id exists 
and is populated.\n
+  2) /etc/machine-id exists 
and is empty.\n
+  3) /etc/machine-id is 
missing and /etc is writable.\n);
+else
+log_error(Cannot open %s: %m, 
etc_machine_id);
 return -errno;
 }
 
-- 
1.9.3

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] [PATCH v2] core: improve error message when machine id is missing

2014-10-30 Thread Lennart Poettering
On Thu, 30.10.14 12:36, Jan Synacek (jsyna...@redhat.com) wrote:

 ---
 Changes in v2:
  - show long explanation only when errno == EROFS
 
  src/core/machine-id-setup.c | 9 -
  1 file changed, 8 insertions(+), 1 deletion(-)
 
 diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c
 index efb074f..2360904 100644
 --- a/src/core/machine-id-setup.c
 +++ b/src/core/machine-id-setup.c
 @@ -191,7 +191,14 @@ int machine_id_setup(const char *root) {
  else {
  fd = open(etc_machine_id, 
 O_RDONLY|O_CLOEXEC|O_NOCTTY);
  if (fd  0) {
 -log_error(Cannot open %s: %m, 
 etc_machine_id);
 +if (errno == EROFS)
 +log_error(System cannot boot: 
 Missing /etc/machine-id and /etc is mounted read-only.\n
 +  Booting up is supported 
 only when:\n
 +  1) /etc/machine-id exists 
 and is populated.\n
 +  2) /etc/machine-id exists 
 and is empty.\n
 +  3) /etc/machine-id is 
 missing and /etc is writable.\n);
 +else
 +log_error(Cannot open %s: %m, 
 etc_machine_id);
  return -errno;
  }

This looks wrong. You need to remember the EROFS from the first
open(). The second open() will return ENOENT if the file is missing,
not EROFS...

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel