在Red Hat上从源代码安装Haskell Platform 2014的官方方法是什么?

时间:2014-09-18 23:59:34

标签: haskell installation redhat rhel platform

我正在尝试从Red Hat Enterprise Linux 6.5上的源代码安装Haskell Platform 2014.2.0.0。我在两年前安装了Haskell Platform 2012.4.0.0和GHC 7.4.2,以及最近安装的来自JustHub的Haskell Platform 2013.2.0.0和GHC 7.6.3。

我已经从源代码构建了GHC 7.8.3,但它在测试套件中不断出现7次失败。我不知道这些测试失败是否无害。 (测试失败与我的问题无关,但后来可能会变得很重要。)

我解压缩2014.2.0.0的源码包,阅读README。它说,构建Haskell迭代的方法是使用shell脚本,该脚本被调用:

./ platform.sh $ PATH_TO_GHC_BINDIST_TARBALL

我没有GHC二进制分发tarball。据我所知,对于任何版本的Red Hat Enterprise Linux,GHC 7.8.3都没有二进制分发tarball。我有一个GHC 7.8.3。我如何告诉platform.sh - 或者其下面的任何内容 - 没有tarball,它应该只使用$ PATH中的内容?或者,如何打包我现有的GHC 7.8.3安装,以便platform.sh接受它?

构建的GHC没有'cabal'命令,因此platform.sh中的cabal命令回退到$ PATH,我可以将其配置为其他已安装的版本(2013.2 / 7.6.3或2012.4) /7.4.2)。它似乎没有什么区别:没有人认出'cabal --sandbox'。两者都导致抱怨我应该运行'cd hptool; cabal安装--only-dependencies',我已经完成了,反复。 platform.sh永远不会超过这一点。

如果我手动运行platform.sh中的命令,我会'cd hptool; cabal build',出错了:“cabal-1.16.0.2:首先运行'configure'命令。”但是hptool目录中没有'configure'命令。

我现在卡住了。如何在RHEL 6上构建Haskell Platform 2014?

2 个答案:

答案 0 :(得分:1)

您需要使用GHC来源制作自己的“绑定者”。 https://ghc.haskell.org/trac/ghc/wiki/MakingReleases

的路线

答案 1 :(得分:1)

我设法安装了Haskell平台并且功能齐全。我最终放弃了platform.sh,只是用手动cabal命令手动安装了Haskell Platform tarball中的所有软件包 - 以及它们的依赖项。随着破坏的platform.sh,我遇到了很多问题。

我记得的那些:

  • 如果您安装了Haskell Platform 2013或以前版本,那么platform.sh将永远不会成功。它想要一个识别“沙盒”的阴谋集团。选项,而cabal 1.18并不知道该选项。您必须安装比Haskell Platform 2013提供的更新的cabal。 (GHC 7.4或7.6似乎没问题。)

  • 我有一个现有的.cabal和.ghc目录,它有不兼容的版本和/或各种软件包的版本。我在测试时删除了两个目录。

  • cabal install --global的行为与默认的cabal安装--user不同。 .cabal包含了一些有用的东西,我做了cabal install cabal-install'。为了弄清楚新的cabal二进制文件的位置,我花了两三次尝试。

  • ghc和cabal选择.ghc和.cabal中的新库,但不是新的二进制文件。

  • GHC和cabal都不会默认安装--enable-shared,除非有什么需要它。在此之前我不得不重建所有内容 - 一直回到GHC 7.8.3本身 - 一旦发生这种情况,就会启用--enable-shared。

  • haddock与它所构建的GHC版本紧密地绑定在一起。我不得不重建它以获得--enable-documentation以适用于使用GHC 7.8.3构建的任何内容。

  • 测试包和文本包是如此紧密集成,如果你尝试安装文本--enable-tests'它们具有循环依赖性。即使在安装了最新版本的文本和测试包之后,cabal仍然无法运行文本测试套件,因此我放弃并安装了文本而未对其进行测试。

  • 我的默认环境包括' LC_ALL = C'。这会破坏cabal中的已知错误 - 显然是在所有版本中 - 破坏了一些包构建。为了解决这个问题,我不得不将其转移到' LC_ALL = en_US.utf8'。如果您有LC_ALL或任何其他语言环境变量(如LANG或LC_<其他>设置为C),我不知道受影响的包是否有效。

  • cabal install --global对于存储包的位置非常不一致。我们将单个包拆分为它们自己的子目录,然后在所有这些子目录中的已知位置构建符号链接树。所以ghc在它自己的子目录/usr/sup/ghc-7.8.3中; Haskell Platform位于另一个子目录/usr/sup/haskell-platform-2014.2.0.0中。我一直在每个' cabal安装上使用--prefix = / usr / sup / haskell-platform-2014.2.0.0'命令,但即使这样,一些库最终还是在/usr/sup/ghc-7.8.3。

  • 在/usr/sup/ghc-7.8.3/中,GHC和Haskell平台都有一个字典,其中包含了构建的内容和位置 - 可能是安装位置不一致的解决方法LIB / GHC-7.8.3 / package.conf.d / package.cache。如果那个包字典不是世界可读的,那么ghc会中断。它应该做的是查看实际的文件结构来查找内容。鉴于字典不可用时ghc中断,文件不应被称为“缓存”,因为缓存未命中不应导致灾难性故障。也许将其重命名为" package-mandatory-dictionary'?

最终,这一切都安装好了,但是我不得不想知道我在墙上撞到这么多头所造成的伤害。