nixos/repart-image: pass partition attrs to builder instead of JSON file (#345524)
This commit is contained in:
commit
29d56eea7e
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 ];
|
||||
|
Loading…
Reference in New Issue
Block a user