
Utilicé el administrador de paquetes Cabal para programas Haskell para instalar bibliotecas y nuevos proyectos que cloné de algunos repositorios. La mayoría de las veces sigo teniendo problemas. La mayoría de los proyectos hacen que instalarlos parezca muy fácil, pero en mi caso eso no siempre es cierto: a veces es muy difícil ejecutarlos. De hecho, algunos son tan difíciles que perdí interés en el proyecto únicamente por no poder instalarlo.
Entonces, en lugar de quejarme, me gustaría preguntar qué debo hacer para mejorar esta situación. Me gustaría utilizar mi problema más reciente como ejemplo.
Estoy interesado en probar elproyecto gitit. Es un wiki personal de aspecto prometedor que se ejecuta en varios sistemas de control de versiones.
Así que esto es lo que he hecho:
- Clonar deGitHub
ejecute
cabal install
en el directorio del proyecto como me dicen en la página de instalación del proyecto: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$
Así que ahora estoy pensando: bueno, instalaré happstack-server solo, tal vez 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 faltan algunas dependencias. ¿Pero no es instalar estas dependencias el objetivo de usar Cabal en primer lugar?
¿Qué tengo que hacer? ¿Archivar informes de errores (¿a qué proyecto?), ¿instalar las dependencias manualmente o algo más? Puntos de bonificación por explicar las causas de este tipo de problemas.
Respuesta1
Los proyectos con dependencias complejas (y aquellos que incluyen un servidor web probablemente encajen en esta clase) a menudo se construyen mejor concabal-deven lugar de camarilla. El primero instala todo en un entorno limitado y no interfiere con otras instalaciones.
Así que primero deberías instalar una nuevaPlataforma Haskell, luego bifurca el repositorio y finalmente compila usando cabal-dev. Por supuesto, puedes instalar gitit cabal-dev install gitit
si no quieres trabajar en el código fuente.
Debe evitar instalaciones globales de proyectos complejos.
Respuesta2
Para cualquiera que se tope con esto, he descubierto dos cosas importantes que hacen que la cábala sea MUCHO menos dolorosa.
Primero, los entornos sandbox están integrados a partir de cabal-install 1.18 (ya no necesita cabal-dev). ¡Deberías actualizar cabal install cabal-install
y usarlos para todo! Creo ~/.cabal/sandboxes
y pongo una caja de arena para cada compilación allí. Luego vinculo los binarios terminados ~/.cabal/bin
con ln
.
En segundo lugar, si su distribución (Debian, por ejemplo) no otorga /tmp
permisos de ejecución, provocará todo tipo de errores aparentemente no relacionados. Cosas como configure: error: cannot run C compiled programs
. Es fácil de arreglar con alias cabal="TMPDIR=/somewhere/with/permission cabal"
.