Nix (ОС): Устанавливать «allowInsecurePackages» только для одной сборки пакета (в оверлее?) - PullRequest
0 голосов
/ 01 декабря 2018

Я хотел бы применить точку конфигурации только для сборки, которую я определяю в оверлее в nix.

То есть я бы хотел установить

permittedInsecurePackages = [
     "webkitgtk-2.4.11"
];

в оверлееЯ хочу сделать это там, потому что оверлей должен настроить мою конфигурацию почты когтями;и я не хочу разрешать webkitgtk, если я не устанавливаю claws-mail (что могло бы произойти, если бы я поместил его в ~/.config/nixpkgs/config.nix).

Есть ли способ установить это в оверлее?Я попытался установить его в self.config.или super.config., но ни один из них не работает.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вы не можете локально переопределить конфигурацию, но вы можете помешать этой конфигурации помешать достижению цели, которую вы пытаетесь достичь.

Здесь проще всего очистить 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;
  };
}
0 голосов
/ 01 декабря 2018

Во-первых, позвольте мне прояснить несколько вещей, которые, надеюсь, помогут вам понять некоторые концепции NixOS и Nixpkgs.

Модули NixOS в основном связаны с конфигурацией системы, тогда как оверлеи - это всего лишь механизм внесения изменений.к пакету.Это отдельные функции двух отдельных компонентов (NixOS и Nixpkgs), которые распространяются вместе.

В результате NixOS загружает Nixpkgs при оценке.Это можно контролировать с помощью некоторых опций NixOS .Большинство из них просто передаются в функцию Nixpkgs (обычно обозначается import <nixpkgs>).

Это означает, что конфигурация NixOS контролирует аргумент config для Nixpkgs.Однако overlays - это просто еще один параметр функции Nixpkgs, который не влияет на Nixpkgs config.

Также обратите внимание, что self и super - это просто имена, которые обычно присваиваются параметрамфункция, которая определяет наложение.Это позиционные параметры, так что вы можете дать им разные имена, если вам нужно.Результатом оверлейной функции является набор атрибутов, содержащий атрибуты для добавления или обновления.self и super не имеют специального значения в качестве атрибутов в Nixpkgs.(Хотя вы скрывали пакет super )

Так что нет, оверлей не может установить элемент конфигурации Nixpkgs.Вместо этого вы можете захотеть написать модуль NixOS.Модули NixOS и конфигурация NixOS - это одно и то же.

Также обратите внимание, что NixOS (nixos-rebuild и т. Д.) Не будет читать ~/.config/nixpkgs/config.nix.Он имеет свой собственный по умолчанию .

...