Unverified Commit b4dc3691 authored by Jonas Chevalier's avatar Jonas Chevalier Committed by GitHub
Browse files

Fix expandOnBoot=false and rigid path to nix-path-registration (#341071)

parents eae2c943 08afe032
Loading
Loading
Loading
Loading
+22 −7
Original line number Diff line number Diff line
@@ -150,6 +150,15 @@ in
        Whether to configure the sd image to expand it's partition on boot.
      '';
    };

    nixPathRegistrationFile = mkOption {
      type = types.str;
      default = "/nix-path-registration";
      description = ''
        Location of the file containing the input for nix-store --load-db once the machine has booted.
        If overriding fileSystems."/" then you should to set this to the root mount + /nix-path-registration
      '';
    };
  };

  config = {
@@ -255,11 +264,8 @@ in
      '';
    }) {};

    boot.postBootCommands = lib.mkIf config.sdImage.expandOnBoot ''
      # On the first boot do some maintenance tasks
      if [ -f /nix-path-registration ]; then
        set -euo pipefail
        set -x
    boot.postBootCommands = let
      expandOnBoot = lib.optionalString config.sdImage.expandOnBoot ''
        # Figure out device names for the boot device and root filesystem.
        rootPart=$(${pkgs.util-linux}/bin/findmnt -n -o SOURCE /)
        bootDevice=$(lsblk -npo PKNAME $rootPart)
@@ -269,16 +275,25 @@ in
        echo ",+," | sfdisk -N$partNum --no-reread $bootDevice
        ${pkgs.parted}/bin/partprobe
        ${pkgs.e2fsprogs}/bin/resize2fs $rootPart
      '';
      nixPathRegistrationFile = config.sdImage.nixPathRegistrationFile;
    in ''
      # On the first boot do some maintenance tasks
      if [ -f ${nixPathRegistrationFile} ]; then
        set -euo pipefail
        set -x

        ${expandOnBoot}

        # Register the contents of the initial Nix store
        ${config.nix.package.out}/bin/nix-store --load-db < /nix-path-registration
        ${config.nix.package.out}/bin/nix-store --load-db < ${nixPathRegistrationFile}

        # nixos-rebuild also requires a "system" profile and an /etc/NIXOS tag.
        touch /etc/NIXOS
        ${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/system --set /run/current-system

        # Prevents this from running on later boots.
        rm -f /nix-path-registration
        rm -f ${nixPathRegistrationFile}
      fi
    '';
  };