Nix(OS):仅为一个程序包构建设置“ permittedInsecurePackages”(在覆盖中?)

时间:2018-11-30 23:37:12

标签: overlay nix nixos

我只想为我在nix中的叠加层中定义的构建应用配置点。

也就是说,我要设置

permittedInsecurePackages = [
     "webkitgtk-2.4.11"
];

在叠加层中。我想在那做,因为覆盖层是用来设置我的爪子邮件配置的;而且如果我没有安装爪子邮件,我也不想允许使用webkitgtk(如果将其放入~/.config/nixpkgs/config.nix中,则可能会发生)。

是否可以在叠加层中进行设置?我尝试将其设置为self.config。或super.config。,但均不起作用。

2 个答案:

答案 0 :(得分:1)

您不能在本地覆盖配置,但是可以阻止该配置妨碍您要实现的目标。

在这里要做的一件简单的事情是清除传递给meta.knownVulnerabilities构建的webkitgtk副本中的claws-mail

展示如何完成-

let
  ignoringVulns = x: x // { meta = (x.meta // { knownVulnerabilities = []; }); };
  webkitGtkIgnoringVulns = pkgs.webkitgtk24x-gtk2.overrideAttrs ignoringVulns;
in
  pkgs.clawsMail.override { webkitgtk24x-gtk2 = webkitGtkIgnoringVulns; }

以上内容已在nix repl中进行了测试。在叠加层中,您可以使用pkgs.替换super.,以指代现有软件包的原始/未修改版本。如果您不希望将webkitGtkIgnoringVulns保留在let中(否则,请将其引入叠加层评估的attrset中)仍然很重要在任何其他范围内。

也就是说,在叠加层中执行此操作可能类似于:

self: super: let
  ignoringVulns = x: x // { meta = (x.meta // { knownVulnerabilities = []; }); };
in {
  clawsMail = super.clawsMail.override {
    webkitgtk24x-gtk2 = self.webkitgtk24x-gtk2.overrideAttrs ignoringVulns;
  };
}

答案 1 :(得分:0)

首先,让我简单说明几件事,希望它们可以帮助您了解一些NixOS和Nixpkgs概念。

NixOS模块主要与系统配置有关,而覆盖图主要只是用于更改软件包集的一种机制。这些是一起分布的两个独立组件(NixOS和Nixpkgs)的独立功能。

发生的事情是NixOS在评估时加载了Nixpkgs。可以用一些NixOS options来控制。其中大多数都简单地传递给Nixpkgs 函数(通常表示为import <nixpkgs>)。

这意味着NixOS配置由Nixpkgs的config参数控制。但是,overlays只是Nixpkgs函数的另一个参数,不会影响Nixpkgs config

还要注意,selfsuper只是通常给定义覆盖的函数的参数提供的名称。它们是位置参数,因此您可以根据需要为它们指定不同的名称。覆盖功能的结果是一个属性集,其中包含要添加或更新的属性。 selfsuper作为Nixpkgs中的属性没有特殊含义。 (尽管您确实隐藏了super package

因此,不能,叠加层无法设置Nixpkgs配置项。您可能想改为编写NixOS模块。 NixOS模块和NixOS配置是同一回事。

还要注意,NixOS(nixos-rebuild等)将不会读取~/.config/nixpkgs/config.nix。它有自己的default