¿Cuál es un buen método para resolver problemas de instalación de Cabal?

¿Cuál es un buen método para resolver problemas de instalación de Cabal?

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 installen 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 gititsi 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-instally usarlos para todo! Creo ~/.cabal/sandboxesy pongo una caja de arena para cada compilación allí. Luego vinculo los binarios terminados ~/.cabal/bincon ln.

En segundo lugar, si su distribución (Debian, por ejemplo) no otorga /tmppermisos 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".

información relacionada