Деривация Nix для объединения нескольких программ - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь написать деривацию, которая установит несколько исполняемых файлов.Я могу сделать это довольно легко с помощью symlinkJoin

{pgm-a, pgm-b, symlinkJoin}: symlinkJoin {
  name = "pgm-env";
  paths = [pgm-a,pgm-b]; }

Однако, если pgm-a или pgm-b уже установлены, я получаю ошибку, связанную с конфликтующими пакетами ...

...'<pgm-a>/bin/pgm-a' and '<pgm-env>/bin/pgm-a' have the same priority 5; use 'nix-env --set-flag priority NUMBER INSTALLED_PKGNAME' ...

Есть ли способ сделать набор исполняемых файлов доступным в среде, но добавить в среду только то, что было нужно (или иным образом обойти эту ошибку)?

Некоторые сведения: я начал курировать частный репозиторий длямоя лабораторияМы настраиваем виртуальные сети, устанавливаем некоторое программное обеспечение, проводим некоторые тесты, промываем и повторяем.Никто, кроме меня, не является пользователем Nix, поэтому я хочу, чтобы часть nix была как можно более низкой - я не хочу, чтобы пользователь устанавливал флаг приоритета, и при этом я не хочу, чтобы он использовал nix-shell.Все они привыкли делать apt-get install ..., поэтому я планирую сделать так, чтобы вместо них они выполняли nix-env -i и предоставляли пакеты типа ourExperiment-x, которые в большинстве случаев позволяют им правильно настроить виртуальные машины.

1 Ответ

1 голос
/ 26 сентября 2019

Да, вы можете установить приоритет пакетов при его прямом объявлении следующим образом:

{pgm-a, pgm-b, symlinkJoin}: symlinkJoin {
  name = "pgm-env";
  paths = [pgm-a,pgm-b];
  meta.priority = 10;
}

Приоритет по умолчанию - 5, и более низкие приоритеты получают приоритет над более высокими, поэтому, установив его на 10,файлы этого деривации будут использоваться только как запасной вариант.

...