From 5da32bceea58ff126326400fb129f33e17463d55 Mon Sep 17 00:00:00 2001 From: Ivan Malison Date: Mon, 30 Dec 2024 23:54:39 -0700 Subject: [PATCH] [NixOS] Move nvidia-container-toolkit overlay into its own file and disable --- nixos/nix.nix | 1 + nixos/nvidia-container-toolkit-overlay.nix | 127 +++++++++++++++++++++ nixos/overlay.nix | 125 -------------------- 3 files changed, 128 insertions(+), 125 deletions(-) create mode 100644 nixos/nvidia-container-toolkit-overlay.nix diff --git a/nixos/nix.nix b/nixos/nix.nix index 072a5b91..85a54ba6 100644 --- a/nixos/nix.nix +++ b/nixos/nix.nix @@ -45,6 +45,7 @@ }; nixpkgs.overlays = [ + # (import ./nvidia-container-toolkit-overlay.nix) (import ./runc-overlay.nix) (import ./overlay.nix) ] ++ (if config.imalison.nixOverlay.enable then [ inputs.nix.overlays.default ] else []); diff --git a/nixos/nvidia-container-toolkit-overlay.nix b/nixos/nvidia-container-toolkit-overlay.nix new file mode 100644 index 00000000..b9227f61 --- /dev/null +++ b/nixos/nvidia-container-toolkit-overlay.nix @@ -0,0 +1,127 @@ +final: prev: { + nvidia-container-toolkit = final.stdenv.mkDerivation { + pname = "nvidia-container-toolkit-debug"; + version = prev.nvidia-container-toolkit.version; + + # This is key: multiple outputs, so you can reference them later as: + # $out -> for main + # $tools -> for the 'tools' output in your new derivation + outputs = [ "out" "tools" ]; + + # No source required for a pure wrap + src = null; + dontUnpack = true; + dontPatchShell = true; + + buildInputs = [ final.strace ]; + + # Create wrapper scripts for each set of binaries + buildPhase = '' + # --- Wrap binaries from the main output of the original toolkit --- + mkdir -p wrapper-out + if [ -d "${prev.nvidia-container-toolkit}/bin" ]; then + for exe in $(ls ${prev.nvidia-container-toolkit}/bin); do + cat > wrapper-out/$exe <> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true + + # --- COMMAND INVOCATION LOG --- + echo "\$(date '+%Y-%m-%d %H:%M:%S') - Executing $exe with args: \$@" \ + >> /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true + + # --- Run the real tool, piping stdout+stderr to tee --- + ${prev.nvidia-container-toolkit}/bin/$exe "\$@" > \ + >(tee -a /var/log/nvidia-container-toolkit/$exe.stdout.log) \ + 2> >(tee -a /var/log/nvidia-container-toolkit/$exe.stderr.log >&2) + + exit_code=\$? + + # --- FINISHED LOG --- + echo "\$(date '+%Y-%m-%d %H:%M:%S') - Finished $exe with exit code: \$exit_code" >> \ + /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true + echo "\$(date '+%Y-%m-%d %H:%M:%S') - $exe finished" \ + >> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true + EOF + chmod +x wrapper-out/$exe + done + fi + + # --- Wrap binaries from the 'tools' output of the original toolkit --- + mkdir -p wrapper-tools + if [ -d "${prev.nvidia-container-toolkit.tools}/bin" ]; then + for exe in $(ls ${prev.nvidia-container-toolkit.tools}/bin); do + cat > wrapper-tools/$exe <> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true + + # --- COMMAND INVOCATION LOG --- + echo "\$(date '+%Y-%m-%d %H:%M:%S') - Executing $exe with args: \$@" \ + >> /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true + + debug_flag="$([[ $exe = "nvidia-cdi-hook" ]] && echo "--debug")" + + # --- Run the real tool, piping stdout+stderr to tee --- + ${prev.strace}/bin/strace -f -o /var/log/nvidia-container-toolkit/$exe.strace.log ${prev.nvidia-container-toolkit.tools}/bin/$exe $debug_flag "\$@" > \ + >(tee -a /var/log/nvidia-container-toolkit/$exe.stdout.log) \ + 2> >(tee -a /var/log/nvidia-container-toolkit/$exe.stderr.log >&2) + + exit_code=\$? + + # --- FINISHED LOG --- + echo "\$(date '+%Y-%m-%d %H:%M:%S') - Finished $exe with exit code: \$exit_code" >> \ + /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true + echo "\$(date '+%Y-%m-%d %H:%M:%S') - $exe finished" \ + >> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true + EOF + chmod +x wrapper-tools/$exe + done + fi + ''; + + installPhase = '' + # For the main output of our wrapper derivation + mkdir -p $out/bin + + if [ -d wrapper-out ]; then + cp wrapper-out/* $out/bin/ + fi + + # For the 'tools' output of our wrapper derivation + mkdir -p $tools/bin + + if [ -d wrapper-tools ]; then + cp wrapper-tools/* $tools/bin/ + fi + ''; + + # If you need runtime dependencies, inherit them from the original package + propagatedBuildInputs = prev.nvidia-container-toolkit.propagatedBuildInputs or []; + propagatedUserEnvPkgs = prev.nvidia-container-toolkit.propagatedUserEnvPkgs or []; + + meta = { + description = "Debug-wrapped NVIDIA Container Toolkit with separate tools output."; + homepage = prev.nvidia-container-toolkit.meta.homepage; + license = prev.nvidia-container-toolkit.meta.license; + maintainers = prev.nvidia-container-toolkit.meta.maintainers; + platforms = prev.nvidia-container-toolkit.meta.platforms; + }; + }; +} diff --git a/nixos/overlay.nix b/nixos/overlay.nix index d5dfee7c..405bb9ac 100644 --- a/nixos/overlay.nix +++ b/nixos/overlay.nix @@ -48,131 +48,6 @@ final: prev: # Optionally inherit original metadata meta = prev.runc.meta // {}; }; - nvidia-container-toolkit = final.stdenv.mkDerivation { - pname = "nvidia-container-toolkit-debug"; - version = prev.nvidia-container-toolkit.version; - - # This is key: multiple outputs, so you can reference them later as: - # $out -> for main - # $tools -> for the 'tools' output in your new derivation - outputs = [ "out" "tools" ]; - - # No source required for a pure wrap - src = null; - dontUnpack = true; - dontPatchShell = true; - - buildInputs = [ final.strace ]; - - # Create wrapper scripts for each set of binaries - buildPhase = '' - # --- Wrap binaries from the main output of the original toolkit --- - mkdir -p wrapper-out - if [ -d "${prev.nvidia-container-toolkit}/bin" ]; then - for exe in $(ls ${prev.nvidia-container-toolkit}/bin); do - cat > wrapper-out/$exe <> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true - - # --- COMMAND INVOCATION LOG --- - echo "\$(date '+%Y-%m-%d %H:%M:%S') - Executing $exe with args: \$@" \ - >> /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true - - # --- Run the real tool, piping stdout+stderr to tee --- - ${prev.nvidia-container-toolkit}/bin/$exe "\$@" > \ - >(tee -a /var/log/nvidia-container-toolkit/$exe.stdout.log) \ - 2> >(tee -a /var/log/nvidia-container-toolkit/$exe.stderr.log >&2) - - exit_code=\$? - - # --- FINISHED LOG --- - echo "\$(date '+%Y-%m-%d %H:%M:%S') - Finished $exe with exit code: \$exit_code" >> \ - /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true - echo "\$(date '+%Y-%m-%d %H:%M:%S') - $exe finished" \ - >> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true - EOF - chmod +x wrapper-out/$exe - done - fi - - # --- Wrap binaries from the 'tools' output of the original toolkit --- - mkdir -p wrapper-tools - if [ -d "${prev.nvidia-container-toolkit.tools}/bin" ]; then - for exe in $(ls ${prev.nvidia-container-toolkit.tools}/bin); do - cat > wrapper-tools/$exe <> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true - - # --- COMMAND INVOCATION LOG --- - echo "\$(date '+%Y-%m-%d %H:%M:%S') - Executing $exe with args: \$@" \ - >> /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true - - debug_flag="$([[ $exe = "nvidia-cdi-hook" ]] && echo "--debug")" - - # --- Run the real tool, piping stdout+stderr to tee --- - ${prev.strace}/bin/strace -f -o /var/log/nvidia-container-toolkit/$exe.strace.log ${prev.nvidia-container-toolkit.tools}/bin/$exe $debug_flag "\$@" > \ - >(tee -a /var/log/nvidia-container-toolkit/$exe.stdout.log) \ - 2> >(tee -a /var/log/nvidia-container-toolkit/$exe.stderr.log >&2) - - exit_code=\$? - - # --- FINISHED LOG --- - echo "\$(date '+%Y-%m-%d %H:%M:%S') - Finished $exe with exit code: \$exit_code" >> \ - /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true - echo "\$(date '+%Y-%m-%d %H:%M:%S') - $exe finished" \ - >> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true - EOF - chmod +x wrapper-tools/$exe - done - fi - ''; - - installPhase = '' - # For the main output of our wrapper derivation - mkdir -p $out/bin - - if [ -d wrapper-out ]; then - cp wrapper-out/* $out/bin/ - fi - - # For the 'tools' output of our wrapper derivation - mkdir -p $tools/bin - - if [ -d wrapper-tools ]; then - cp wrapper-tools/* $tools/bin/ - fi - ''; - - # If you need runtime dependencies, inherit them from the original package - propagatedBuildInputs = prev.nvidia-container-toolkit.propagatedBuildInputs or []; - propagatedUserEnvPkgs = prev.nvidia-container-toolkit.propagatedUserEnvPkgs or []; - - meta = { - description = "Debug-wrapped NVIDIA Container Toolkit with separate tools output."; - homepage = prev.nvidia-container-toolkit.meta.homepage; - license = prev.nvidia-container-toolkit.meta.license; - maintainers = prev.nvidia-container-toolkit.meta.maintainers; - platforms = prev.nvidia-container-toolkit.meta.platforms; - }; - }; rofi-systemd = prev.rofi-systemd.overrideAttrs (_: { src = prev.fetchFromGitHub {