Skip to content

Commit

Permalink
disko-images: replace nix-copy with cp
Browse files Browse the repository at this point in the history
This hopefully fixes the large memory consumption we have seen in the
past. Also presumably coreutils cp is more tuned for performance than
whatever nix does.
  • Loading branch information
Mic92 committed May 6, 2024
1 parent 4f8c858 commit 8a4585a
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions lib/make-disk-image.nix
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ let
${extraPostVM}
'';

closureInfo = pkgs.callPackage ./closure-info.nix { };
closureInfo = (pkgs.callPackage ./closure-info.nix { }) {
rootPaths = [ systemToInstall.config.system.build.toplevel ];
};
partitioner = ''
# running udev, stolen from stage-1.sh
echo "running udev..."
Expand All @@ -55,16 +57,23 @@ let
udevadm trigger --action=add
udevadm settle
# populate nix db, so nixos-install doesn't complain
export NIX_STATE_DIR=$TMPDIR/state
${pkgs.fakeroot}/bin/fakeroot nix-store --register-validity --reregister < ${closureInfo {
rootPaths = [ systemToInstall.config.system.build.toplevel ];
}}/registration
${systemToInstall.config.system.build.diskoScript}
'';

installer = ''
${systemToInstall.config.system.build.nixos-install}/bin/nixos-install --system ${systemToInstall.config.system.build.toplevel} --keep-going --no-channel-copy -v --no-root-password --option binary-caches ""
# populate nix db, so nixos-install doesn't complain
export NIX_STATE_DIR=${systemToInstall.config.disko.rootMountPoint}/nix/var/nix
# We have to use fakeroot here, because nix tries to chown files in the original store.
# fakeroot will make override all chown calls to no-ops.
echo "Registering store paths..."
${pkgs.fakeroot}/bin/fakeroot nix-store --register-validity --reregister < ${closureInfo}/registration
# We copy files with cp because `nix copy` seems to have a large memory leak
echo "Copying store paths..."
mkdir -p ${systemToInstall.config.disko.rootMountPoint}/nix/store
xargs cp -r --target-directory=${systemToInstall.config.disko.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 ""
umount -Rv ${systemToInstall.config.disko.rootMountPoint}
'';
QEMU_OPTS = lib.concatMapStringsSep " " (disk: "-drive file=${disk.name}.raw,if=virtio,cache=unsafe,werror=report,format=raw") (lib.attrValues nixosConfig.config.disko.devices.disk);
Expand Down

0 comments on commit 8a4585a

Please sign in to comment.