ghc-cabal: нет такой ошибки файла или каталога при создании примера стека Haskell в NixOS

A) Я пытаюсь создать проект Haskell i) со стеком, ii) на NixOS (channels / nixos-18.03). Следуя примеру HelloWorld в руководстве пользователя, чтобы построить проект, я получаю ошибку ghc-cabal: No such file or directory.

$ stack new helloworld new-template
$ cd helloworld
$ sudo stack build
...
Running /run/current-system/sw/bin/make install in directory /root/.stack/programs/x86_64-linux/ghc-8.6.4.temp/ghc-8.6.4/ exited with ExitFailure 2
...
utils/ghc-cabal/dist-install/build/tmp/ghc-cabal-bindist: line 3: /root/.stack/programs/x86_64-linux/ghc-8.6.4.temp/ghc-8.6.4/utils/ghc-cabal/dist-install/build/tmp/ghc-cabal: No such file or directory
make[1]: *** [ghc.mk:990: install_packages] Error 127
make: *** [Makefile:51: install] Error 2

Error: Error encountered while installing GHC with
         make install
         run in /root/.stack/programs/x86_64-linux/ghc-8.6.4.temp/ghc-8.6.4/

       The following directories may now contain files, but won't be used by stack:
         - /root/.stack/programs/x86_64-linux/ghc-8.6.4.temp/
         - /root/.stack/programs/x86_64-linux/ghc-8.6.4/

Б) Я итеративно создал свой /etc/nixos/configuration.nix файл, чтобы он выглядел так. И в результирующей системе действительно нет ghc-cabal двоичного файла. Есть cabal, но нет ghc-cabal.

  environment.systemPackages = with pkgs; [
    wget vim emacs
    pkgs.firefoxWrapper pkgs.chromium

    stack
    haskellPackages.ghc
    haskellPackages.cabal-install
    haskellPackages.cabal2nix
    haskellPackages.hdevtools

    tree gnumake which binutils gcc clang coreutils gnutar
    tmux silver-searcher gitAndTools.gitFull
  ];

C) Я также выполнил шаги из Nix Integration раздел. Но безрезультатно.

Какой пакет устанавливает ghc-cabal? Есть ли несоответствие между stack и haskellPackages.cabal-install? Что мне не хватает?

ИЗМЕНИТЬ

Я немного покопался и наткнулся на несколько полезных ресурсов. В частности, эта статья указывает, что моя проблема могла быть вызвана неразрешенной динамической библиотекой.

Действительно, при запросе загруженных библиотек для этого двоичного файла я получаю результат ниже.

$ ldd ~/.stack/programs/x86_64-linux/ghc-8.6.4.temp/ghc-8.6.4/utils/ghc-cabal/dist-install/build/tmp/ghc-cabal
    linux-vdso.so.1 (0x00007fff0ab01000)
    libm.so.6 => /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib/libm.so.6 (0x00007fe82c07f000)
    libHSCabal-2.4.0.1-ghc8.6.4.so => not found
    libHSprocess-1.6.5.0-ghc8.6.4.so => not found
    libHSpretty-1.1.3.6-ghc8.6.4.so => not found
    libHSparsec-3.1.13.0-ghc8.6.4.so => not found
    libHStext-1.2.3.1-ghc8.6.4.so => not found
    libHSmtl-2.2.2-ghc8.6.4.so => not found
    libHStransformers-0.5.6.2-ghc8.6.4.so => not found
    libHSdirectory-1.3.3.0-ghc8.6.4.so => not found
    libHSunix-2.7.2.2-ghc8.6.4.so => not found
    libHStime-1.8.0.2-ghc8.6.4.so => not found
    libHSfilepath-1.4.2.1-ghc8.6.4.so => not found
    libHSbinary-0.8.6.0-ghc8.6.4.so => not found
    libHScontainers-0.6.0.1-ghc8.6.4.so => not found
    libHSbytestring-0.10.8.2-ghc8.6.4.so => not found
    libHSdeepseq-1.4.4.0-ghc8.6.4.so => not found
    libHSarray-0.5.3.0-ghc8.6.4.so => not found
    libHSbase-4.12.0.0-ghc8.6.4.so => not found
    libHSinteger-gmp-1.0.2.0-ghc8.6.4.so => not found
    libHSghc-prim-0.5.3-ghc8.6.4.so => not found
    libHSrts-ghc8.6.4.so => not found
    libffi.so.7 => not found
    librt.so.1 => /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib/librt.so.1 (0x00007fe82c06d000)
    libutil.so.1 => /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib/libutil.so.1 (0x00007fe82c068000)
    libdl.so.2 => /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib/libdl.so.2 (0x00007fe82c063000)
    libpthread.so.0 => /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib/libpthread.so.0 (0x00007fe82c042000)
    libgmp.so.10 => not found
    libc.so.6 => /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib/libc.so.6 (0x00007fe82be8a000)
    /lib64/ld-linux-x86-64.so.2 => /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib64/ld-linux-x86-64.so.2 (0x00007fe82c219000)

Я попытался разрешить недостающие библиотеки, добавив haskellPackages.stdio и haskellPackages.stdf в configuration.nix. Но из-за этого возникают дальнейшие ошибки восходящего потока (например, я не могу добавить aeson в качестве environment.systemPackages зависимости). Так что у меня еще нет правильного микса.

CallStack (from HasCallStack):
  die', called at libraries/Cabal/Cabal/Distribution/Simple/Configure.hs:950:20 in Cabal-2.4.0.1:Distribution.Simple.Configure
  configureFinalizedPackage, called at libraries/Cabal/Cabal/Distribution/Simple/Configure.hs:460:12 in Cabal-2.4.0.1:Distribution.Simple.Configure
  configure, called at libraries/Cabal/Cabal/Distribution/Simple.hs:596:20 in Cabal-2.4.0.1:Distribution.Simple
  confHook, called at libraries/Cabal/Cabal/Distribution/Simple/UserHooks.hs:67:5 in Cabal-2.4.0.1:Distribution.Simple.UserHooks
  configureAction, called at libraries/Cabal/Cabal/Distribution/Simple.hs:178:19 in Cabal-2.4.0.1:Distribution.Simple
  defaultMainHelper, called at libraries/Cabal/Cabal/Distribution/Simple.hs:115:27 in Cabal-2.4.0.1:Distribution.Simple
  defaultMain, called at Setup.hs:2:8 in main:Main
Setup: Encountered missing dependencies:
aeson ==0.8.*, base ==4.7.*, binary ==0.7.*, text ==1.1.*

person Nutritioustim    schedule 13.03.2019    source источник
comment
Почему вы используете sudo для запуска stack build?   -  person Joseph Sible-Reinstate Monica    schedule 13.03.2019
comment
@JosephSible Такая же ошибка возникает с без sudo. Я попытался с sudo проверить, не в этом ли проблема.   -  person Nutritioustim    schedule 13.03.2019
comment
Вы пробовали stack build --nix?   -  person Chris Stryczynski    schedule 21.03.2019
comment
Кажется, упоминается об этой проблеме с github: github.com/commercialhaskell/stack/issues/4196   -  person Chris Stryczynski    schedule 21.03.2019
comment
@ChrisStryczynski Бег stack build --nix дает мне error: attribute 'ghc864' missing, at (string):1:43. Так что спасибо, что указали на нашу проблему с GH. Я добавил к этому вопросу, добавив эту ветку в кучу. Как указано выше, я попытался вручную добавить недостающие библиотеки, но получил больше недостающих ошибок зависимостей (которые я не могу добавить). Так что, возможно, у разработчиков есть больше идей.   -  person Nutritioustim    schedule 22.03.2019
comment
stackoverflow. com / questions / 47916591 / тоже может быть похожей проблемой   -  person Chris Stryczynski    schedule 22.03.2019


Ответы (2)


ghc-cabal - это артефакт в сборке ghc, включенный в бинарные дистрибутивы ghc:

$ ls -l  ~/.stack/programs/x86_64-linux/ghc-tinfo6-8.6.3.tar.xz
-rw-rw-r--. 1 user group 182356948 Dec 25 15:11 ghc-tinfo6-8.6.3.tar.xz
$ tar tvf ~/.stack/programs/x86_64-linux/ghc-tinfo6-8.6.3.tar.xz | grep tmp/ghc-cabal
-rwxr-xr-x ghc/ghc      225936 2018-12-08 00:03 ghc-8.6.3/utils/ghc-cabal/dist-install/build/tmp/ghc-cabal
-rwxr-xr-x ghc/ghc         858 2018-12-08 00:03 ghc-8.6.3/utils/ghc-cabal/dist-install/build/tmp/ghc-cabal-bindist
person Jens Petersen    schedule 21.03.2019
comment
Да согласен. Я думаю, что меня интересует, почему включение stack в environment.systemPackages не удаляет все необходимые зависимости, включая ghc. Я попытался явно включить ghc и получил ту же ошибку. - person Nutritioustim; 22.03.2019

Я решил это с помощью Кирилла Заборского в commercialhaskell/stack issues thread. Причиной ошибки (в stack new и stack build) была старая версия стека. В частности, у моего локального пользователя был более старый стек (1.6.5), чем у root (1.9.3).

Версия 1.6.5 использует Cabal-2.0, и с тех пор новые функции были представлены Cabal (бывший base-noprelude) с использованием ведущих запятых, реализованных в haskell / cabal # 4953, который поставляется с 2.2. Таким образом, Stack не может анализировать файлы Кабала с использованием новых функций формата.

Подробности см. В ветке commercialhaskell/stack проблем. И обновление стека моего локального пользователя (nix-env --upgrade stack) устранило проблему.

person Nutritioustim    schedule 26.03.2019