installer: simplify the per-build installation
The goal is to allow the installation and testing of arbitrary Nix versions. Extend the base installer to accept a `--tarball-url-prefix <url>` to change where the Nix tarball is getting downloaded from. Once this is merged it should allow to: 1. Pick an evaluation at https://hydra.nixos.org/jobset/nix/master that looks healthy 2. Select the installedScript build and find the store path. Now equipped with all of this, use an instance of nar-serve to fetch the install script and release tarballs: curl -sfL https://nar-serve.numtide.com/nix/store/rkv4yh7pym941bhj0849zqdkg2546bdv-installer-script/install \ | sh --tarball-url-prefix https://nar-serve.numtide.com/nix/store Or with cachix, strip the /nix/store and derivation name and then: curl -sfL https://mycache.cachix.org/serve/rkv4yh7pym941bhj0849zqdkg2546bdv/install \ | sh --tarball-url-prefix https://mycache.cachix.org/serve Fixes #4047
This commit is contained in:
parent
4dcb183af3
commit
233b61d3d6
3 changed files with 59 additions and 9 deletions
19
flake.nix
19
flake.nix
|
@ -324,9 +324,26 @@
|
||||||
''
|
''
|
||||||
mkdir -p $out/nix-support
|
mkdir -p $out/nix-support
|
||||||
|
|
||||||
|
# Converts /nix/store/50p3qk8kka9dl6wyq40vydq945k0j3kv-nix-2.4pre20201102_550e11f/bin/nix
|
||||||
|
# To 50p3qk8kka9dl6wyq40vydq945k0j3kv/bin/nix
|
||||||
|
tarballPath() {
|
||||||
|
# Remove the store prefix
|
||||||
|
local path=''${1#${builtins.storeDir}/}
|
||||||
|
# Get the path relative to the derivation root
|
||||||
|
local rest=''${path#*/}
|
||||||
|
# Get the derivation hash
|
||||||
|
local drvHash=''${path%%-*}
|
||||||
|
echo "$drvHash/$rest"
|
||||||
|
}
|
||||||
|
|
||||||
substitute ${./scripts/install.in} $out/install \
|
substitute ${./scripts/install.in} $out/install \
|
||||||
${pkgs.lib.concatMapStrings
|
${pkgs.lib.concatMapStrings
|
||||||
(system: "--replace '@binaryTarball_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) ")
|
(system:
|
||||||
|
'' \
|
||||||
|
--replace '@tarballHash_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \
|
||||||
|
--replace '@tarballPath_${system}@' $(tarballPath ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \
|
||||||
|
''
|
||||||
|
)
|
||||||
[ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
|
[ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
|
||||||
} \
|
} \
|
||||||
--replace '@nixVersion@' ${version}
|
--replace '@nixVersion@' ${version}
|
||||||
|
|
|
@ -98,6 +98,9 @@ while [ $# -gt 0 ]; do
|
||||||
echo ""
|
echo ""
|
||||||
echo " --nix-extra-conf-file: Path to nix.conf to prepend when installing /etc/nix.conf"
|
echo " --nix-extra-conf-file: Path to nix.conf to prepend when installing /etc/nix.conf"
|
||||||
echo ""
|
echo ""
|
||||||
|
if [ -n "${INVOKED_FROM_INSTALL_IN:-}" ]; then
|
||||||
|
echo " --tarball-url-prefix URL: Base URL to download the Nix tarball from."
|
||||||
|
fi
|
||||||
) >&2
|
) >&2
|
||||||
|
|
||||||
# darwin and Catalina+
|
# darwin and Catalina+
|
||||||
|
|
|
@ -25,18 +25,47 @@ require_util() {
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$(uname -s).$(uname -m)" in
|
case "$(uname -s).$(uname -m)" in
|
||||||
Linux.x86_64) system=x86_64-linux; hash=@binaryTarball_x86_64-linux@;;
|
Linux.x86_64)
|
||||||
Linux.i?86) system=i686-linux; hash=@binaryTarball_i686-linux@;;
|
hash=@tarballHash_x86_64-linux@
|
||||||
Linux.aarch64) system=aarch64-linux; hash=@binaryTarball_aarch64-linux@;;
|
path=@tarballPath_x86_64-linux@
|
||||||
Darwin.x86_64) system=x86_64-darwin; hash=@binaryTarball_x86_64-darwin@;;
|
system=x86_64-linux
|
||||||
# eventually maybe: system=arm64-darwin; hash=@binaryTarball_arm64-darwin@;;
|
;;
|
||||||
Darwin.arm64) system=x86_64-darwin; hash=@binaryTarball_x86_64-darwin@;;
|
Linux.i?86)
|
||||||
|
hash=@tarballHash_i686-linux@
|
||||||
|
path=@tarballPath_i686-linux@
|
||||||
|
system=i686-linux
|
||||||
|
;;
|
||||||
|
Linux.aarch64)
|
||||||
|
hash=@tarballHash_aarch64-linux@
|
||||||
|
path=@tarballPath_aarch64-linux@
|
||||||
|
system=aarch64-linux
|
||||||
|
;;
|
||||||
|
Darwin.x86_64)
|
||||||
|
hash=@tarballHash_x86_64-darwin@
|
||||||
|
path=@tarballPath_x86_64-darwin@
|
||||||
|
system=x86_64-darwin
|
||||||
|
;;
|
||||||
|
Darwin.arm64)
|
||||||
|
hash=@binaryTarball_x86_64-darwin@
|
||||||
|
path=@tarballPath_x86_64-darwin@
|
||||||
|
# eventually maybe: arm64-darwin
|
||||||
|
system=x86_64-darwin
|
||||||
|
;;
|
||||||
*) oops "sorry, there is no binary distribution of Nix for your platform";;
|
*) oops "sorry, there is no binary distribution of Nix for your platform";;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
url="https://releases.nixos.org/nix/nix-@nixVersion@/nix-@nixVersion@-$system.tar.xz"
|
# Use this command-line option to fetch the tarballs using nar-serve or Cachix
|
||||||
|
if "${1:---tarball-url-prefix}"; then
|
||||||
|
if [ -z "${2:-}" ]; then
|
||||||
|
oops "missing argument for --tarball-url-prefix"
|
||||||
|
fi
|
||||||
|
url=${2}/${path}
|
||||||
|
shift 2
|
||||||
|
else
|
||||||
|
url=https://releases.nixos.org/nix/nix-@nixVersion@/nix-@nixVersion@-$system.tar.xz
|
||||||
|
fi
|
||||||
|
|
||||||
tarball="$tmpDir/$(basename "$tmpDir/nix-@nixVersion@-$system.tar.xz")"
|
tarball=$tmpDir/nix-@nixVersion@-$system.tar.xz
|
||||||
|
|
||||||
require_util curl "download the binary tarball"
|
require_util curl "download the binary tarball"
|
||||||
require_util tar "unpack the binary tarball"
|
require_util tar "unpack the binary tarball"
|
||||||
|
@ -68,6 +97,7 @@ tar -xJf "$tarball" -C "$unpack" || oops "failed to unpack '$url'"
|
||||||
script=$(echo "$unpack"/*/install)
|
script=$(echo "$unpack"/*/install)
|
||||||
|
|
||||||
[ -e "$script" ] || oops "installation script is missing from the binary tarball!"
|
[ -e "$script" ] || oops "installation script is missing from the binary tarball!"
|
||||||
|
export INVOKED_FROM_INSTALL_IN=1
|
||||||
"$script" "$@"
|
"$script" "$@"
|
||||||
|
|
||||||
} # End of wrapping
|
} # End of wrapping
|
||||||
|
|
Loading…
Reference in a new issue