4

我安装了一个带有前缀的自定义 Haskell 工具链$HOME/usr,因此编译器位于$HOME/usr/bin/ghc其中,文档位于$HOME/usr/share/doc/ghc/.... 工具链由ghc安装、cabal安装和您需要的所有库组成。我$PATH以某种方式设置,所有这些程序都在其中。我的系统上没有其他这些工具的安装。

现在我尝试安装其他一些库。但是当 cabal 尝试安装文档时,我总是遇到同样的错误:

~$ cabal install --global 二进制
解决依赖关系...
配置二进制 0.5.0.2...
预处理库 binary-0.5.0.2...
构建二进制 0.5.0.2...
 ...剪断...
正在注册 binary-0.5.0.2...
阴谋集团:/usr/local/share/doc:权限被拒绝

我如何告诉 cabal 文档应该放在哪里?我不想在 shell 中一次又一次地提供这些信息,所以最好是一个配置文件。我想在我的 home 树中拥有所有与 haskell 相关的东西,以避免使用错误的命令破坏我的系统。

4

3 回答 3

9

为什么要使用“--global”安装?默认情况下,这会将所有内容放在 /usr/local/ 中。如果您执行标准的每用户安装,文档将安装到您的主目录中,并且应该可以正常工作。

话虽如此,这可以通过文件进行配置。cabal 配置文件通常位于~/.cabal/config/. 这是我的相关部分:

install-dirs global
  -- prefix: /usr/local
  -- bindir: $prefix/bin
  -- libdir: $prefix/lib
  -- libsubdir: $pkgid/$compiler
  -- libexecdir: $prefix/libexec
  -- datadir: $prefix/share
  -- datasubdir: $pkgid
  -- docdir: $datadir/doc/$pkgid
  -- htmldir: $docdir/html
  -- haddockdir: $htmldir

您可以进行任何您喜欢的更改,只需确保取消注释这些行。还有一个“install-dirs user”部分,用于按用户安装。

于 2011-04-29T13:43:44.593 回答
2

我同意海报。为什么没有关于如何执行 cabal install package --global 在需要权限时提示输入 sudo 的明确文档?执行 sudo cabal install package 是个坏主意,因为那时您是以 root 身份构建包。而且您必须允许互联网连接写入 root 拥有的文件(您必须填充 /root/.cabal 或类似的东西)。

这是一个想要这样做的好理由:如果我通过我的 linux 包管理器安装 ghc 和 haskell 平台(这是有充分理由的;),那么如果我执行 cabal install package 它不会识别那些全球公认。

于 2011-05-14T01:51:07.123 回答
1

好吧,实际上有人发布了一个(n 几乎令人讨厌的)详细描述如何进行全局安装(使用 --global 或 install-dirs global)而不会遇到权限错误。诀窍是在 cabal 配置文件中使用 root-cmd sudo。见, http://jdgallag.wordpress.com/2011/05/14/cabal-install-to-global-using-sudo-but-do-not-build-as-root/

于 2011-05-23T04:18:46.150 回答