首页 > 解决方案 > Nix(OS):仅为一个包构建设置“permittedInsecurePackages”(在覆盖中?)

问题描述

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

也就是说,我想设置

permittedInsecurePackages = [
     "webkitgtk-2.4.11"
];

在叠加层中。我想在那里做,因为覆盖是设置我的爪子邮件配置;如果我没有安装 claws-mail(如果我将它放入 中可能会发生这种情况),我不想允许 webkitgtk ~/.config/nixpkgs/config.nix

有没有办法在叠加层中设置它?我尝试将其设置为 self.config。或 super.config.,但都不起作用。

标签: overlaynixnixos

解决方案


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

在这里要做的简单的事情是清除您传递给构建meta.knownVulnerabilities的副本。webkitgtkclaws-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在 a 中let(或者不将其引入覆盖评估的 attrset 中)仍然很重要。

也就是说,在叠加层中执行此操作可能如下所示:

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

推荐阅读