diff --git a/linux/Platform.c b/linux/Platform.c index 4e3d2656..ef3f0100 100644 --- a/linux/Platform.c +++ b/linux/Platform.c @@ -83,6 +83,8 @@ enum CapMode { }; #endif +bool Running_containerized = false; + const ScreenDefaults Platform_defaultScreens[] = { { .name = "Main", @@ -355,7 +357,7 @@ void Platform_setMemoryValues(Meter* this) { this->values[3] = pl->cachedMem; this->values[4] = pl->availableMem; - if (lpl->zfs.enabled != 0) { + if (lpl->zfs.enabled != 0 && !Running_containerized) { this->values[0] -= lpl->zfs.size; this->values[3] += lpl->zfs.size; } @@ -1017,6 +1019,31 @@ bool Platform_init(void) { LibSensors_init(); #endif + char target[PATH_MAX]; + ssize_t ret = readlink(PROCDIR "/self/ns/pid", target, sizeof(target) - 1); + if (ret > 0) { + target[ret] = '\0'; + + if (!String_eq("pid:[4026531836]", target)) { // magic constant PROC_PID_INIT_INO from include/linux/proc_ns.h#L46 + Running_containerized = true; + return true; // early return + } + } + + FILE* fd = fopen(PROCDIR "/1/mounts", "r"); + if (fd) { + char lineBuffer[256]; + while (fgets(lineBuffer, sizeof(lineBuffer), fd)) { + // detect lxc or overlayfs and guess that this means we are running containerized + if (String_startsWith(lineBuffer, "lxcfs ") || String_startsWith(lineBuffer, "overlay ")) { + fprintf(stderr, "%s\n", lineBuffer); + Running_containerized = true; + break; + } + } + fclose(fd); + } // if (fd) + return true; }