forked from mirrors/nixpkgs
nixos-install: copy channels before system eval
since fc614c37c6
nixos needs access to its
own path (<nixpkgs/nixos>) to evaluate a system with documentation.
since documentation is enabled by default almost all systems need such
access, including the installer tests. nixos-install however does not
ensure that a channel exists in the target store before evaluating the
system in that store, which can lead to `path is not valid` errors.
This commit is contained in:
parent
555d3d545a
commit
3ad8f52de0
|
@ -143,6 +143,23 @@ export TMPDIR=${TMPDIR:-$tmpdir}
|
|||
|
||||
sub="auto?trusted=1"
|
||||
|
||||
# Copy the NixOS/Nixpkgs sources to the target as the initial contents
|
||||
# of the NixOS channel.
|
||||
if [[ -z $noChannelCopy ]]; then
|
||||
if [[ -z $channelPath ]]; then
|
||||
channelPath="$(nix-env -p /nix/var/nix/profiles/per-user/root/channels -q nixos --no-name --out-path 2>/dev/null || echo -n "")"
|
||||
fi
|
||||
if [[ -n $channelPath ]]; then
|
||||
echo "copying channel..."
|
||||
mkdir -p "$mountPoint"/nix/var/nix/profiles/per-user/root
|
||||
nix-env --store "$mountPoint" "${extraBuildFlags[@]}" --extra-substituters "$sub" \
|
||||
-p "$mountPoint"/nix/var/nix/profiles/per-user/root/channels --set "$channelPath" --quiet \
|
||||
"${verbosity[@]}"
|
||||
install -m 0700 -d "$mountPoint"/root/.nix-defexpr
|
||||
ln -sfn /nix/var/nix/profiles/per-user/root/channels "$mountPoint"/root/.nix-defexpr/channels
|
||||
fi
|
||||
fi
|
||||
|
||||
# Build the system configuration in the target filesystem.
|
||||
if [[ -z $system ]]; then
|
||||
outLink="$tmpdir/system"
|
||||
|
@ -167,23 +184,6 @@ nix-env --store "$mountPoint" "${extraBuildFlags[@]}" \
|
|||
--extra-substituters "$sub" \
|
||||
-p "$mountPoint"/nix/var/nix/profiles/system --set "$system" "${verbosity[@]}"
|
||||
|
||||
# Copy the NixOS/Nixpkgs sources to the target as the initial contents
|
||||
# of the NixOS channel.
|
||||
if [[ -z $noChannelCopy ]]; then
|
||||
if [[ -z $channelPath ]]; then
|
||||
channelPath="$(nix-env -p /nix/var/nix/profiles/per-user/root/channels -q nixos --no-name --out-path 2>/dev/null || echo -n "")"
|
||||
fi
|
||||
if [[ -n $channelPath ]]; then
|
||||
echo "copying channel..."
|
||||
mkdir -p "$mountPoint"/nix/var/nix/profiles/per-user/root
|
||||
nix-env --store "$mountPoint" "${extraBuildFlags[@]}" --extra-substituters "$sub" \
|
||||
-p "$mountPoint"/nix/var/nix/profiles/per-user/root/channels --set "$channelPath" --quiet \
|
||||
"${verbosity[@]}"
|
||||
install -m 0700 -d "$mountPoint"/root/.nix-defexpr
|
||||
ln -sfn /nix/var/nix/profiles/per-user/root/channels "$mountPoint"/root/.nix-defexpr/channels
|
||||
fi
|
||||
fi
|
||||
|
||||
# Mark the target as a NixOS installation, otherwise switch-to-configuration will chicken out.
|
||||
mkdir -m 0755 -p "$mountPoint/etc"
|
||||
touch "$mountPoint/etc/NIXOS"
|
||||
|
|
Loading…
Reference in a new issue