diff --git a/release.nix b/release.nix index 8281853fe9..ae3b4ec554 100644 --- a/release.nix +++ b/release.nix @@ -63,7 +63,7 @@ let build = - { system ? "i686-linux" }: + { system ? "x86_64-linux" }: with import nixpkgs { inherit system; }; @@ -80,9 +80,42 @@ let --enable-gc ''; + enableParallelBuilding = true; + doInstallCheck = true; }; + binaryTarball = + { system ? "x86_64-linux" }: + + with import nixpkgs { inherit system; }; + + let + toplevel = build { inherit system; }; + version = toplevel.src.version; + in + + runCommand "nix-binary-tarball-${version}" + { exportReferencesGraph = [ "closure" toplevel ]; + buildInputs = [ perl ]; + meta.description = "Distribution-independent Nix bootstrap binaries for ${system}"; + } + '' + storePaths=$(perl ${pathsFromGraph} ./closure) + printRegistration=1 perl ${pathsFromGraph} ./closure > $TMPDIR/reginfo + substitute ${./scripts/install-nix-from-closure.sh} $TMPDIR/install \ + --subst-var-by nix ${toplevel} --subst-var-by regInfo /nix/store/reginfo + chmod +x $TMPDIR/install + fn=$out/nix-${version}-${system}.tar.bz2 + mkdir -p $out/nix-support + echo "file binary-dist $fn" >> $out/nix-support/hydra-build-products + tar cvfj $fn \ + --owner=root --group=root --absolute-names \ + --transform "s,$TMPDIR/install,/usr/bin/nix-finish-install," \ + --transform "s,$TMPDIR/reginfo,/nix/store/reginfo," \ + $TMPDIR/install $TMPDIR/reginfo $storePaths + ''; + coverage = with import nixpkgs { system = "x86_64-linux"; }; diff --git a/scripts/install-nix-from-closure.sh b/scripts/install-nix-from-closure.sh new file mode 100644 index 0000000000..41e596e5ff --- /dev/null +++ b/scripts/install-nix-from-closure.sh @@ -0,0 +1,34 @@ +#! /bin/sh -e + +nix=@nix@ +regInfo=@regInfo@ + +if ! $nix/bin/nix-store --load-db < $regInfo; then + echo "$0: unable to register valid paths" + exit 1 +fi + +. @nix@/etc/profile.d/nix.sh + +if ! $nix/bin/nix-env -i @nix@; then + echo "$0: unable to install Nix into your default profile" + exit 1 +fi + +# Add nix.sh to the shell's profile.d directory. +p=$NIX_LINK/etc/profile.d/nix.sh + +if [ -w /etc/profile.d ]; then + ln -s $p /etc/profile.d/ +elif [ -w /usr/local/etc/profile.d ]; then + ln -s $p /usr/local/etc/profile.d/ +else + cat <