Skip to content

Commit 56599bd

Browse files
authored
Merge pull request #4224 from zimbatm/per-build-installer
installer: simplify the per-build installation
2 parents 4dcb183 + 233b61d commit 56599bd

3 files changed

Lines changed: 59 additions & 9 deletions

File tree

flake.nix

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,9 +324,26 @@
324324
''
325325
mkdir -p $out/nix-support
326326
327+
# Converts /nix/store/50p3qk8kka9dl6wyq40vydq945k0j3kv-nix-2.4pre20201102_550e11f/bin/nix
328+
# To 50p3qk8kka9dl6wyq40vydq945k0j3kv/bin/nix
329+
tarballPath() {
330+
# Remove the store prefix
331+
local path=''${1#${builtins.storeDir}/}
332+
# Get the path relative to the derivation root
333+
local rest=''${path#*/}
334+
# Get the derivation hash
335+
local drvHash=''${path%%-*}
336+
echo "$drvHash/$rest"
337+
}
338+
327339
substitute ${./scripts/install.in} $out/install \
328340
${pkgs.lib.concatMapStrings
329-
(system: "--replace '@binaryTarball_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) ")
341+
(system:
342+
'' \
343+
--replace '@tarballHash_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \
344+
--replace '@tarballPath_${system}@' $(tarballPath ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \
345+
''
346+
)
330347
[ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
331348
} \
332349
--replace '@nixVersion@' ${version}

scripts/install-nix-from-closure.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ while [ $# -gt 0 ]; do
9898
echo ""
9999
echo " --nix-extra-conf-file: Path to nix.conf to prepend when installing /etc/nix.conf"
100100
echo ""
101+
if [ -n "${INVOKED_FROM_INSTALL_IN:-}" ]; then
102+
echo " --tarball-url-prefix URL: Base URL to download the Nix tarball from."
103+
fi
101104
) >&2
102105

103106
# darwin and Catalina+

scripts/install.in

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,47 @@ require_util() {
2525
}
2626

2727
case "$(uname -s).$(uname -m)" in
28-
Linux.x86_64) system=x86_64-linux; hash=@binaryTarball_x86_64-linux@;;
29-
Linux.i?86) system=i686-linux; hash=@binaryTarball_i686-linux@;;
30-
Linux.aarch64) system=aarch64-linux; hash=@binaryTarball_aarch64-linux@;;
31-
Darwin.x86_64) system=x86_64-darwin; hash=@binaryTarball_x86_64-darwin@;;
32-
# eventually maybe: system=arm64-darwin; hash=@binaryTarball_arm64-darwin@;;
33-
Darwin.arm64) system=x86_64-darwin; hash=@binaryTarball_x86_64-darwin@;;
28+
Linux.x86_64)
29+
hash=@tarballHash_x86_64-linux@
30+
path=@tarballPath_x86_64-linux@
31+
system=x86_64-linux
32+
;;
33+
Linux.i?86)
34+
hash=@tarballHash_i686-linux@
35+
path=@tarballPath_i686-linux@
36+
system=i686-linux
37+
;;
38+
Linux.aarch64)
39+
hash=@tarballHash_aarch64-linux@
40+
path=@tarballPath_aarch64-linux@
41+
system=aarch64-linux
42+
;;
43+
Darwin.x86_64)
44+
hash=@tarballHash_x86_64-darwin@
45+
path=@tarballPath_x86_64-darwin@
46+
system=x86_64-darwin
47+
;;
48+
Darwin.arm64)
49+
hash=@binaryTarball_x86_64-darwin@
50+
path=@tarballPath_x86_64-darwin@
51+
# eventually maybe: arm64-darwin
52+
system=x86_64-darwin
53+
;;
3454
*) oops "sorry, there is no binary distribution of Nix for your platform";;
3555
esac
3656

37-
url="https://releases.nixos.org/nix/nix-@nixVersion@/nix-@nixVersion@-$system.tar.xz"
57+
# Use this command-line option to fetch the tarballs using nar-serve or Cachix
58+
if "${1:---tarball-url-prefix}"; then
59+
if [ -z "${2:-}" ]; then
60+
oops "missing argument for --tarball-url-prefix"
61+
fi
62+
url=${2}/${path}
63+
shift 2
64+
else
65+
url=https://releases.nixos.org/nix/nix-@nixVersion@/nix-@nixVersion@-$system.tar.xz
66+
fi
3867

39-
tarball="$tmpDir/$(basename "$tmpDir/nix-@nixVersion@-$system.tar.xz")"
68+
tarball=$tmpDir/nix-@nixVersion@-$system.tar.xz
4069

4170
require_util curl "download the binary tarball"
4271
require_util tar "unpack the binary tarball"
@@ -68,6 +97,7 @@ tar -xJf "$tarball" -C "$unpack" || oops "failed to unpack '$url'"
6897
script=$(echo "$unpack"/*/install)
6998

7099
[ -e "$script" ] || oops "installation script is missing from the binary tarball!"
100+
export INVOKED_FROM_INSTALL_IN=1
71101
"$script" "$@"
72102

73103
} # End of wrapping

0 commit comments

Comments
 (0)