Cabal 安装标准内存不足

Cabal install criterion out of memory

我 运行 在一个有 768MB ram 和 512MB swap space 的容器上。我不能增加这两个。 cabal install criterion总是给

Failed during the building phase.
The exception was: ExitFailure (-9)
This may be due to an out-of-memory condition.

Compiling Criterion.Types 期间。有什么办法解决这个问题,还是我必须在没有标准的情况下凑合?

在 GHC 上设置 RTS 标志以限制其内存使用量 (--ghc-options="+RTS -M600M") 并避免 运行 并行执行多个作业 (-j1)。

回复@DavidAzar 对答案的评论:

@Li-yaoXia 的解决方案有效,但后来我遇到了更多问题。这些都是我在跟踪解决问题时的粗略笔记。所以可能会有更精简的解决方案。

好吧,实际上它编译了所有内容,但是 cabal --version 仍然说 2.4,而不是 3.4。也许它不在路径中?

Warning: could not create a symlink in /root/.cabal/bin for cabal because 
the file exists there already but is not managed by cabal. You can create a symlink for 
this executable manually if you wish. The executable file has been installed at /root/.cabal/bin/cabal

这里似乎有一个解决方案: 但是我必须弄清楚如何在重做 cabal 安装和重新编译过程之前删除现有的 symlink。

这里也有这个解决方案,我先试试: updating cabal-install, but version is not changed

  • 运行 unminimize 来自 bash,它将所有正常的东西安装到 ubuntu.

  • 首先,在/bin 中,创建一个名为/cabal-old 的文件夹,然后将cabal 可执行文件复制到cabal-old 文件夹中。然后从 /bin 文件夹中删除 cabal。

  • 然后创建一个指向新 cabal 可执行文件的新符号link:

    ln -s /root/.cabal/bin/cabal cabal

  • 这会在执行 cabal --version 时显示 cabal 3.4。

  • 接下来,安装git:apt-get install git

  • 然后进入plutus-pioneer-program/code/week01/文件夹,输入cabal build

  • 这会从 git 下载很多东西,然后失败。

    警告:请求的索引状态 2021-02-24T00:00:00Z 更新于 'hackage.haskell.org'!回到旧状态 (2021-02-23T23:53:53Z)。 正在解决依赖关系...阴谋集团:无法解决依赖关系: [__0] 尝试:Win32-network-0.1.0.0(用户目标) [__1] 正在尝试:base-4.12.0.0/installed-4.12.0.0(Win32 网络的依赖项) [__2]下一个目标:plutus-pioneer-program-week01(用户目标) [__2] 拒绝:plutus-pioneer-program-week01-0.1.0.0 (冲突:base==4.12.0.0/installed-4.12.0.0, plutus-pioneer-program-week01 =>base^>=4.14.1.0) [__2]失败(回跳,冲突集:base,plutus-pioneer-program-week01)

    在彻底搜索依赖关系树的其余部分后,这些是 我最难实现的目标:base, Win32-network,plutus-pioneer-program-week01

  • 我从 Whosebug 上的某个人那里得到了一个建议, Plutus-Pioneer 代码可能需要 ghc 8.10,我使用的是 8.6.5,所以下一步就是弄清楚如何更新它。

  • 在安装 ghc 8.10 之前,我显然需要安装 ghcup, 运行 这是非 root 用户?:

    curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org |嘘

  • 这开始了安装,但失败了,因为我没有安装 'make'。 运行 这个:

    apt-get 安装 make

  • 然后重新运行 curl 命令。 curl 安装程序输出显示正在安装 ghc 8.10,但完成后,ghc --version 仍然输出 8.6.5。另一个 symlink 问题?

  • 我在输出中发现了这个问题:

    为了运行 ghc 和 cabal,您需要调整您的 PATH 变量。 您可能希望在 shell 中获取 '/root/.ghcup/env' 这样做的配置(例如 ~/.bashrc).

  • 还可能需要弄清楚如何指定要使用的 ghc 版本。

  • 我需要更新 bin 文件夹中的 simlink 以获得正在使用的正确版本的 ghc,还有以下其他 links更新:

lrwxrwxrwx 1 root root   9 Mar 24  2020 ghc -> ghc-8.6.5
-rwxr-xr-x 1 root root 226 Mar 24  2020 ghc-8.6.5  
lrwxrwxrwx 1 root root  13 Mar 24  2020 ghc-pkg -> ghc-pkg-8.6.5
-rwxr-xr-x 1 root root 258 Mar 24  2020 ghc-pkg-8.6.5  
lrwxrwxrwx 1 root root  10 Mar 24  2020 ghci -> ghci-8.6.5
-rwxr-xr-x 1 root root  55 Mar 24  2020 ghci-8.6.5

首先,为 ghcup 创建了一个新的符号link:

ln -s /root/.ghcup/bin/ghcup ghcup

(虽然我不记得我需要ghcup干什么了。)

  • 接下来,更新 /bin 文件夹中上面列出的所有 3 个 symlinks 的 ghc symlinks:

    mv -T ghc ghc-旧-link ln -s /root/.ghcup/bin/ghc ghc

  • 这可以让更新版本的 ghc 显示在 bash shell.

  • 现在尝试构建,它下载并开始构建很多东西,但现在出现此错误:

    cabal:无法构建 cborg-0.2.4.0(这是由 plutus-pioneer-program-week01-0.1.0.0)。构建过程被终止 (i.e.SIGKILL)。 典型的原因是内存不足 可用(例如 OS 杀死了一个使用大量内存的进程)。

解决方法: Docker -> 首选项 -> 资源 -> 增加 RAM,并交换 space。在我的例子中,内存为 2-8GB,交换空间为 1 到 2GB space.

现在它为第 1 周构建 Plutus Pioneer 代码。