forked from lix-project/lix
Generate binary tarballs for installing Nix
For several platforms we don't currently have "native" Nix packages (e.g. Mac OS X and FreeBSD). This provides the next best thing: a tarball containing the closure of Nix, plus a simple script "nix-finish-install" that initialises the Nix database, registers the paths in the closure as valid, and runs "nix-env -i /path/to/nix" to initialise the user profile. The tarball must be unpacked in the root directory. It creates /nix/store/... and /usr/bin/nix-finish-install. Typical installation is as follows: $ cd / $ tar xvf /path/to/nix-1.1pre1234_abcdef-x86_64-linux.tar.bz2 $ nix-finish-install (if necessary add ~/.nix-profile/etc/profile.d/nix.sh to the shell login scripts) After this, /usr/bin/nix-finish-install can be deleted, if desired. The downside to the binary tarball is that it's pretty big (~55 MiB for x86_64-linux).
This commit is contained in:
parent
591aab7e21
commit
6814b1dfa1
35
release.nix
35
release.nix
|
@ -63,7 +63,7 @@ let
|
||||||
|
|
||||||
|
|
||||||
build =
|
build =
|
||||||
{ system ? "i686-linux" }:
|
{ system ? "x86_64-linux" }:
|
||||||
|
|
||||||
with import nixpkgs { inherit system; };
|
with import nixpkgs { inherit system; };
|
||||||
|
|
||||||
|
@ -80,9 +80,42 @@ let
|
||||||
--enable-gc
|
--enable-gc
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
doInstallCheck = 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 =
|
coverage =
|
||||||
with import nixpkgs { system = "x86_64-linux"; };
|
with import nixpkgs { system = "x86_64-linux"; };
|
||||||
|
|
34
scripts/install-nix-from-closure.sh
Normal file
34
scripts/install-nix-from-closure.sh
Normal file
|
@ -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 <<EOF
|
||||||
|
Installation finished. To ensure that the necessary environment
|
||||||
|
variables are set, please add the line
|
||||||
|
|
||||||
|
source $p
|
||||||
|
|
||||||
|
to your shell profile (e.g. ~/.profile).
|
||||||
|
EOF
|
||||||
|
fi
|
Loading…
Reference in a new issue