From e2d6b08c5a749cf4e1a448c2bf524a7dbc7ce630 Mon Sep 17 00:00:00 2001 From: clerie Date: Tue, 27 Jun 2023 18:09:35 +0200 Subject: [PATCH] Bootstrap busybox from binaries --- .gitignore | 1 + busybox.nix | 29 +++++++++++++++++++++++++++++ fetchurl.nix | 21 +++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 .gitignore create mode 100644 busybox.nix create mode 100644 fetchurl.nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2be92b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result diff --git a/busybox.nix b/busybox.nix new file mode 100644 index 0000000..b1e4aa9 --- /dev/null +++ b/busybox.nix @@ -0,0 +1,29 @@ +let + busybox = import ./fetchurl.nix { + url = "https://www.busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox"; + outputHash = "sha256-mVOoYPn3r9NYiZjQf5AF2p7hXy1Q4kN5RSscc/PGpiY="; + executable = true; + }; + busybox_ash = import ./fetchurl.nix { + url = "https://www.busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox_ASH"; + outputHash = "sha256-cgXsXhZxOE62NM2uYD4tkw4IA6vsiwolJjhw7zTyiIQ="; + executable = true; + }; + busybox_cp = import ./fetchurl.nix { + url = "https://www.busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox_CP"; + outputHash = "sha256-SohMSgXijkdN8Y7LE522obQ0QUAs8xBEQl+p0w8iAVc="; + executable = true; + }; + busybox_mkdir = import ./fetchurl.nix { + url = "https://www.busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox_MKDIR"; + outputHash = "sha256-knwWrnrCqxv52cM78VW/00Zqju6YI0+kXo/ZPLzJb18="; + executable = true; + }; +in { + busybox = builtins.derivation { + system = "x86_64-linux"; + name = "busybox"; + builder = busybox_ash; + args = [ "-c" "${busybox_mkdir} $out; ${busybox_cp} ${busybox} $out/busybox" ]; + }; +} diff --git a/fetchurl.nix b/fetchurl.nix new file mode 100644 index 0000000..83ccfeb --- /dev/null +++ b/fetchurl.nix @@ -0,0 +1,21 @@ +{ url +, outputHash +, executable ? false +, unpack ? false +, name ? baseNameOf (toString url) +}: + +derivation ({ + builder = "builtin:fetchurl"; + outputHashMode = "recursive"; + + inherit name url executable unpack outputHash; + + outputHashAlgo = if outputHash == "" then "sha256" else ""; + + system = "builtin"; + + # No need to double the amount of network traffic + preferLocalBuild = true; + +})