【问题标题】:Isolated temporary files in Nix derivationNix派生中的隔离临时文件
【发布时间】:2021-08-08 21:00:46
【问题描述】:

我没有找到任何关于在 Nix 派生中处理临时文件的信息。

我找到了$TMP$TMPDIR 环境变量,但它们都指向/tmp,这是系统全局的。

{
  pkgs ? import <nixpkgs> {}
}:
  pkgs.stdenv.mkDerivation {
    pname = "show-tmp"
    version = "0.1.0";
    src = ./.;
    configurePhase = ''
      echo "tmp = $tmp; TMP =  $TMP; TMPDIR = $TMPDIR"
    '';
    buildPhase = '':'';
    installPhase = '':'';        
  }

变量 $tmp 未在 mkDerivation 中定义。我会期待这样的事情,因为其他派生范围变量遵循小写样式,例如$out

/tmp 的问题很明显 - 它是全局目录。 我需要担心碰撞和清洁。

我的派生挂钩存档了一个大文件夹树。

【问题讨论】:

  • 通常情况下,写入/tmp 的任何内容都将使用mktemp 之类的内容,它将为您创建唯一的文件名。您不只是创建$TMP/foo 并希望获得最好的结果。

标签: nix nixos nixpkgs


【解决方案1】:

如果您使用的是 Linux,请不要担心。 Nix 沙箱将为您的构建提供自己的空/tmp。推导完成后将其删除。

在 macOS 上,$TMP$TMPDIR 已得到处理,但 /tmp 是一个潜在问题。

Linux:https://github.com/NixOS/nix/blob/340f831ebe9d74659b84667b96251b7ab0edd09d/src/libstore/build/local-derivation-goal.cc#L609-L614

达尔文:

nix-build --expr 'with import <nixpkgs> {}; runCommand "hi" {} "echo a > /tmp/a; ls -al /tmp; sleep 1;"'
ls -al /private/tmp/
...
-rw-r--r--  1 nixbld1  wheel    2 May 19 12:49 a
...

这是在 2020 年初我安装 Nix 的 macOS 机器上。

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2023-04-02
    • 2023-03-19
    • 2020-08-27
    • 2015-02-28
    相关资源
    最近更新 更多