我安装了一个带有前缀$HOME/usr
的自定义Haskell工具链,因此编译器位于$HOME/usr/bin/ghc
和$HOME/usr/share/doc/ghc/...
中的文档中。工具链包含ghc
安装,cabal
安装以及您需要的所有库。我以某种方式设置$PATH
,所有这些程序都在其中。我的系统上没有其他这些工具的安装。
现在我尝试安装其他一些库。但当cabal尝试安装文档时,我总是遇到同样的错误:
~$ cabal install --global binary Resolving dependencies... Configuring binary-0.5.0.2... Preprocessing library binary-0.5.0.2... Building binary-0.5.0.2... ... snip ... Registering binary-0.5.0.2... cabal: /usr/local/share/doc: permission denied
如何告诉cabal文档应该存在的位置?我不想在shell中一次又一次地提供这些信息,所以最好的是配置文件。我希望在我的主页树中包含所有与haskell相关的东西,以避免用错误的命令破坏我的系统。
答案 0 :(得分: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用户”部分,用于每个用户的安装。
答案 1 :(得分:2)
我同意这张海报。为什么没有明确的文件说明 cabal安装包--global 在需要许可时提示sudo? 干 sudo cabal安装包 是一个坏主意,因为那时你正在以root身份构建包。你必须允许互联网连接写入root拥有的文件(你必须填写/root/.cabal或类似的东西)。
以下是人们想要这样做的一个很好的理由: 如果我通过我的linux包管理器安装ghc和haskell平台(这有很好的理由;),那么如果我做cabal安装包 它不会识别全球认可的包裹。
答案 2 :(得分:1)
好吧,有人实际上发布了一个(几乎令人讨厌的)详细描述如何进行全局安装(使用--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/