diff --git a/nixos/tests/nix-ld.nix b/nixos/tests/nix-ld.nix index 8733f5b0c397..9b851f88617a 100644 --- a/nixos/tests/nix-ld.nix +++ b/nixos/tests/nix-ld.nix @@ -1,17 +1,39 @@ -import ./make-test-python.nix ({ lib, pkgs, ...} : +{ system ? builtins.currentSystem, + config ? {}, + pkgs ? import ../.. { inherit system config; } +}: +let + inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest; + shared = + { config, pkgs, ... }: + { + programs.nix-ld.enable = true; + environment.systemPackages = [ + (pkgs.runCommand "patched-hello" { } '' + install -D -m755 ${pkgs.hello}/bin/hello $out/bin/hello + patchelf $out/bin/hello --set-interpreter $(cat ${config.programs.nix-ld.package}/nix-support/ldpath) + '') + ]; + }; +in { - name = "nix-ld"; - nodes.machine = { pkgs, ... }: { - programs.nix-ld.enable = true; - environment.systemPackages = [ - (pkgs.runCommand "patched-hello" {} '' - install -D -m755 ${pkgs.hello}/bin/hello $out/bin/hello - patchelf $out/bin/hello --set-interpreter $(cat ${pkgs.nix-ld}/nix-support/ldpath) - '') - ]; + nix-ld = makeTest { + name = "nix-ld"; + nodes.machine = shared; + testScript = '' + start_all() + machine.succeed("hello") + ''; }; - testScript = '' - start_all() - machine.succeed("hello") - ''; -}) + nix-ld-rs = makeTest { + name = "nix-ld-rs"; + nodes.machine = { + imports = [ shared ]; + programs.nix-ld.package = pkgs.nix-ld-rs; + }; + testScript = '' + start_all() + machine.succeed("hello") + ''; + }; +} diff --git a/pkgs/by-name/ni/nix-ld-rs/package.nix b/pkgs/by-name/ni/nix-ld-rs/package.nix new file mode 100644 index 000000000000..d6514033741a --- /dev/null +++ b/pkgs/by-name/ni/nix-ld-rs/package.nix @@ -0,0 +1,54 @@ +{ + stdenv, + fetchFromGitHub, + nixosTests, + rustPlatform, + lib, +}: + +rustPlatform.buildRustPackage { + name = "nix-ld-rs"; + + src = fetchFromGitHub { + owner = "nix-community"; + repo = "nix-ld-rs"; + rev = "f7154a6aedba4917c8cc72b805b79444b5bfafca"; + sha256 = "sha256-tx6gO6NR4BnYVhoskyvQY9l6/8sK0HwoDHvsYcvIlgo="; + }; + + cargoHash = "sha256-4IDu5qAgF4Zq4GOsimuy8NiRCN9PXM+8oVzD2GO3QmM="; + + hardeningDisable = [ "stackprotector" ]; + + NIX_SYSTEM = stdenv.system; + RUSTC_BOOTSTRAP = "1"; + + preCheck = '' + export NIX_LD=${stdenv.cc.bintools.dynamicLinker} + ''; + + postInstall = '' + mkdir -p $out/libexec + ln -s $out/bin/nix-ld-rs $out/libexec/nix-ld-rs + ln -s $out/bin/nix-ld-rs $out/libexec/nix-ld + + mkdir -p $out/nix-support + + ldpath=/${stdenv.hostPlatform.libDir}/$(basename ${stdenv.cc.bintools.dynamicLinker}) + echo "$ldpath" > $out/nix-support/ldpath + mkdir -p $out/lib/tmpfiles.d/ + cat > $out/lib/tmpfiles.d/nix-ld.conf <