From 819873d74566c556d94fd88c85d15ac309162b84 Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Fri, 6 Mar 2009 12:25:51 +0000 Subject: Convert "nix-daemon" and nix options svn path=/nixos/branches/fix-style/; revision=14365 --- upstart-jobs/nix.nix | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 upstart-jobs/nix.nix (limited to 'upstart-jobs/nix.nix') diff --git a/upstart-jobs/nix.nix b/upstart-jobs/nix.nix new file mode 100644 index 00000000000..c46b721a2a0 --- /dev/null +++ b/upstart-jobs/nix.nix @@ -0,0 +1,227 @@ +{pkgs, config, ...}: + +###### interface +let + inherit (pkgs.lib) mkOption mkIf; + + options = { + + nix = { + + maxJobs = mkOption { + default = 1; + example = 2; + description = " + This option defines the maximum number of jobs that Nix will try + to build in parallel. The default is 1. You should generally + set it to the number of CPUs in your system (e.g., 2 on a Athlon + 64 X2). + "; + }; + + useChroot = mkOption { + default = false; + example = true; + description = " + If set, Nix will perform builds in a chroot-environment that it + will set up automatically for each build. This prevents + impurities in builds by disallowing access to dependencies + outside of the Nix store. + "; + }; + + extraOptions = mkOption { + default = ""; + example = " + gc-keep-outputs = true + gc-keep-derivations = true + "; + description = " + This option allows to append lines to nix.conf. + "; + }; + + distributedBuilds = mkOption { + default = false; + description = " + Whether to distribute builds to the machines listed in + . + "; + }; + + buildMachines = mkOption { + example = [ + { hostName = "voila.labs.cs.uu.nl"; + sshUser = "nix"; + sshKey = "/root/.ssh/id_buildfarm"; + system = "powerpc-darwin"; + maxJobs = 1; + } + { hostName = "linux64.example.org"; + sshUser = "buildfarm"; + sshKey = "/root/.ssh/id_buildfarm"; + system = "x86_64-linux"; + maxJobs = 2; + } + ]; + description = " + This option lists the machines to be used if distributed + builds are enabled (see + ). Nix will perform + derivations on those machines via SSh by copying the inputs to + the Nix store on the remote machine, starting the build, then + copying the output back to the local Nix store. Each element + of the list should be an attribute set containing the + machine's host name (hostname), the user + name to be used for the SSH connection + (sshUser), the Nix system type + (system, e.g., + \"i686-linux\"), the maximum number of jobs + to be run in parallel on that machine + (maxJobs), and the path to the SSH private + key to be used to connect (sshKey). The + SSH private key should not have a passphrase, and the + corresponding public key should be added to + ~sshUser/authorized_keys + on the remote machine. + "; + }; + + proxy = mkOption { + default = ""; + description = " + This option specifies the proxy to use for fetchurl. The real effect + is just exporting http_proxy, https_proxy and ftp_proxy with that + value. + "; + example = "http://127.0.0.1:3128"; + }; + + # Environment variables for running Nix. + envVars = mkOption { + internal = true; + default = ""; + description = " + Define the environment variables used by nix to + "; + + merge = pkgs.lib.mergeStringOption; + + # other option should be used to define the content instead of using + # the apply function. + apply = conf: '' + export NIX_CONF_DIR=/nix/etc/nix + + # Enable the copy-from-other-stores substituter, which allows builds + # to be sped up by copying build results from remote Nix stores. To + # do this, mount the remote file system on a subdirectory of + # /var/run/nix/remote-stores. + export NIX_OTHER_STORES=/var/run/nix/remote-stores/*/nix + + '' + # */ + (if config.nix.distributedBuilds then + '' + export NIX_BUILD_HOOK=${config.environment.nix}/libexec/nix/build-remote.pl + export NIX_REMOTE_SYSTEMS=/etc/nix.machines + export NIX_CURRENT_LOAD=/var/run/nix/current-load + '' + else "") + + + (if config.nix.proxy != "" then + '' + export http_proxy=${config.nix.proxy} + export https_proxy=${config.nix.proxy} + export ftp_proxy=${config.nix.proxy} + '' + else "") + + conf; + }; + + + services = { + pulseaudio = { + enable = mkOption { + default = false; + description = '' + Whether to enable the PulseAudio system-wide audio server. + Note that the documentation recommends running PulseAudio + daemons per-user rather than system-wide on desktop machines. + ''; + }; + + logLevel = mkOption { + default = "notice"; + example = "debug"; + description = '' + A string denoting the log level: one of + error, warn, + notice, info, + or debug. + ''; + }; + }; + }; + }; + }; +in + +###### implementation + +let + binsh = config.system.build.binsh; + nixEnvVars = config.nix.envVars; + inherit (pkgs) nix; +in + +{ + require = [ + options + ]; + + environment = { + etc = [ + { # Nix configuration. + source = + let + # Tricky: if we're using a chroot for builds, then we need + # /bin/sh in the chroot (our own compromise to purity). + # However, since /bin/sh is a symlink to some path in the + # Nix store, which furthermore has runtime dependencies on + # other paths in the store, we need the closure of /bin/sh + # in `build-chroot-dirs' - otherwise any builder that uses + # /bin/sh won't work. + refs = pkgs.writeReferencesToFile binsh; + in + pkgs.runCommand "nix.conf" {} '' + binshDeps=$(for i in $(cat ${refs}); do if test -d $i; then echo $i; fi; done) + cat > $out < /dev/null 2>&1 + end script + ''; + }]; + }; +} -- cgit 1.4.1