summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2022-04-02 12:58:02 +0200
committerBenBE <BenBE@geshi.org>2022-04-02 14:02:06 +0200
commit7039abe109956852b8fd8d04eea81a1c4581535e (patch)
tree68a1a776e26d46310fd92ac58abe9a9ebcec0aa3
parent2b7504b5228bfcab643d020819960ae3e3085575 (diff)
Guess lxc or docker from /proc/1/mounts
At the moment this is used to make the memory meter report sane values even if the host has ZFS and that leaks through into a containerized environment Fixes #863 Includes a clever check for magic PROC_PID_INIT_INO in /proc/self/ns/pid thanks to Pavel Snajdr (snajpa)
-rw-r--r--linux/Platform.c29
1 files changed, 28 insertions, 1 deletions
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;
}

© 2014-2024 Faster IT GmbH | imprint | privacy policy