Nix Hydra выдает ошибки при импорте с помощью ‹symbol›, где символ не ‹nixpkgs›

Есть кое-что, что мне не совсем понятно по гидре. Следующий набор заданий:

{ nixpkgs ? import <nixpkgs>
          { config.allowUnfree = true;
            config.allowBroken = true;
          }
, my_package  ? path/to/package/default.nix ## working expr
}:
let
  jobs = {
    jobA = import ../path/to/jobA/default.nix {inherit my_package;};
  };
in
  jobs

с 2 входами сборки:

  1. ciSrc
  2. nixpkgs

оценивает без ошибок, а затем строится.

НО, когда я меняю рабочее выражение на:

my_package  ? import <my_package> ## problematic expr

и добавьте третий вход для сборки:

  1. my_package, локальный путь, путь / к / пакету / default.nix

Я получаю следующую ошибку:

hydra-eval-jobs returned exit code 1:
error: undefined variable 'foo' at /nix/store/somehash-my_package/.../default.nix:61:11
(use '--show-trace' to show detailed location information)

Почему я это получаю? что мне здесь не хватает?

Мой NIX_PATH содержит как <nixpkgs>, который работает, так и <my_package>, который не работает. Это единственное изменение, которое я сделал, вызывая ошибку.

кстати, обе версии созданы с помощью nix-build, как рекомендовано hydra-manual на той же машиной и тем же пользователем, что и гидра.

может кто-нибудь пролить свет на это?


person user2597336    schedule 23.11.2017    source источник


Ответы (1)


Я сомневаюсь, что сообщение об ошибке undefined variable напрямую вызвано заменой входов сборки. Более вероятно, что проблема таилась какое-то время, но никогда не срабатывала, и такая замена входов вызвала ее всплытие. В этом случае невозможно сказать, что вызывает проблему, поскольку вы удалили всю необходимую информацию. Чтобы получить лучшую помощь в будущем, я предлагаю вам опубликовать минимальный полный пример кода, который сталкивается с этой проблемой. То, что вы опубликовали, действительно минимально, но неполно (проблема, похоже, связана с package/default.nix, который вы не включили), а также не похож на код, который сталкивается с этой проблемой (на основе таких вещей, как somehash, path/to/package, и т.д. Я полагаю, что запуск этого кода сначала приведет к синтаксической ошибке).

Все, что мы знаем, это то, что переменная использовалась без сопутствующей привязки. В вашем сообщении об ошибке указано, что переменная называется foo, но я предполагаю, что это не настоящее имя. Учитывая эту скудную информацию, я предполагаю, что проблема в вашем package/default.nix файле.

При работе с путями в Nix следует иметь в виду несколько ошибок:

  • Значения пути, используемые производными (например, /tmp/project/foo.nix), будут скопированы в хранилище Nix, и эти значения (например, /nix/store/...-foo.nix) будут использоваться вместо исходного пути. Это может нарушить относительные пути, например если foo.nix ссылается на ./bar.nix, то последний преобразуется в /nix/store/bar.nix, которого не существует. Этим можно управлять, добавив каталог в магазин, например "$ {/ tmp / project} /foo.nix".
  • Строковые значения, такие как "/tmp/project/foo.nix", не вызывают копирование вещей в магазин.
  • При вычислениях легко превратить пути в строки, но трудно сохранить их как пути. Один полезный трюк - использовать + с путем в качестве первого аргумента, например. /tmp + "/project" создаст путь /tmp/project. Мы можем использовать это с "/..", чтобы подняться на уровень выше. В крайнем случае мы можем преобразовать строку, содержащую абсолютный путь, в значение пути, выполнив, например, with { myString = "/foo/bar"; }; /tmp + "/..${myString}", который даст путь /tmp/../foo/bar, который разрешается в /foo/bar.
  • Когда изменяемый локальный путь вставляется в хранилище Nix, это только неизменяемый «снимок». Если содержимое будет изменено позже, может быть немного непредсказуемо, будет ли использоваться старый кэшированный снимок или будет создан новый снимок. По этой причине важно смотреть на пути, указанные в сообщениях об ошибках, например обратите внимание на /nix/store/...-project/foo.nix, а не на /tmp/foo.nix, поскольку они могут не содержать одно и то же.
person Warbo    schedule 21.05.2018