aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-11-06Enable recursive Nix using a featureEelco Dolstra
Derivations that want to use recursion should now set requiredSystemFeatures = [ "recursive-nix" ]; to make the daemon socket appear. Also, Nix should be configured with "experimental-features = recursive-nix".
2019-11-06Add a test for recursive NixEelco Dolstra
2019-11-06RestrictedStore: Implement addToStore()Eelco Dolstra
2019-11-06Recursive Nix supportEelco Dolstra
This allows Nix builders to call Nix to build derivations, with some limitations. Example: let nixpkgs = fetchTarball channel:nixos-18.03; in with import <nixpkgs> {}; runCommand "foo" { buildInputs = [ nix jq ]; NIX_PATH = "nixpkgs=${nixpkgs}"; } '' hello=$(nix-build -E '(import <nixpkgs> {}).hello.overrideDerivation (args: { name = "hello-3.5"; })') $hello/bin/hello mkdir -p $out/bin ln -s $hello/bin/hello $out/bin/hello nix path-info -r --json $hello | jq . '' This derivation makes a recursive Nix call to build GNU Hello and symlinks it from its $out, i.e. # ll ./result/bin/ lrwxrwxrwx 1 root root 63 Jan 1 1970 hello -> /nix/store/s0awxrs71gickhaqdwxl506hzccb30y5-hello-3.5/bin/hello # nix-store -qR ./result /nix/store/hwwqshlmazzjzj7yhrkyjydxamvvkfd3-glibc-2.26-131 /nix/store/s0awxrs71gickhaqdwxl506hzccb30y5-hello-3.5 /nix/store/sgmvvyw8vhfqdqb619bxkcpfn9lvd8ss-foo This is implemented as follows: * Before running the outer builder, Nix creates a Unix domain socket '.nix-socket' in the builder's temporary directory and sets $NIX_REMOTE to point to it. It starts a thread to process connections to this socket. (Thus you don't need to have nix-daemon running.) * The daemon thread uses a wrapper store (RestrictedStore) to keep track of paths added through recursive Nix calls, to implement some restrictions (see below), and to do some censorship (e.g. for purity, queryPathInfo() won't return impure information such as signatures and timestamps). * After the build finishes, the output paths are scanned for references to the paths added through recursive Nix calls (in addition to the inputs closure). Thus, in the example above, $out has a reference to $hello. The main restriction on recursive Nix calls is that they cannot do arbitrary substitutions. For example, doing nix-store -r /nix/store/kmwd1hq55akdb9sc7l3finr175dajlby-hello-2.10 is forbidden unless /nix/store/kmwd... is in the inputs closure or previously built by a recursive Nix call. This is to prevent irreproducible derivations that have hidden dependencies on substituters or the current store contents. Building a derivation is fine, however, and Nix will use substitutes if available. In other words, the builder has to present proof that it knows how to build a desired store path from scratch by constructing a derivation graph for that path. Probably we should also disallow instantiating/building fixed-output derivations (specifically, those that access the network, but currently we have no way to mark fixed-output derivations that don't access the network). Otherwise sandboxed derivations can bypass sandbox restrictions and access the network. When sandboxing is enabled, we make paths appear in the sandbox of the builder by entering the mount namespace of the builder and bind-mounting each path. This is tricky because we do a pivot_root() in the builder to change the root directory of its mount namespace, and thus the host /nix/store is not visible in the mount namespace of the builder. To get around this, just before doing pivot_root(), we branch a second mount namespace that shares its /nix/store mountpoint with the parent. Recursive Nix currently doesn't work on macOS in sandboxed mode (because we can't change the sandbox policy of a running build) and in non-root mode (because setns() barfs).
2019-11-06Make --enable-gc the defaultEelco Dolstra
2019-11-05Merge branch 'fix/nix-doctor-output' of https://github.com/bhipple/nixEelco Dolstra
2019-11-05Disable shellcheckEelco Dolstra
It's broken at the moment: https://hydra.nixos.org/build/105746055 Also it pulls in GHC which is a pretty big dependency.
2019-11-05Fix manual buildEelco Dolstra
2019-11-05Merge branch 'nix-repl-e' of https://github.com/zimbatm/nixEelco Dolstra
2019-11-05Merge pull request #3193 from matthewbauer/patch-11Eelco Dolstra
Update man to show that nix-shell allows --arg
2019-11-05Merge pull request #3180 from kevinastock/patch-1Eelco Dolstra
docs: fix upper bound on number of consumed cores
2019-11-05Merge pull request #3199 from kevinastock/patch-2Eelco Dolstra
docs: xref doesn't render in title
2019-11-05Fix VM testsEelco Dolstra
2019-11-05Merge branch 'switch-to-19.09' of https://github.com/Ericson2314/nixEelco Dolstra
2019-11-05Don't use SOCK_CLOEXEC on macOSEelco Dolstra
https://hydra.nixos.org/build/105428308
2019-11-04Merge pull request #3206 from kevinastock/patch-3Eelco Dolstra
docs: correct default location of log directory
2019-11-04docs: correct default location of log directoryKevin Stock
2019-11-04Merge pull request #3202 from kraem/masterEelco Dolstra
Update nix eval --help msg to not include deprecated command
2019-11-04Merge pull request #3203 from hvdijk/prefetch-progressEelco Dolstra
Fix progress bar when nix-prefetch-url is piped.
2019-11-03Fix progress bar when nix-prefetch-url is piped.Harald van Dijk
The intent of the code was that if the window size cannot be determined, it would be treated as having the maximum possible size. Because of a missing assignment, it was actually treated as having a width of 0. The reason the width could not be determined was because it was obtained from stdout, not stderr, even though the printing was done to stderr. This commit addresses both issues.
2019-11-03Update nix eval --help msg to not include deprecated commandkraem
2019-11-02docs: xref doesn't render in titleKevin Stock
The `post-build-hook` text currently appears in the index, but not on the actual title line of the section, this follows the pattern used in a previous section to get a reference into a title.
2019-11-01Update man to show that nix-shell allows --argMatthew Bauer
2019-11-01Merge pull request #3192 from ng-0/ng0/issue3186Eelco Dolstra
include netinet/in.h in src/nix/main.cc
2019-11-01include netinet/in.h in src/nix/main.ccng0
Fixes #3186
2019-10-31Merge pull request #3187 from Mic92/travisEelco Dolstra
travis: enable linux builds
2019-10-31travis: enable linux buildsJörg Thalheim
Also disable email to not notify the whole NixOS community about build failures
2019-10-31Merge pull request #3182 from bhipple/fixup/commentsEelco Dolstra
Minor updates to inline comments
2019-10-31Merge pull request #3179 from dtzWill/fix/struct-class-mismatch-minorEelco Dolstra
minor: fix mismatch of struct/class forward decl of 'Source'
2019-10-31Minor updates to inline commentsBenjamin Hipple
Add missing docstring on InstallableCommand. Also, some of these were wrapped when they're right next to a line longer than the unwrapped line, so we can just unwrap them to save vertical space.
2019-10-30docs: fix upper bound on number of consumed coresKevin Stock
2019-10-30minor: fix mismatch of struct/class forward decl of 'Source'Will Dietz
Fixes the following warning and the indicate potential issue: src/libstore/worker-protocol.hh:66:1: warning: class 'Source' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags] (cherry picked from commit 6e1bb04870b1b723282d32182af286646f13bf3c)
2019-10-29queryPathInfoUncached(): Return const ValidPathInfoEelco Dolstra
2019-10-29Move addToStoreFromDump to StoreEelco Dolstra
2019-10-29Don't create a Store in processConnection()Eelco Dolstra
2019-10-29Move Unix domain socket creation to libutilEelco Dolstra
Also drop multithread-unfriendly hacks like doing a temporary chmod/umask.
2019-10-29Move most of the daemon implementation to libstoreEelco Dolstra
2019-10-29Remove the check against concurrent builds in the same processEelco Dolstra
2019-10-28findDerivationFilename: add FIXMEzimbatm
2019-10-28nix repl: also handle lambda editzimbatm
2019-10-28editorFor: take a pos object insteadzimbatm
2019-10-28libexpr: findDerivationFilename return Pos instead of tuplezimbatm
2019-10-27Factor out linkOrCopy()Eelco Dolstra
2019-10-27Add O(1)-memory copyPath() functionEelco Dolstra
2019-10-27SimplificationEelco Dolstra
2019-10-27Merge branch 'issue-3147-inNixShell-arg' of https://github.com/hercules-ci/nixEelco Dolstra
2019-10-27Add inNixShell = true to nix-shell auto-callRobert Hensing
This is an alternative to the IN_NIX_SHELL environment variable, allowing the expression to adapt itself to nix-shell without triggering those adaptations when used as a dependency of another shell. Closes #3147
2019-10-27Merge branch 'tojson-tostring-fix' of https://github.com/mayflower/nixEelco Dolstra
2019-10-27builtins.toJSON: fix __toString usageRobin Gloster
2019-10-25Switch to nixpkgs 19.09John Ericson