diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-04-20T17·11+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-04-20T17·11+0200 |
commit | 749696e71c9d637a36ab09a1368dff01b2b1bda8 (patch) | |
tree | 9eda8ac38cf43f332bbb6f4b8a753b0b7fffd2e8 | |
parent | efa4bdbfcd1489527bcf6f20a49c9a3bca8bbf6b (diff) |
Detect lsof
Also, don't use lsof on Linux since it's not needed. Fixes #1328.
-rw-r--r-- | Makefile.config.in | 1 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | src/libstore/gc.cc | 11 | ||||
-rw-r--r-- | src/libstore/local.mk | 3 |
4 files changed, 12 insertions, 4 deletions
diff --git a/Makefile.config.in b/Makefile.config.in index 53dca1fcf10a..6948dad5a60b 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -15,6 +15,7 @@ SQLITE3_LIBS = @SQLITE3_LIBS@ bash = @bash@ bindir = @bindir@ bro = @bro@ +lsof = @lsof@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ diff --git a/configure.ac b/configure.ac index 3e6a894e3b10..c7026cf954dd 100644 --- a/configure.ac +++ b/configure.ac @@ -128,6 +128,7 @@ NEED_PROG(xz, xz) AC_PATH_PROG(dot, dot) AC_PATH_PROG(pv, pv, pv) AC_PATH_PROG(bro, bro, bro) +AC_PATH_PROG(lsof, lsof, lsof) NEED_PROG(cat, cat) diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc index 0b03d61a789a..b6d462d2bffb 100644 --- a/src/libstore/gc.cc +++ b/src/libstore/gc.cc @@ -426,22 +426,27 @@ void LocalStore::findRuntimeRoots(PathSet & roots) throw SysError("iterating /proc"); } +#if !defined(__linux__) try { - auto lsofRegex = std::regex(R"(^n(/.*)$)"); + printError("RUN LSOF %s", LSOF); + std::regex lsofRegex(R"(^n(/.*)$)"); auto lsofLines = - tokenizeString<std::vector<string>>(runProgram("lsof", true, { "-n", "-w", "-F", "n" }), "\n"); + tokenizeString<std::vector<string>>(runProgram(LSOF, true, { "-n", "-w", "-F", "n" }), "\n"); for (const auto & line : lsofLines) { - auto match = std::smatch{}; + std::smatch match; if (std::regex_match(line, match, lsofRegex)) paths.emplace(match[1]); } } catch (ExecError & e) { /* lsof not installed, lsof failed */ } +#endif +#if defined(__linux__) readFileRoots("/proc/sys/kernel/modprobe", paths); readFileRoots("/proc/sys/kernel/fbsplash", paths); readFileRoots("/proc/sys/kernel/poweroff_cmd", paths); +#endif for (auto & i : paths) if (isInStore(i)) { diff --git a/src/libstore/local.mk b/src/libstore/local.mk index 9d5c04dca0c5..4da20330cf3f 100644 --- a/src/libstore/local.mk +++ b/src/libstore/local.mk @@ -27,7 +27,8 @@ libstore_CXXFLAGS = \ -DNIX_CONF_DIR=\"$(sysconfdir)/nix\" \ -DNIX_LIBEXEC_DIR=\"$(libexecdir)\" \ -DNIX_BIN_DIR=\"$(bindir)\" \ - -DBASH_PATH="\"$(bash)\"" + -DBASH_PATH="\"$(bash)\"" \ + -DLSOF=\"$(lsof)\" $(d)/local-store.cc: $(d)/schema.sql.hh |