disko-install: resolve symlinks in mount point path
Nix refuses to operate when the store path or its parent directories contain symlinks. On some systems /mnt can be a symlink, causing disko-install to fail with: error: the path '"/mnt"' is a symlink; this is not allowed for the Nix store and its parent directories Use realpath to resolve symlinks before passing the mount point to nix-store and nixos-install commands.
This commit is contained in:
committed by
Jörg Thalheim
parent
7194cfe5b7
commit
6b172212b6
@@ -224,6 +224,9 @@ main() {
|
|||||||
|
|
||||||
maybeRun mkdir -p "${mountPoint}"
|
maybeRun mkdir -p "${mountPoint}"
|
||||||
maybeRun chmod 755 "${mountPoint}" # bcachefs wants 755
|
maybeRun chmod 755 "${mountPoint}" # bcachefs wants 755
|
||||||
|
# Resolve symlinks in mountPoint path to satisfy nix-store requirements
|
||||||
|
# (nix refuses symlinks in store path hierarchy)
|
||||||
|
mountPoint=$(realpath "${mountPoint}")
|
||||||
# shellcheck disable=SC2064
|
# shellcheck disable=SC2064
|
||||||
if [[ -z ${dry_run-} ]]; then
|
if [[ -z ${dry_run-} ]]; then
|
||||||
trap cleanupMountPoint EXIT
|
trap cleanupMountPoint EXIT
|
||||||
|
|||||||
@@ -140,8 +140,11 @@ let
|
|||||||
installer = lib.optionalString cfg.copyNixStore ''
|
installer = lib.optionalString cfg.copyNixStore ''
|
||||||
${binfmtSetup}
|
${binfmtSetup}
|
||||||
unset NIX_REMOTE
|
unset NIX_REMOTE
|
||||||
|
# Resolve symlinks in rootMountPoint to satisfy nix-store requirements
|
||||||
|
# (nix refuses symlinks in store path hierarchy)
|
||||||
|
rootMountPoint=$(realpath ${lib.escapeShellArg systemToInstall.config.disko.rootMountPoint})
|
||||||
# populate nix db, so nixos-install doesn't complain
|
# populate nix db, so nixos-install doesn't complain
|
||||||
export NIX_STATE_DIR=${systemToInstall.config.disko.rootMountPoint}/nix/var/nix
|
export NIX_STATE_DIR=$rootMountPoint/nix/var/nix
|
||||||
nix-store --load-db < "${closureInfo}/registration"
|
nix-store --load-db < "${closureInfo}/registration"
|
||||||
|
|
||||||
# We copy files with cp because `nix copy` has a large memory leak.
|
# We copy files with cp because `nix copy` has a large memory leak.
|
||||||
@@ -151,7 +154,7 @@ let
|
|||||||
# showed -P 8 is optimal: higher values (-P 16) hurt performance on some
|
# showed -P 8 is optimal: higher values (-P 16) hurt performance on some
|
||||||
# systems, while -P 4 is ~30% slower. Cap at 8 but use fewer workers if the
|
# systems, while -P 4 is ~30% slower. Cap at 8 but use fewer workers if the
|
||||||
# system has fewer cores.
|
# system has fewer cores.
|
||||||
mkdir -p ${systemToInstall.config.disko.rootMountPoint}/nix/store
|
mkdir -p "$rootMountPoint"/nix/store
|
||||||
${
|
${
|
||||||
if cfg.copyNixStoreThreads == "auto" then
|
if cfg.copyNixStoreThreads == "auto" then
|
||||||
''
|
''
|
||||||
@@ -162,10 +165,10 @@ let
|
|||||||
P=${toString cfg.copyNixStoreThreads}
|
P=${toString cfg.copyNixStoreThreads}
|
||||||
''
|
''
|
||||||
}
|
}
|
||||||
xargs -P "$P" -I {} cp --recursive {} ${systemToInstall.config.disko.rootMountPoint}/nix/store < ${closureInfo}/store-paths
|
xargs -P "$P" -I {} cp --recursive {} "$rootMountPoint"/nix/store < ${closureInfo}/store-paths
|
||||||
|
|
||||||
${systemToInstall.config.system.build.nixos-install}/bin/nixos-install --root ${systemToInstall.config.disko.rootMountPoint} --system ${systemToInstall.config.system.build.toplevel} --keep-going --no-channel-copy -v --no-root-password --option binary-caches ""
|
${systemToInstall.config.system.build.nixos-install}/bin/nixos-install --root "$rootMountPoint" --system ${systemToInstall.config.system.build.toplevel} --keep-going --no-channel-copy -v --no-root-password --option binary-caches ""
|
||||||
umount -Rv ${lib.escapeShellArg systemToInstall.config.disko.rootMountPoint}
|
umount -Rv "$rootMountPoint"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
QEMU_OPTS = lib.concatStringsSep " " (
|
QEMU_OPTS = lib.concatStringsSep " " (
|
||||||
|
|||||||
Reference in New Issue
Block a user