Unverified Commit 29d56eea authored by Ryan Lahfa's avatar Ryan Lahfa Committed by GitHub
Browse files

nixos/repart-image: pass partition attrs to builder instead of JSON file (#345524)

parents c2294a59 93c61c1e
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@
, imageFileBasename
, compression
, fileSystems
, partitionsJSON
, finalPartitions
, split
, seed
, definitionsDirectory
@@ -110,7 +110,9 @@ in

  env = mkfsEnv;

  inherit partitionsJSON definitionsDirectory;
  inherit finalPartitions definitionsDirectory;

  partitionsJSON = builtins.toJSON finalAttrs.finalPartitions;

  # relative path to the repart definitions that are read by systemd-repart
  finalRepartDefinitions = "repart.d";
@@ -136,7 +138,7 @@ in
  patchPhase = ''
    runHook prePatch

    amendedRepartDefinitionsDir=$(${amendRepartDefinitions} $partitionsJSON $definitionsDirectory)
    amendedRepartDefinitionsDir=$(${amendRepartDefinitions} <(echo "$partitionsJSON") $definitionsDirectory)
    ln -vs $amendedRepartDefinitionsDir $finalRepartDefinitions

    runHook postPatch
+27 −10
Original line number Diff line number Diff line
@@ -163,21 +163,20 @@ in
          createEmpty = false;
        }).overrideAttrs
          (
            finalAttrs: previousAttrs:
            let
              copyUki = "CopyFiles=${config.system.build.uki}/${config.system.boot.loader.ukiFile}:${cfg.ukiPath}";
            in
            {
            finalAttrs: previousAttrs: {
              # add entry to inject UKI into ESP
              finalPartitions = lib.recursiveUpdate previousAttrs.finalPartitions {
                ${cfg.partitionIds.esp}.contents = {
                  "${cfg.ukiPath}".source = "${config.system.build.uki}/${config.system.boot.loader.ukiFile}";
                };
              };

              nativeBuildInputs = previousAttrs.nativeBuildInputs ++ [
                pkgs.systemdUkify
                verityHashCheck
                pkgs.jq
              ];

              postPatch = ''
                # add entry to inject UKI into ESP
                echo '${copyUki}' >> $finalRepartDefinitions/${cfg.partitionIds.esp}.conf
              '';

              preBuild = ''
                # check that we build the final image with the same intermediate image for
                # which the injected UKI was built by comparing the UKI cmdline with the repart output
@@ -194,6 +193,24 @@ in
                chmod +w ${config.image.repart.imageFileBasename}.raw
              '';

              # replace "TBD" with the original roothash values
              preInstall = ''
                mv -v repart-output{.json,_orig.json}

                jq --slurp --indent -1 \
                  '.[0] as $intermediate | .[1] as $final
                    | $intermediate | map(select(.roothash != null) | { "uuid":.uuid,"roothash":.roothash }) as $uuids
                    | $final + $uuids
                    | group_by(.uuid)
                    | map(add)
                    | sort_by(.offset)' \
                      ${config.system.build.intermediateImage}/repart-output.json \
                      repart-output_orig.json \
                  > repart-output.json

                rm -v repart-output_orig.json
              '';

              # the image will be self-contained so we can drop references
              # to the closure that was used to build it
              unsafeDiscardReferences.out = true;
+2 −4
Original line number Diff line number Diff line
@@ -318,14 +318,12 @@ in
          format
          (lib.mapAttrs (_n: v: { Partition = v.repartConfig; }) cfg.finalPartitions);

        partitionsJSON = pkgs.writeText "partitions.json" (builtins.toJSON cfg.finalPartitions);

        mkfsEnv = mkfsOptionsToEnv cfg.mkfsOptions;
      in
      pkgs.callPackage ./repart-image.nix {
        systemd = cfg.package;
        inherit (cfg) name version imageFileBasename compression split seed sectorSize;
        inherit fileSystems definitionsDirectory partitionsJSON mkfsEnv;
        inherit (cfg) name version imageFileBasename compression split seed sectorSize finalPartitions;
        inherit fileSystems definitionsDirectory mkfsEnv;
      };

    meta.maintainers = with lib.maintainers; [ nikstur willibutz ];