
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 install
no 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 gitit
se 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-install
e usá-los para tudo! Eu crio ~/.cabal/sandboxes
e coloco uma sandbox para cada construção lá. Então eu vinculo os binários finalizados ~/.cabal/bin
com ln
.
Segundo, se a sua distribuição (Debian, por exemplo) não conceder /tmp
permissõ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"
.