chiark / gitweb /
basic/virt: provide a nicer message is /proc/cpuinfo is not available
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 23 Feb 2018 11:49:15 +0000 (12:49 +0100)
committerSven Eden <yamakuzure@gmx.net>
Wed, 30 May 2018 05:59:05 +0000 (07:59 +0200)
$ 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.

src/basic/virt.c

index e0455364284ad65fc63757cf86f8160ac288559e..aaff4ea580fb1c45e7fe660c4f6f4173b3ee299a 100644 (file)
@@ -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] = {