Nix can now automatically run the garbage collector during builds or
while adding paths to the store. The option "min-free = <bytes>"
specifies that Nix should run the garbage collector whenever free
space in the Nix store drops below <bytes>. It will then delete
garbage until "max-free" bytes are available.
Garbage collection during builds is asynchronous; running builds are
not paused and new builds are not blocked. However, there also is a
synchronous GC run prior to the first build/substitution.
Currently, no old GC roots are deleted (as in "nix-collect-garbage
-d").
Since file locks are per-process rather than per-file-descriptor, the
garbage collector would always acquire a lock on its own temproots
file and conclude that it's stale.
After the change from #84 default variable files with the '.yml'
extension got templated as resource set templates accidentally.
This resolves the issue by moving the list reserved default file names
to a common place and reusing it in both the templater and context pkg.
This fixes#85
Without this, substitute info is fetched sequentially, which is
superslow. In the old UI (e.g. nix-build), we call printMissing(),
which calls queryMissing(), thereby preheating the binary cache
cache. But the new UI doesn't do that.
In particular, drop the "build-" and "gc-" prefixes which are
pointless. So now you can say
nix build --no-sandbox
instead of
nix build --no-build-use-sandbox
This is useful for testing commands in isolation.
For example,
$ nix run nixpkgs.geeqie -i -k DISPLAY -k XAUTHORITY -c geeqie
runs geeqie in an empty environment, except for $DISPLAY and
$XAUTHORITY.
E.g.
nix run nixpkgs.hello -c hello --greeting Hallo
Note that unlike "nix-shell --command", no quoting of arguments is
necessary.
"-c" (short for "--command") cannot be combined with "--" because they
both consume all remaining arguments. But since installables shouldn't
start with a dash, this is unlikely to cause problems.
Running "nix run" with a diverted store, e.g.
$ nix run --store local?root=/tmp/nix nixpkgs.hello
stopped working when Nix became multithreaded, because
unshare(CLONE_NEWUSER) doesn't work in multithreaded processes. The
obvious solution is to terminate all other threads first, but 1) there
is no way to terminate Boehm GC marker threads; and 2) it appears that
the kernel has a race where unshare(CLONE_NEWUSER) will still fail for
some indeterminate amount of time after joining other threads.
So instead, "nix run" will now exec() a single-threaded helper ("nix
__run_in_chroot") that performs the actual unshare()/chroot()/exec().
Now that we use threads in lots of places, it's possible for
TunnelLogger::log() to be called asynchronously from other threads
than the main loop. So we need to ensure that STDERR_NEXT messages
don't clobber other messages.
In other places in Kontemplate that deal with YAML files, both the
".yaml" and ".yml" extension are supported.
This fixes context loading code to support that for resource set
variables, too.
This fixes#83
This release comes with some new features, usability improvements and
a better build & release process.
Features:
* Documentation has been improved significantly, check out the new
[README][] and follow the links within!
* Extra variables can now be loaded from files on disk. Simply specify
a list of YAML/JSON files under the 'import' key in your cluster
context file. Check out #66 for details!
* Resource set paths can now be overridden by users. By default it is
assumed that the path to a resource set is the same as its name,
however this is now user-controllable.
This means the same resource set can be included multiple times
under different names, for easier including/excluding. See #71 for
details!
* Kontemplate is currently getting a website that is under construction
at [kontemplate.works][] - feel free to check it out and
[give feedback][]!
Fixes:
* Windows release binaries now have the correct filename
* Several potential warning and error messages have been improved
Release binaries are signed with GPG key `66F505681DB8F43B` which is
verified on my Github profile.
[README]: https://github.com/tazjin/kontemplate/blob/master/README.md
[kontemplate.works]: http://kontemplate.works/
[give feedback]: https://github.com/tazjin/kontemplate-website/issues
Instead of signing the binary and adding the signature in the release
tarball, keep the GPG-signatures *outside* of the tarball.
This makes it easier to use the built-in GPG-signature verification
features of package managers such as pacman.