From 37023bfde7e35079c93dcb65e85e99be18efefae Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Sat, 1 Jul 2023 17:53:11 -0700 Subject: [PATCH 1/2] minimal-bootstrap: use recursive FOD to make nix unpack bootstrap sources --- .../stage0-posix/bootstrap-sources.nix | 21 +++----- .../stage0-posix/make-bootstrap-sources.nix | 53 +++++++------------ 2 files changed, 25 insertions(+), 49 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix index 65b052c44569..9d4abdf2e51b 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix @@ -29,7 +29,7 @@ rec { Run the following command: ``` - nix hash file $(nix build --print-out-paths -f '' make-minimal-bootstrap-sources) + nix hash path $(nix build --print-out-paths -f '' make-minimal-bootstrap-sources) ``` # Why do we need this `.nar` archive? @@ -71,11 +71,11 @@ rec { requirements above apply to `minimal-bootstrap-sources`. */ minimal-bootstrap-sources = derivation { - name = "${name}.nar.xz"; + inherit name; system = builtins.currentSystem; - outputHashMode = "flat"; + outputHashMode = "recursive"; inherit outputHashAlgo; - outputHash = "sha256-ig988BiRTz92hhZZgKQW1tVPoV4aQ2D69Cq3wHvVgHg="; + outputHash = "sha256-FpMp7z+B3cR3LkQ+PooH/b1/NlxH8NHVJNWifaPWt4U="; # This builder always fails, but fortunately Nix will print the # "builder", which is really the error message that we want the @@ -85,22 +85,13 @@ rec { # # Neither your store nor your substituters seems to have: # - # ${name}.nar.xz + # /nix/store/________________________________-${name} # - # Please obtain or create this file, give it exactly the name - # shown above, and then run the following command: - # - # nix-store --add-fixed ${outputHashAlgo} ${name}.nar.xz - # - # You can create this file from an already-bootstrapped nixpkgs + # You can create this path from an already-bootstrapped nixpkgs # using the following command: # # nix-build '' -A make-minimal-bootstrap-sources # - # Or, if you prefer, you can create this file using only `git`, - # `nix`, and `xz`. For the commands needed in order to do this, - # see `make-bootstrap-sources.nix`. - # ''; }; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix index 8951cc9ddbc4..047c7740315a 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix @@ -8,44 +8,31 @@ # # To build: # -# nix-build '' -o sources.nar.xz -A make-minimal-bootstrap-sources +# nix-build '' -A make-minimal-bootstrap-sources # { lib , fetchFromGitHub -, runCommand -, nix -, xz }: -let +fetchFromGitHub { inherit (import ./bootstrap-sources.nix { }) name rev; + owner = "oriansj"; + repo = "stage0-posix"; + sha256 = "sha256-FpMp7z+B3cR3LkQ+PooH/b1/NlxH8NHVJNWifaPWt4U="; + fetchSubmodules = true; + postFetch = '' + # Seed binaries will be fetched separately + echo "Removing seed binaries" + rm -rf $out/bootstrap-seeds/* - src = fetchFromGitHub { - owner = "oriansj"; - repo = "stage0-posix"; - inherit rev; - sha256 = "sha256-FpMp7z+B3cR3LkQ+PooH/b1/NlxH8NHVJNWifaPWt4U="; - fetchSubmodules = true; - postFetch = '' - # Seed binaries will be fetched separately - echo "Removing seed binaries" - rm -rf $out/bootstrap-seeds/* - - # Remove vendored/duplicate M2libc's - echo "Removing duplicate M2libc" - rm -rf \ - $out/M2-Mesoplanet/M2libc \ - $out/M2-Planet/M2libc \ - $out/mescc-tools/M2libc \ - $out/mescc-tools-extra/M2libc - ''; - }; - -in -runCommand "${name}.nar.xz" { - nativeBuildInputs = [ nix xz ]; - - passthru = { inherit src; }; + # Remove vendored/duplicate M2libc's + echo "Removing duplicate M2libc" + rm -rf \ + $out/M2-Mesoplanet/M2libc \ + $out/M2-Planet/M2libc \ + $out/mescc-tools/M2libc \ + $out/mescc-tools-extra/M2libc + ''; meta = with lib; { description = "Packaged sources for the first bootstrapping stage"; @@ -54,6 +41,4 @@ runCommand "${name}.nar.xz" { maintainers = teams.minimal-bootstrap.members; platforms = platforms.all; }; -} '' - nix-store --dump ${src} | xz -c > $out -'' +} From c69282508c8788a41fddb3fd2e774fd0f734a8c5 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Tue, 11 Jul 2023 17:38:54 -0400 Subject: [PATCH 2/2] Address my comments 1. Advice for manually assembling the bootstrap sources is restored. 2. Hash is no longer duplicated 3. More informative store path using `builtins.placeholder` is provided. --- .../stage0-posix/bootstrap-sources.nix | 14 +++++++++++--- .../stage0-posix/make-bootstrap-sources.nix | 9 +++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix index 9d4abdf2e51b..82ee4d12386e 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix @@ -7,6 +7,7 @@ rec { version = "unstable-2023-05-02"; rev = "3189b5f325b7ef8b88e3edec7c1cde4fce73c76c"; outputHashAlgo = "sha256"; + outputHash = "sha256-FpMp7z+B3cR3LkQ+PooH/b1/NlxH8NHVJNWifaPWt4U="; # This 256 byte seed is the only pre-compiled binary in the bootstrap chain. hex0-seed = import { @@ -74,8 +75,7 @@ rec { inherit name; system = builtins.currentSystem; outputHashMode = "recursive"; - inherit outputHashAlgo; - outputHash = "sha256-FpMp7z+B3cR3LkQ+PooH/b1/NlxH8NHVJNWifaPWt4U="; + inherit outputHashAlgo outputHash; # This builder always fails, but fortunately Nix will print the # "builder", which is really the error message that we want the @@ -85,13 +85,21 @@ rec { # # Neither your store nor your substituters seems to have: # - # /nix/store/________________________________-${name} + # ${builtins.placeholder "out"} # # You can create this path from an already-bootstrapped nixpkgs # using the following command: # # nix-build '' -A make-minimal-bootstrap-sources # + # Or, if you prefer, you can create this file using only `git`, + # `nix`, and `xz`. For the commands needed in order to do this, + # see `make-bootstrap-sources.nix`. Once you have the manual + # result, do: + # + # nix-store --add-fixed --recursive ${outputHashAlgo} ./${name} + # + # to add it to your store. ''; }; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix index 047c7740315a..2675d055aec6 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix @@ -14,11 +14,16 @@ { lib , fetchFromGitHub }: + +let + expected = import ./bootstrap-sources.nix { }; +in + fetchFromGitHub { - inherit (import ./bootstrap-sources.nix { }) name rev; + inherit (expected) name rev; owner = "oriansj"; repo = "stage0-posix"; - sha256 = "sha256-FpMp7z+B3cR3LkQ+PooH/b1/NlxH8NHVJNWifaPWt4U="; + sha256 = expected.outputHash; fetchSubmodules = true; postFetch = '' # Seed binaries will be fetched separately