summaryrefslogtreecommitdiff
path: root/nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix')
-rw-r--r--nix/libstore/build.cc63
-rw-r--r--nix/libstore/builtins.cc4
-rw-r--r--nix/libstore/gc.cc11
-rw-r--r--nix/libstore/globals.cc2
-rw-r--r--nix/libstore/globals.hh11
-rw-r--r--nix/libstore/local-store.cc102
-rw-r--r--nix/libstore/local-store.hh12
-rw-r--r--nix/local.mk16
-rw-r--r--nix/nix-daemon/guix-daemon.cc20
-rw-r--r--nix/nix-daemon/nix-daemon.cc17
-rw-r--r--nix/scripts/authenticate.in11
-rw-r--r--nix/scripts/download.in11
-rw-r--r--nix/scripts/list-runtime-roots.in147
-rw-r--r--nix/scripts/offload.in11
-rw-r--r--nix/scripts/substitute.in11
15 files changed, 112 insertions, 337 deletions
diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc
index fe7bf79069..ad53b81413 100644
--- a/nix/libstore/build.cc
+++ b/nix/libstore/build.cc
@@ -614,9 +614,7 @@ HookInstance::HookInstance()
{
debug("starting build hook");
- Path buildHook = getEnv("NIX_BUILD_HOOK");
- if (string(buildHook, 0, 1) != "/") buildHook = settings.nixLibexecDir + "/nix/" + buildHook;
- buildHook = canonPath(buildHook);
+ const Path &buildHook = settings.guixProgram;
/* Create a pipe to get the output of the child. */
fromHook.create();
@@ -642,13 +640,14 @@ HookInstance::HookInstance()
if (dup2(builderOut.writeSide, 4) == -1)
throw SysError("dupping builder's stdout/stderr");
- execl(buildHook.c_str(), buildHook.c_str(), settings.thisSystem.c_str(),
+ execl(buildHook.c_str(), buildHook.c_str(), "offload",
+ settings.thisSystem.c_str(),
(format("%1%") % settings.maxSilentTime).str().c_str(),
(format("%1%") % settings.printBuildTrace).str().c_str(),
(format("%1%") % settings.buildTimeout).str().c_str(),
NULL);
- throw SysError(format("executing `%1%'") % buildHook);
+ throw SysError(format("executing `%1% offload'") % buildHook);
});
pid.setSeparatePG(true);
@@ -1581,7 +1580,7 @@ void DerivationGoal::buildDone()
HookReply DerivationGoal::tryBuildHook()
{
- if (!settings.useBuildHook || getEnv("NIX_BUILD_HOOK") == "") return rpDecline;
+ if (!settings.useBuildHook) return rpDecline;
if (!worker.hook)
worker.hook = std::shared_ptr<HookInstance>(new HookInstance);
@@ -2864,15 +2863,6 @@ private:
/* The store path that should be realised through a substitute. */
Path storePath;
- /* The remaining substituters. */
- Paths subs;
-
- /* The current substituter. */
- Path sub;
-
- /* Whether any substituter can realise this path */
- bool hasSubstitute;
-
/* Path info returned by the substituter's query info operation. */
SubstitutablePathInfo info;
@@ -2898,6 +2888,8 @@ private:
typedef void (SubstitutionGoal::*GoalState)();
GoalState state;
+ void tryNext();
+
public:
SubstitutionGoal(const Path & storePath, Worker & worker, bool repair = false);
~SubstitutionGoal();
@@ -2915,7 +2907,6 @@ public:
/* The states. */
void init();
- void tryNext();
void gotInfo();
void referencesValid();
void tryToRun();
@@ -2931,7 +2922,6 @@ public:
SubstitutionGoal::SubstitutionGoal(const Path & storePath, Worker & worker, bool repair)
: Goal(worker)
- , hasSubstitute(false)
, repair(repair)
{
this->storePath = storePath;
@@ -2981,37 +2971,31 @@ void SubstitutionGoal::init()
if (settings.readOnlyMode)
throw Error(format("cannot substitute path `%1%' - no write access to the store") % storePath);
- subs = settings.substituters;
-
tryNext();
}
void SubstitutionGoal::tryNext()
{
- trace("trying next substituter");
+ trace("trying substituter");
- if (subs.size() == 0) {
+ SubstitutablePathInfos infos;
+ PathSet dummy(singleton<PathSet>(storePath));
+ worker.store.querySubstitutablePathInfos(dummy, infos);
+ SubstitutablePathInfos::iterator k = infos.find(storePath);
+ if (k == infos.end()) {
/* None left. Terminate this goal and let someone else deal
with it. */
debug(format("path `%1%' is required, but there is no substituter that can build it") % storePath);
/* Hack: don't indicate failure if there were no substituters.
In that case the calling derivation should just do a
build. */
- amDone(hasSubstitute ? ecFailed : ecNoSubstituters);
- return;
+ amDone(ecNoSubstituters);
+ return;
}
- sub = subs.front();
- subs.pop_front();
-
- SubstitutablePathInfos infos;
- PathSet dummy(singleton<PathSet>(storePath));
- worker.store.querySubstitutablePathInfos(sub, dummy, infos);
- SubstitutablePathInfos::iterator k = infos.find(storePath);
- if (k == infos.end()) { tryNext(); return; }
+ /* Found a substitute. */
info = k->second;
- hasSubstitute = true;
/* To maintain the closure invariant, we first have to realise the
paths referenced by this one. */
@@ -3099,7 +3083,8 @@ void SubstitutionGoal::tryToRun()
/* Fill in the arguments. */
Strings args;
- args.push_back(baseNameOf(sub));
+ args.push_back("guix");
+ args.push_back("substitute");
args.push_back("--substitute");
args.push_back(storePath);
args.push_back(destPath);
@@ -3112,9 +3097,9 @@ void SubstitutionGoal::tryToRun()
if (dup2(outPipe.writeSide, STDOUT_FILENO) == -1)
throw SysError("cannot dup output pipe into stdout");
- execv(sub.c_str(), stringsToCharPtrs(args).data());
+ execv(settings.guixProgram.c_str(), stringsToCharPtrs(args).data());
- throw SysError(format("executing `%1%'") % sub);
+ throw SysError(format("executing `%1% substitute'") % settings.guixProgram);
});
pid.setSeparatePG(true);
@@ -3127,7 +3112,9 @@ void SubstitutionGoal::tryToRun()
state = &SubstitutionGoal::finished;
if (settings.printBuildTrace)
- printMsg(lvlError, format("@ substituter-started %1% %2%") % storePath % sub);
+ /* The second element in the message used to be the name of the
+ substituter but we're left with only one. */
+ printMsg(lvlError, format("@ substituter-started %1% substitute") % storePath);
}
@@ -3193,9 +3180,7 @@ void SubstitutionGoal::finished()
% storePath % status % e.msg());
}
- /* Try the next substitute. */
- state = &SubstitutionGoal::tryNext;
- worker.wakeUp(shared_from_this());
+ amDone(ecFailed);
return;
}
diff --git a/nix/libstore/builtins.cc b/nix/libstore/builtins.cc
index f7c7d42484..4111ac4760 100644
--- a/nix/libstore/builtins.cc
+++ b/nix/libstore/builtins.cc
@@ -39,7 +39,7 @@ static void builtinDownload(const Derivation &drv,
const char *const argv[] =
{
- "download", drvPath.c_str(), output.c_str(), NULL
+ "guix", "perform-download", drvPath.c_str(), output.c_str(), NULL
};
/* Tell the script what the store file name is, so that
@@ -50,7 +50,7 @@ static void builtinDownload(const Derivation &drv,
/* Tell it about options such as "print-extended-build-trace". */
setenv("_NIX_OPTIONS", settings.pack().c_str(), 1);
- const string program = settings.nixLibexecDir + "/download";
+ const string program = settings.guixProgram;
execv(program.c_str(), (char *const *) argv);
throw SysError(format("failed to run download program '%1%'") % program);
diff --git a/nix/libstore/gc.cc b/nix/libstore/gc.cc
index 46171e116c..c466996668 100644
--- a/nix/libstore/gc.cc
+++ b/nix/libstore/gc.cc
@@ -339,14 +339,11 @@ Roots LocalStore::findRoots()
static void addAdditionalRoots(StoreAPI & store, PathSet & roots)
{
- Path rootFinder = getEnv("NIX_ROOT_FINDER",
- settings.nixLibexecDir + "/list-runtime-roots");
+ debug(format("executing `%1% gc --list-busy' to find additional roots")
+ % settings.guixProgram);
- if (rootFinder.empty()) return;
-
- debug(format("executing `%1%' to find additional roots") % rootFinder);
-
- string result = runProgram(rootFinder);
+ const Strings args = { "gc", "--list-busy" };
+ string result = runProgram(settings.guixProgram, false, args);
StringSet paths = tokenizeString<StringSet>(result, "\n");
diff --git a/nix/libstore/globals.cc b/nix/libstore/globals.cc
index 6df20e7a52..0cc001fbe4 100644
--- a/nix/libstore/globals.cc
+++ b/nix/libstore/globals.cc
@@ -70,9 +70,9 @@ void Settings::processEnvironment()
nixStateDir = canonPath(getEnv("GUIX_STATE_DIRECTORY", NIX_STATE_DIR));
nixDBPath = getEnv("GUIX_DATABASE_DIRECTORY", nixStateDir + "/db");
nixConfDir = canonPath(getEnv("GUIX_CONFIGURATION_DIRECTORY", GUIX_CONFIGURATION_DIRECTORY));
- nixLibexecDir = canonPath(getEnv("NIX_LIBEXEC_DIR", NIX_LIBEXEC_DIR));
nixBinDir = canonPath(getEnv("NIX_BIN_DIR", NIX_BIN_DIR));
nixDaemonSocketFile = canonPath(nixStateDir + DEFAULT_SOCKET_PATH);
+ guixProgram = canonPath(getEnv("GUIX", nixBinDir + "/guix"));
}
diff --git a/nix/libstore/globals.hh b/nix/libstore/globals.hh
index b073f724b6..27616a2283 100644
--- a/nix/libstore/globals.hh
+++ b/nix/libstore/globals.hh
@@ -57,15 +57,15 @@ struct Settings {
/* The directory where configuration files are stored. */
Path nixConfDir;
- /* The directory where internal helper programs are stored. */
- Path nixLibexecDir;
-
/* The directory where the main programs are stored. */
Path nixBinDir;
/* File name of the socket the daemon listens to. */
Path nixDaemonSocketFile;
+ /* Absolute file name of the 'guix' program. */
+ Path guixProgram;
+
/* Whether to keep temporary directories of failed builds. */
bool keepFailed;
@@ -112,11 +112,6 @@ struct Settings {
means infinity. */
time_t buildTimeout;
- /* The substituters. There are programs that can somehow realise
- a store path without building, e.g., by downloading it or
- copying it from a CD. */
- Paths substituters;
-
/* Whether to use build hooks (for distributed builds). Sometimes
users want to disable this from the command-line. */
bool useBuildHook;
diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc
index 892d9300b1..3b08492c64 100644
--- a/nix/libstore/local-store.cc
+++ b/nix/libstore/local-store.cc
@@ -184,13 +184,15 @@ LocalStore::LocalStore(bool reserveSpace)
LocalStore::~LocalStore()
{
try {
- foreach (RunningSubstituters::iterator, i, runningSubstituters) {
- if (i->second.disabled) continue;
- i->second.to.close();
- i->second.from.close();
- i->second.error.close();
- if (i->second.pid != -1)
- i->second.pid.wait(true);
+ if (runningSubstituter) {
+ RunningSubstituter &i = *runningSubstituter;
+ if (!i.disabled) {
+ i.to.close();
+ i.from.close();
+ i.error.close();
+ if (i.pid != -1)
+ i.pid.wait(true);
+ }
}
} catch (...) {
ignoreException();
@@ -808,11 +810,12 @@ void LocalStore::setSubstituterEnv()
}
-void LocalStore::startSubstituter(const Path & substituter, RunningSubstituter & run)
+void LocalStore::startSubstituter(RunningSubstituter & run)
{
if (run.disabled || run.pid != -1) return;
- debug(format("starting substituter program `%1%'") % substituter);
+ debug(format("starting substituter program `%1% substitute'")
+ % settings.guixProgram);
Pipe toPipe, fromPipe, errorPipe;
@@ -829,11 +832,10 @@ void LocalStore::startSubstituter(const Path & substituter, RunningSubstituter &
throw SysError("dupping stdout");
if (dup2(errorPipe.writeSide, STDERR_FILENO) == -1)
throw SysError("dupping stderr");
- execl(substituter.c_str(), substituter.c_str(), "--query", NULL);
- throw SysError(format("executing `%1%'") % substituter);
+ execl(settings.guixProgram.c_str(), "guix", "substitute", "--query", NULL);
+ throw SysError(format("executing `%1%'") % settings.guixProgram);
});
- run.program = baseNameOf(substituter);
run.to = toPipe.writeSide.borrow();
run.from = run.fromBuf.fd = fromPipe.readSide.borrow();
run.error = errorPipe.readSide.borrow();
@@ -889,13 +891,14 @@ string LocalStore::getLineFromSubstituter(RunningSubstituter & run)
if (errno == EINTR) continue;
throw SysError("reading from substituter's stderr");
}
- if (n == 0) throw EndOfFile(format("substituter `%1%' died unexpectedly") % run.program);
+ if (n == 0) throw EndOfFile(format("`%1% substitute' died unexpectedly")
+ % settings.guixProgram);
err.append(buf, n);
string::size_type p;
while (((p = err.find('\n')) != string::npos)
|| ((p = err.find('\r')) != string::npos)) {
string thing(err, 0, p + 1);
- writeToStderr(run.program + ": " + thing);
+ writeToStderr("substitute: " + thing);
err = string(err, p + 1);
}
}
@@ -907,7 +910,7 @@ string LocalStore::getLineFromSubstituter(RunningSubstituter & run)
unsigned char c;
run.fromBuf(&c, 1);
if (c == '\n') {
- if (!err.empty()) printMsg(lvlError, run.program + ": " + err);
+ if (!err.empty()) printMsg(lvlError, "substitute: " + err);
return res;
}
res += c;
@@ -930,38 +933,47 @@ PathSet LocalStore::querySubstitutablePaths(const PathSet & paths)
{
PathSet res;
- if (!settings.useSubstitutes) return res;
-
- foreach (Paths::iterator, i, settings.substituters) {
- if (res.size() == paths.size()) break;
- RunningSubstituter & run(runningSubstituters[*i]);
- startSubstituter(*i, run);
- if (run.disabled) continue;
- string s = "have ";
- foreach (PathSet::const_iterator, j, paths)
- if (res.find(*j) == res.end()) { s += *j; s += " "; }
- writeLine(run.to, s);
- while (true) {
- /* FIXME: we only read stderr when an error occurs, so
- substituters should only write (short) messages to
- stderr when they fail. I.e. they shouldn't write debug
- output. */
- Path path = getLineFromSubstituter(run);
- if (path == "") break;
- res.insert(path);
- }
+ if (!settings.useSubstitutes || paths.empty()) return res;
+
+ if (!runningSubstituter) {
+ std::unique_ptr<RunningSubstituter>fresh(new RunningSubstituter);
+ runningSubstituter.swap(fresh);
+ }
+
+ RunningSubstituter & run = *runningSubstituter;
+ startSubstituter(run);
+
+ if (!run.disabled) {
+ string s = "have ";
+ foreach (PathSet::const_iterator, j, paths)
+ if (res.find(*j) == res.end()) { s += *j; s += " "; }
+ writeLine(run.to, s);
+ while (true) {
+ /* FIXME: we only read stderr when an error occurs, so
+ substituters should only write (short) messages to
+ stderr when they fail. I.e. they shouldn't write debug
+ output. */
+ Path path = getLineFromSubstituter(run);
+ if (path == "") break;
+ res.insert(path);
+ }
}
+
return res;
}
-void LocalStore::querySubstitutablePathInfos(const Path & substituter,
- PathSet & paths, SubstitutablePathInfos & infos)
+void LocalStore::querySubstitutablePathInfos(PathSet & paths, SubstitutablePathInfos & infos)
{
if (!settings.useSubstitutes) return;
- RunningSubstituter & run(runningSubstituters[substituter]);
- startSubstituter(substituter, run);
+ if (!runningSubstituter) {
+ std::unique_ptr<RunningSubstituter>fresh(new RunningSubstituter);
+ runningSubstituter.swap(fresh);
+ }
+
+ RunningSubstituter & run = *runningSubstituter;
+ startSubstituter(run);
if (run.disabled) return;
string s = "info ";
@@ -993,10 +1005,9 @@ void LocalStore::querySubstitutablePathInfos(const Path & substituter,
void LocalStore::querySubstitutablePathInfos(const PathSet & paths,
SubstitutablePathInfos & infos)
{
- PathSet todo = paths;
- foreach (Paths::iterator, i, settings.substituters) {
- if (todo.empty()) break;
- querySubstitutablePathInfos(*i, todo, infos);
+ if (!paths.empty()) {
+ PathSet todo = paths;
+ querySubstitutablePathInfos(todo, infos);
}
}
@@ -1224,8 +1235,9 @@ static void checkSecrecy(const Path & path)
static std::string runAuthenticationProgram(const Strings & args)
{
- return runProgram(settings.nixLibexecDir + "/authenticate",
- false, args);
+ Strings fullArgs = { "authenticate" };
+ fullArgs.insert(fullArgs.end(), args.begin(), args.end()); // append
+ return runProgram(settings.guixProgram, false, fullArgs);
}
void LocalStore::exportPath(const Path & path, bool sign,
diff --git a/nix/libstore/local-store.hh b/nix/libstore/local-store.hh
index 4e6b4cfc1d..4113fafcb5 100644
--- a/nix/libstore/local-store.hh
+++ b/nix/libstore/local-store.hh
@@ -40,7 +40,6 @@ struct OptimiseStats
struct RunningSubstituter
{
- Path program;
Pid pid;
AutoCloseFD to, from, error;
FdSource fromBuf;
@@ -52,8 +51,8 @@ struct RunningSubstituter
class LocalStore : public StoreAPI
{
private:
- typedef std::map<Path, RunningSubstituter> RunningSubstituters;
- RunningSubstituters runningSubstituters;
+ /* The currently running substituter or empty. */
+ std::unique_ptr<RunningSubstituter> runningSubstituter;
Path linksDir;
@@ -93,8 +92,8 @@ public:
PathSet querySubstitutablePaths(const PathSet & paths);
- void querySubstitutablePathInfos(const Path & substituter,
- PathSet & paths, SubstitutablePathInfos & infos);
+ void querySubstitutablePathInfos(PathSet & paths,
+ SubstitutablePathInfos & infos);
void querySubstitutablePathInfos(const PathSet & paths,
SubstitutablePathInfos & infos);
@@ -261,8 +260,7 @@ private:
void removeUnusedLinks(const GCState & state);
- void startSubstituter(const Path & substituter,
- RunningSubstituter & runningSubstituter);
+ void startSubstituter(RunningSubstituter & runningSubstituter);
string getLineFromSubstituter(RunningSubstituter & run);
diff --git a/nix/local.mk b/nix/local.mk
index 6d7e60e9fb..dc5a8398b2 100644
--- a/nix/local.mk
+++ b/nix/local.mk
@@ -110,7 +110,6 @@ libstore_a_CPPFLAGS = \
-DNIX_STATE_DIR=\"$(localstatedir)/guix\" \
-DNIX_LOG_DIR=\"$(localstatedir)/log/guix\" \
-DGUIX_CONFIGURATION_DIRECTORY=\"$(sysconfdir)/guix\" \
- -DNIX_LIBEXEC_DIR=\"$(libexecdir)/guix\" \
-DNIX_BIN_DIR=\"$(bindir)\" \
-DDEFAULT_CHROOT_DIRS="\"\""
@@ -154,21 +153,6 @@ noinst_HEADERS = \
(lambda (in) \
(write (get-string-all in) out)))))"
-nodist_pkglibexec_SCRIPTS = \
- %D%/scripts/list-runtime-roots \
- %D%/scripts/substitute \
- %D%/scripts/download
-
-if BUILD_DAEMON_OFFLOAD
-
-nodist_pkglibexec_SCRIPTS += \
- %D%/scripts/offload
-
-endif BUILD_DAEMON_OFFLOAD
-
-nodist_pkglibexec_SCRIPTS += \
- %D%/scripts/authenticate
-
# The '.service' files for systemd.
systemdservicedir = $(libdir)/systemd/system
nodist_systemdservice_DATA = etc/guix-daemon.service etc/guix-publish.service
diff --git a/nix/nix-daemon/guix-daemon.cc b/nix/nix-daemon/guix-daemon.cc
index f47d142612..6f9c404c8d 100644
--- a/nix/nix-daemon/guix-daemon.cc
+++ b/nix/nix-daemon/guix-daemon.cc
@@ -466,23 +466,15 @@ main (int argc, char *argv[])
{
settings.processEnvironment ();
- /* Use our substituter by default. */
- settings.substituters.clear ();
+ /* Enable substitutes by default. */
settings.set ("build-use-substitutes", "true");
/* Use our substitute server by default. */
settings.set ("substitute-urls", GUIX_SUBSTITUTE_URLS);
#ifdef HAVE_DAEMON_OFFLOAD_HOOK
- /* Use our build hook for distributed builds by default. */
+ /* Use 'guix offload' for distributed builds by default. */
settings.useBuildHook = true;
- if (getenv ("NIX_BUILD_HOOK") == NULL)
- {
- std::string build_hook;
-
- build_hook = settings.nixLibexecDir + "/offload";
- setenv ("NIX_BUILD_HOOK", build_hook.c_str (), 1);
- }
#else
/* We are not installing any build hook, so disable it. */
settings.useBuildHook = false;
@@ -497,14 +489,6 @@ main (int argc, char *argv[])
printMsg(lvlDebug,
format ("build log compression: %1%") % settings.logCompression);
- if (settings.useSubstitutes)
- settings.substituters.push_back (settings.nixLibexecDir
- + "/substitute");
- else
- /* Clear the substituter list to make sure nothing ever gets
- substituted, regardless of the client's settings. */
- settings.substituters.clear ();
-
if (geteuid () == 0 && settings.buildUsersGroup.empty ())
fprintf (stderr, _("warning: daemon is running as root, so \
using `--build-users-group' is highly recommended\n"));
diff --git a/nix/nix-daemon/nix-daemon.cc b/nix/nix-daemon/nix-daemon.cc
index 56137701a1..1163a249d1 100644
--- a/nix/nix-daemon/nix-daemon.cc
+++ b/nix/nix-daemon/nix-daemon.cc
@@ -1,3 +1,4 @@
+#include "config.h"
#include "shared.hh"
#include "local-store.hh"
#include "util.hh"
@@ -580,8 +581,14 @@ static void performOp(bool trusted, unsigned int clientVersion,
settings.set("build-max-silent-time", std::to_string(readInt(from)));
}
- if (GET_PROTOCOL_MINOR(clientVersion) >= 2)
+ if (GET_PROTOCOL_MINOR(clientVersion) >= 2) {
+#ifdef HAVE_DAEMON_OFFLOAD_HOOK
settings.useBuildHook = readInt(from) != 0;
+#else
+ readInt(from); // ignore the user's setting
+#endif
+ }
+
if (GET_PROTOCOL_MINOR(clientVersion) >= 4) {
settings.buildVerbosity = (Verbosity) readInt(from);
logType = (LogType) readInt(from);
@@ -590,8 +597,12 @@ static void performOp(bool trusted, unsigned int clientVersion,
if (GET_PROTOCOL_MINOR(clientVersion) >= 6
&& GET_PROTOCOL_MINOR(clientVersion) < 0x61)
settings.set("build-cores", std::to_string(readInt(from)));
- if (GET_PROTOCOL_MINOR(clientVersion) >= 10)
- settings.set("build-use-substitutes", readInt(from) ? "true" : "false");
+ if (GET_PROTOCOL_MINOR(clientVersion) >= 10) {
+ if (settings.useSubstitutes)
+ settings.set("build-use-substitutes", readInt(from) ? "true" : "false");
+ else
+ readInt(from); // substitutes remain disabled
+ }
if (GET_PROTOCOL_MINOR(clientVersion) >= 12) {
unsigned int n = readInt(from);
for (unsigned int i = 0; i < n; i++) {
diff --git a/nix/scripts/authenticate.in b/nix/scripts/authenticate.in
deleted file mode 100644
index 5ce57915f0..0000000000
--- a/nix/scripts/authenticate.in
+++ /dev/null
@@ -1,11 +0,0 @@
-#!@SHELL@
-# A shorthand for "guix authenticate", for use by the daemon.
-
-if test "x$GUIX_UNINSTALLED" = "x"
-then
- prefix="@prefix@"
- exec_prefix="@exec_prefix@"
- exec "@bindir@/guix" authenticate "$@"
-else
- exec guix authenticate "$@"
-fi
diff --git a/nix/scripts/download.in b/nix/scripts/download.in
deleted file mode 100644
index 4d7088a993..0000000000
--- a/nix/scripts/download.in
+++ /dev/null
@@ -1,11 +0,0 @@
-#!@SHELL@
-# A shorthand for "guix perform-download", for use by the daemon.
-
-if test "x$GUIX_UNINSTALLED" = "x"
-then
- prefix="@prefix@"
- exec_prefix="@exec_prefix@"
- exec "@bindir@/guix" perform-download "$@"
-else
- exec guix perform-download "$@"
-fi
diff --git a/nix/scripts/list-runtime-roots.in b/nix/scripts/list-runtime-roots.in
deleted file mode 100644
index 5f2660fb5e..0000000000
--- a/nix/scripts/list-runtime-roots.in
+++ /dev/null
@@ -1,147 +0,0 @@
-#!@GUILE@ -ds
-!#
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2017 Ludovic Courtès <ludo@gnu.org>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
-
-;;;
-;;; List files being used at run time; these files are garbage collector
-;;; roots. This is equivalent to `find-runtime-roots.pl' in Nix.
-;;;
-
-(use-modules (ice-9 ftw)
- (ice-9 regex)
- (ice-9 rdelim)
- (ice-9 match)
- (srfi srfi-1)
- (srfi srfi-26)
- (rnrs io ports))
-
-(define %proc-directory
- ;; Mount point of Linuxish /proc file system.
- "/proc")
-
-(define %store-directory
- (or (getenv "NIX_STORE_DIR")
- "@storedir@"))
-
-(define (proc-file-roots dir file)
- "Return a one-element list containing the file pointed to by DIR/FILE,
-or the empty list."
- (or (and=> (false-if-exception (readlink (string-append dir "/" file)))
- list)
- '()))
-
-(define proc-exe-roots (cut proc-file-roots <> "exe"))
-(define proc-cwd-roots (cut proc-file-roots <> "cwd"))
-
-(define (proc-fd-roots dir)
- "Return the list of store files referenced by DIR, which is a
-/proc/XYZ directory."
- (let ((dir (string-append dir "/fd")))
- (filter-map (lambda (file)
- (let ((target (false-if-exception
- (readlink (string-append dir "/" file)))))
- (and target
- (string-prefix? "/" target)
- target)))
- (or (scandir dir string->number) '()))))
-
-(define (proc-maps-roots dir)
- "Return the list of store files referenced by DIR, which is a
-/proc/XYZ directory."
- (define %file-mapping-line
- (make-regexp "^.*[[:blank:]]+/([^ ]+)$"))
-
- (call-with-input-file (string-append dir "/maps")
- (lambda (maps)
- (let loop ((line (read-line maps))
- (roots '()))
- (cond ((eof-object? line)
- roots)
- ((regexp-exec %file-mapping-line line)
- =>
- (lambda (match)
- (let ((file (string-append "/"
- (match:substring match 1))))
- (loop (read-line maps)
- (cons file roots)))))
- (else
- (loop (read-line maps) roots)))))))
-
-(define (proc-environ-roots dir)
- "Return the list of store files referenced by DIR/environ, where DIR is a
-/proc/XYZ directory."
- (define split-on-nul
- (cute string-tokenize <>
- (char-set-complement (char-set #\nul))))
-
- (define (rhs-file-names str)
- (let ((equal (string-index str #\=)))
- (if equal
- (let* ((str (substring str (+ 1 equal)))
- (rx (string-append (regexp-quote %store-directory)
- "/[0-9a-z]{32}-[a-zA-Z0-9\\._+-]+")))
- (map match:substring (list-matches rx str)))
- '())))
-
- (define environ
- (string-append dir "/environ"))
-
- (append-map rhs-file-names
- (split-on-nul
- (call-with-input-file environ
- get-string-all))))
-
-(define (referenced-files)
- "Return the list of referenced store items."
- (append-map (lambda (pid)
- (let ((proc (string-append %proc-directory "/" pid)))
- (catch 'system-error
- (lambda ()
- (append (proc-exe-roots proc)
- (proc-cwd-roots proc)
- (proc-fd-roots proc)
- (proc-maps-roots proc)
- (proc-environ-roots proc)))
- (lambda args
- (let ((err (system-error-errno args)))
- (if (or (= ENOENT err) ;TOCTTOU race
- (= ESRCH err) ;ditto
- (= EACCES err)) ;not running as root
- '()
- (apply throw args)))))))
- (scandir %proc-directory string->number
- (lambda (a b)
- (< (string->number a) (string->number b))))))
-
-(define canonicalize-store-item
- (let* ((store (string-append %store-directory "/"))
- (prefix (string-length store)))
- (lambda (file)
- "Return #f if FILE is not a store item; otherwise, return the store file
-name without any sub-directory components."
- (and (string-prefix? store file)
- (string-append store
- (let ((base (string-drop file prefix)))
- (match (string-index base #\/)
- (#f base)
- (slash (string-take base slash)))))))))
-
-(for-each (cut simple-format #t "~a~%" <>)
- (delete-duplicates
- (filter-map canonicalize-store-item (referenced-files))))
diff --git a/nix/scripts/offload.in b/nix/scripts/offload.in
deleted file mode 100644
index 50faed31c0..0000000000
--- a/nix/scripts/offload.in
+++ /dev/null
@@ -1,11 +0,0 @@
-#!@SHELL@
-# A shorthand for "guix offload", for use by the daemon.
-
-if test "x$GUIX_UNINSTALLED" = "x"
-then
- prefix="@prefix@"
- exec_prefix="@exec_prefix@"
- exec "@bindir@/guix" offload "$@"
-else
- exec guix offload "$@"
-fi
diff --git a/nix/scripts/substitute.in b/nix/scripts/substitute.in
deleted file mode 100644
index 5a2eeb7259..0000000000
--- a/nix/scripts/substitute.in
+++ /dev/null
@@ -1,11 +0,0 @@
-#!@SHELL@
-# A shorthand for "guix substitute", for use by the daemon.
-
-if test "x$GUIX_UNINSTALLED" = "x"
-then
- prefix="@prefix@"
- exec_prefix="@exec_prefix@"
- exec "@bindir@/guix" substitute "$@"
-else
- exec guix substitute "$@"
-fi