diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-02-23 12:49:15 +0100 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2018-05-30 07:59:05 +0200 |
commit | d6ac074bf95f61aeaa9b81db414cc3089fa22f7a (patch) | |
tree | 86dc6063a29b8a6f403cdbb7f9cde6697863f439 /src/basic/virt.c | |
parent | 47271fd56eadbc451e3ef8b2692dcc8bd2d5d8c7 (diff) |
basic/virt: provide a nicer message is /proc/cpuinfo is not available
$ sudo systemd-run -p RootDirectory=/usr -E LD_LIBRARY_PATH=/lib/systemd/ -E SYSTEMD_LOG_LEVEL=debug /bin/systemd-detect-virt
Before
systemd-detect-virt[18498]: No virtualization found in DMI
systemd-detect-virt[18498]: No virtualization found in CPUID
systemd-detect-virt[18498]: Virtualization XEN not found, /proc/xen does not exist
systemd-detect-virt[18498]: This platform does not support /proc/device-tree
systemd-detect-virt[18498]: Failed to check for virtualization: No such file or directory
The first four lines are at debug level, so the user would only see that last
one usually, which is not very enlightening.
This now becomes:
systemd-detect-virt[21172]: No virtualization found in DMI
systemd-detect-virt[21172]: No virtualization found in CPUID
systemd-detect-virt[21172]: Virtualization XEN not found, /proc/xen does not exist
systemd-detect-virt[21172]: This platform does not support /proc/device-tree
systemd-detect-virt[21172]: /proc/cpuinfo not found, assuming no UML virtualization.
systemd-detect-virt[21172]: This platform does not support /proc/sysinfo
systemd-detect-virt[21172]: Found VM virtualization none
systemd-detect-virt[21172]: none
We do more checks, which is good too.
Diffstat (limited to 'src/basic/virt.c')
-rw-r--r-- | src/basic/virt.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/basic/virt.c b/src/basic/virt.c index e04553642..aaff4ea58 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -283,6 +283,10 @@ static int detect_vm_uml(void) { /* Detect User-Mode Linux by reading /proc/cpuinfo */ r = read_full_file("/proc/cpuinfo", &cpuinfo_contents, NULL); + if (r == -ENOENT) { + log_debug("/proc/cpuinfo not found, assuming no UML virtualization."); + return VIRTUALIZATION_NONE; + } if (r < 0) return r; @@ -291,7 +295,7 @@ static int detect_vm_uml(void) { return VIRTUALIZATION_UML; } - log_debug("No virtualization found in /proc/cpuinfo."); + log_debug("UML virtualization not found in /proc/cpuinfo."); return VIRTUALIZATION_NONE; } @@ -608,18 +612,18 @@ int running_in_userns(void) { #endif // 0 int running_in_chroot(void) { - int ret; + int r; #if 0 /// elogind does not allow to ignore chroots, we are never init! if (getenv_bool("SYSTEMD_IGNORE_CHROOT") > 0) return 0; #endif // 0 - ret = files_same("/proc/1/root", "/", 0); - if (ret < 0) - return ret; + r = files_same("/proc/1/root", "/", 0); + if (r < 0) + return r; - return ret == 0; + return r == 0; } static const char *const virtualization_table[_VIRTUALIZATION_MAX] = { |