Nix(OS):仅为一个包构建设置 "permittedInsecurePackages"(在覆盖层中?)
Nix(OS): Set "permittedInsecurePackages" only for one package build (in an overlay?)
我只想为我在 nix 的叠加层中定义的构建应用配置点。
也就是我要设置
permittedInsecurePackages = [
"webkitgtk-2.4.11"
];
在叠加层中。我想在那里做,因为覆盖是为了设置我的爪子邮件配置;如果我不安装 claws-mail,我不想允许 webkitgtk(如果我将它放入 ~/.config/nixpkgs/config.nix
,这可能会发生)。
有没有办法在叠加层中设置它?我尝试将其设置为 self.config。或 super.config.,但均无效。
首先,让我澄清一些事情,希望能帮助您理解一些 NixOS 和 Nixpkgs 概念。
NixOS 模块主要与系统配置有关,而覆盖主要只是一种对包集进行更改的机制。这些是一起分发的两个独立组件(NixOS 和 Nixpkgs)的独立功能。
NixOS 在评估时会加载 Nixpkgs。这可以用一些 NixOS options 来控制。其中大部分只是简单地传递给 Nixpkgs 函数(通常表示为 import <nixpkgs>
)。
这意味着 NixOS 配置控制 Nixpkgs 的 config
参数。但是,overlays
只是 Nixpkgs 函数的另一个参数,不会影响 Nixpkgs config
.
另请注意,self
和 super
只是通常为定义叠加层的函数的参数指定的名称。它们是位置参数,因此您可以根据需要给它们不同的名称。叠加函数的结果是包含要添加或更新的属性的属性集。 self
和 super
作为 Nixpkgs 中的属性没有特殊含义。 (虽然你确实隐藏了 super
package)
所以不,覆盖不能设置 Nixpkgs 配置项。相反,您可能想编写一个 NixOS 模块。 NixOS 模块和 NixOS 配置是一回事。
另请注意,NixOS(nixos-rebuild
等)不会读取 ~/.config/nixpkgs/config.nix
。它有自己的 default.
您不能在本地覆盖配置,但是您可以阻止该配置妨碍您试图实现的目标。
此处最简单的事情是清除传递给 claws-mail
构建的 webkitgtk
副本中的 meta.knownVulnerabilities
。
展示如何做到这一点 --
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.
,以指代手头软件包的 original/unmodified 版本;如果您不想要它,将 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;
};
}
我只想为我在 nix 的叠加层中定义的构建应用配置点。
也就是我要设置
permittedInsecurePackages = [
"webkitgtk-2.4.11"
];
在叠加层中。我想在那里做,因为覆盖是为了设置我的爪子邮件配置;如果我不安装 claws-mail,我不想允许 webkitgtk(如果我将它放入 ~/.config/nixpkgs/config.nix
,这可能会发生)。
有没有办法在叠加层中设置它?我尝试将其设置为 self.config。或 super.config.,但均无效。
首先,让我澄清一些事情,希望能帮助您理解一些 NixOS 和 Nixpkgs 概念。
NixOS 模块主要与系统配置有关,而覆盖主要只是一种对包集进行更改的机制。这些是一起分发的两个独立组件(NixOS 和 Nixpkgs)的独立功能。
NixOS 在评估时会加载 Nixpkgs。这可以用一些 NixOS options 来控制。其中大部分只是简单地传递给 Nixpkgs 函数(通常表示为 import <nixpkgs>
)。
这意味着 NixOS 配置控制 Nixpkgs 的 config
参数。但是,overlays
只是 Nixpkgs 函数的另一个参数,不会影响 Nixpkgs config
.
另请注意,self
和 super
只是通常为定义叠加层的函数的参数指定的名称。它们是位置参数,因此您可以根据需要给它们不同的名称。叠加函数的结果是包含要添加或更新的属性的属性集。 self
和 super
作为 Nixpkgs 中的属性没有特殊含义。 (虽然你确实隐藏了 super
package)
所以不,覆盖不能设置 Nixpkgs 配置项。相反,您可能想编写一个 NixOS 模块。 NixOS 模块和 NixOS 配置是一回事。
另请注意,NixOS(nixos-rebuild
等)不会读取 ~/.config/nixpkgs/config.nix
。它有自己的 default.
您不能在本地覆盖配置,但是您可以阻止该配置妨碍您试图实现的目标。
此处最简单的事情是清除传递给 claws-mail
构建的 webkitgtk
副本中的 meta.knownVulnerabilities
。
展示如何做到这一点 --
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.
,以指代手头软件包的 original/unmodified 版本;如果您不想要它,将 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;
};
}