Qual é um bom método para resolver problemas de instalação de cabal?

Qual é um bom método para resolver problemas de instalação de cabal?

Usei o gerenciador de pacotes cabal para programas Haskell para instalar bibliotecas e novos projetos que clonei de alguns repositórios. Na maioria das vezes, continuo tendo problemas. A maioria dos projetos faz com que sua instalação pareça super fácil, mas no meu caso isso nem sempre é verdade - às vezes eles são muito difíceis de executar. Alguns são tão difíceis, na verdade, que perdi o interesse no projeto apenas por não conseguir instalá-lo.

Então, em vez de reclamar, gostaria de perguntar o que devo fazer para melhorar esta situação. Gostaria de usar meu problema mais recente como exemplo.

Estou interessado em experimentar oProjeto Gitit. É um wiki pessoal de aparência promissora que roda em vários sistemas de controle de versão.

Então aqui está o que eu fiz:

  • Clonar deGitHub
  • execute cabal installno diretório do projeto como foi dito na página de instalação do projeto:

    mika@eka:~/git/gitit$ ls
    BLUETRIP-LICENSE  CHANGES  HCAR-gitit.tex  LICENSE  Network  README.markdown  RELANN-0.6.1  Setup.lhs  TANGOICONS  YUI-LICENSE  data  expireGititCache.hs  gitit.cabal  gitit.hs  plugins
    mika@eka:~/git/gitit$ cabal install
    Resolving dependencies...
    cabal: cannot configure happstack-server-7.0.7. It requires base64-bytestring
    ==1.0.*
    For the dependency on base64-bytestring ==1.0.* there are these packages:
    base64-bytestring-1.0.0.0. However none of them are available.
    base64-bytestring-1.0.0.0 was excluded because gitit-0.10 requires
    base64-bytestring ==0.1.*
    mika@eka:~/git/gitit$ 
    
  • Então agora estou pensando: bem, vou instalar o happstack-server sozinho, talvez funcione:

    mika@eka:~/git/gitit$ cabal install happstack-server
    Resolving dependencies...
    Warning: happstack-server.cabal: Ignoring unknown section type: test-suite
    Configuring happstack-server-7.0.7...
    cabal: At least the following dependencies are missing:
    blaze-html ==0.5.*,
    hslogger >=1.0.2,
    monad-control ==0.3.*,
    network >=2.2.3,
    sendfile >=0.7.1 && <0.8,
    system-filepath >=0.3.1,
    text >=0.10 && <0.12,
    threads >=0.5,
    transformers-base ==0.4.*
    cabal: Error: some packages failed to install:
    happstack-server-7.0.7 failed during the configure step. The exception was:
    ExitFailure 1
    
  • Parece que faltam algumas dependências. Mas instalar essas dependências não é o objetivo do uso do cabal em primeiro lugar?

O que devo fazer? Arquivar relatórios de bugs (para qual projeto?), instalar as dependências manualmente ou algo mais? Pontos extras por explicar o que causa esse tipo de problema.

Responder1

Projetos com dependências complexas – e aqueles que incluem um servidor web provavelmente se enquadram nesta classe – geralmente são melhor construídos comcabal-devem vez de cabala. O primeiro instala tudo em um sandbox e não interfere nas demais instalações.

Então você deve primeiro instalar um novoPlataforma Haskell, bifurque o repositório e finalmente construa usando cabal-dev. É claro que você pode instalar o gitit cabal-dev install gititse não quiser trabalhar na fonte.

Você deve evitar instalações globais de projetos complexos.

Responder2

Para qualquer um que se depare com isso, descobri duas coisas importantes que tornam a cabala MUITO menos dolorosa.

Primeiro, os sandboxes são integrados a partir do cabal-install 1.18 (você não precisa mais do cabal-dev). Você deve atualizar com cabal install cabal-installe usá-los para tudo! Eu crio ~/.cabal/sandboxese coloco uma sandbox para cada construção lá. Então eu vinculo os binários finalizados ~/.cabal/bincom ln.

Segundo, se a sua distribuição (Debian, por exemplo) não conceder /tmppermissões de execução, isso causará todos os tipos de erros aparentemente não relacionados. Coisas como configure: error: cannot run C compiled programs. É fácil consertar com alias cabal="TMPDIR=/somewhere/with/permission cabal".

informação relacionada