2010-06-25 16 views
9

Con una instalación limpia de la "Plataforma Haskell". (OS X Snow Leopard-& Plataforma 2010.1.0.1), haciendo esto provoca simple secuencia causa muy raro comportamiento cabal install:mysterious cabal-install problems

$ cabal install time 

$ cabal install random 

$ ghc-pkg list random 
/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.1/package.conf.d 
    random-1.0.0.2 
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d 
    random-1.0.0.2 

random-1.0.0.2 se instala dos veces en mi sistema. y ahora haciendo cabal install random reinstala random-1.0.0.2 cada vez.

Parece random depende time, y cabal quiere volver a instalarlo después de una nueva versión de time disponible? Y debido a dos random-1.0.0.2 cabal, ¿está confundido y siempre piensa que no está actualizado porque está mirando al primero?

ghc-pkg check no encuentra ningún error.

Respuesta

2

Voy a describir el trabajo que funcionó hasta ahora para mí. He intentado muchas cosas diferentes, pero aquí solo describiré el intento que funcionó.

(por cierto: Estoy utilizando Mac OS X 10.6.4 y sus resultados podrían ser diferentes en diferentes sistemas)

  • He instalado GHC 6.12.3 de la fuente. No elimines tu GHC anterior ya que la compilación GHC lo requiere.
  • I eliminan los enlaces simbólicos en /usr/bin (por ghc, ghci, ghc-pkg, y runhaskell) a mi anterior GHC, que era la de instalador la Plataforma Haskell 2010.1.0.1.
  • Instalé cabal-install usando su script bootstrap.sh.
  • Instalé versiones parcheadas de los paquetes random y haskell98. Las diferencias son sólo en sus .cabal archivos
    • topé 'versión s hasta 1.0.0.2.1 y cambiaron la dependencia de time ser time == 1.1.*
    • topé haskell98' random versiones s hasta 1.0.1.1.1 y eso es todo
  • Ejecuté cabal update y cabal upgrade para ver qué paquetes están desactualizados. Hice cabal install esos. Creo que esto ayuda a alcanzar un estado estable más rápido. (Nótese que syb 's Fallo en la instalación y que cabal install parsec dijo que no hay nada que hacer al respecto cuando cabal upgrade Dicho de otra manera. Así que dejé esos dos paquetes solos)

Validé que mi configuración está bien ejecutando ghc-pkg check entre las etapas. A veces se rompe porque un paquete se vuelve a instalar sobre una versión anterior con el mismo número de versión y los paquetes que dependen de él deben reinstalarse. Cuando eso sucede I cabal install los paquetes rotos de nuevo.

También utilizó el siguiente programa para verificar que mi configuración no contiene dos paquetes con la misma versión:

import Data.List (sort) 
import Data.Maybe (fromJust) 
import System.IO (hGetContents) 
import System.Process (CreateProcess (std_out), StdStream (CreatePipe), createProcess, shell) 

main :: IO() 
main = do 
    pkgListRaw <- 
     createProcess (shell "ghc-pkg list") { std_out = CreatePipe } 
     >>= hGetContents . fromJust . sndOfFourTup 
    let pkgListSorted = sort . filter (not . null) $ lines pkgListRaw 
    putStrLn . 
     unlines . map (dropWhile (== ' ') . fst) . 
     filter (uncurry (==)) . zip pkgListSorted $ tail pkgListSorted 
    where 
     sndOfFourTup (_, x, _, _) = x 
  • I cabal install ed hlint, yesod, haddock, HDBC-mysql, hakyll y otra paquetes y luego I cabal install ed la lista anterior una y otra vez hasta que mi configuración alcanzó un "estado estable" en el que cabal install no reinstala ninguno de esos.

  • Comprobé que mis propios programas en los que estoy trabajando ahora compilan y funcionan.Todo parece estar bien ahora

Notas:

  • no pude conseguir Haskell Plataforma 2010.1.0.1 a trabajar. Las cosas solo me funcionaron después de actualizar a GHC 6.12.3. (?) Irónicamente, esto va en contra de la recomendación sobre la página de descarga de GHC:

Stop!

Para la mayoría de los usuarios, recomendamos instalar la plataforma Haskell Platform en lugar de GHC. La versión actual de la Plataforma Haskell incluye un lanzamiento reciente de GHC, así como algunas otras herramientas (como cabal) y un conjunto más grande de bibliotecas que se sabe que trabajan juntas.

  • Esta solución alternativa, probablemente se romperá en algún momento en el futuro también. Supongo que esto probablemente sucederá en unos meses. Se actualizará una biblioteca principal como random y luego los problemas de dependencia comenzarán a deshacerse de nuevo. Luego, tendré que dedicarle tiempo a que arreglemos nuestras configuraciones. Quizás entonces requeriría actualizarse a un GHC más nuevo. Pero quién sabe, tal vez será una versión anterior que se estabilizará a medida que los paquetes de pirateo se actualicen para resolver problemas relacionados con la dependencia. Como un servicio para usted, actualizaré esta pregunta y respuesta cuando llegue el momento. (Suponiendo que otros también tengan este problema. Hasta ahora he validado que Simon Marlow y Peaker también enfrentan este problema)

  • Formas de saber que su configuración de Haskell está rota (si alguno de estos es cierto, la configuración se rompe)):

    • funciona Nada
    • ghc-pkg check dice que se rompe
    • el programa corto cuya fuente pongo en esta respuesta anterior determina que usted tiene un paquete instalado dos veces con exactamente la misma versión
    • cabal update y luego ciclo cabal install en la lista de paquetes que escribí arriba, u otra lista (preferiblemente una grande con muchas dependencias). Si nunca alcanzas un estado estable (una iteración del ciclo siempre reinstala algo) entonces tu configuración se rompe. ADVERTENCIA: Este paso puede destruir su configuración de Haskell actualmente en funcionamiento. Para ello, si está maso curiosos o dispuesto a reparar su instalación una vez que se rompe (un proceso que podría llevar mucho tiempo)
  • me gustaría saber si sus configuraciones se rompen o trabajar. Esto podría ayudarme. Por ejemplo, si nos encontramos con que GHC 6.10 configuraciones están trabajando bien, I/T podría recomendar esas configuraciones a las personas con ocasión de recomendar a alguien para probar Haskell etc.

espero que esto ayude a otros que enfrentan la problemas iguales o similares. ¡Muchas gracias a Simon Marlow y John!

6

Por favor

ghc-pkg check 

y si eso no muestra ningún error, vamos a ver la salida de

ghc-pkg list -v 

y

cabal install random -v 

Editar: Puedo reproducir el problema GHC 6.12.1, pero no con 6.12.2, usando exactamente el mismo vers ion de cabal-install (0.8.0). Lo miraré.

Editar 2: reported as a bug en cabal-install.

+0

gracias por aparecer! :) He agregado las salidas para esos comandos a mi pregunta – yairchu

2

Tengo dos soluciones posibles, ambas son algo peligrosas, pero deben conseguir una instalación que funcione. Me alegra que Simon siga esto porque suena como una especie de error para mí. Para obtener una instalación de trabajo, me gustaría probar el siguiente primero:

ghc-pkg unregister random 

continuación, lista de tareas GHC-PKG al azar para ver lo que está instalado. Supongo (pero no estoy seguro) que todavía tendrá la versión/Library/Frameworks (de la Plataforma) pero la versión recién instalada se habrá ido. Si este es el caso, continúe con el siguiente paso. Si no es así, probablemente necesites hacer una reinstalación limpia de la plataforma.

Suponiendo que la plataforma de azar está todavía presente, hacer esto:

cabal unpack random 

cd al directorio que ha desempaquetado en, y editar el archivo .cabal al golpear la versión de 1.0.0.2.1 (agregar otro campo y aumentarlo en uno). Luego instale cabal desde ese directorio y debería instalar el nuevo al azar. Como esta tiene una versión diferente a la plataforma aleatoria, ambas pueden coexistir de manera segura.

En lugar de hacer el GHC-PKG anular el registro, puede eliminar directamente el archivo de registro de

/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d

nombre de archivo tendrá un hash anexado, por lo que tendrá que mirar el contenido del directorio para obtener realmente el valor.Simplemente elimine el archivo y ghc-pkg y cabal no deberían verlo a partir de ese momento. Esto no afectará a la instalación de la plataforma (por lo que es más seguro en ese sentido), pero aún existe la posibilidad de enrutar otros paquetes instalados. Después de esto, puede volver a instalar el paquete al azar desempaquetando e incrementando la versión como se indica arriba.

+0

Intenté algo similar y al principio funcionó. Parcheé 'random' y' haskell98' y los proyectos en los que estoy trabajando funcionaron bien. Decidí hacer una comprobación más precisa de que todo está bien mediante 'cabal install' ing' hlint', 'hoogle',' darcs', 'HDBC-mysql',' authenticate', 'hakyll' y repitiendo el proceso para verificar que alcanzo un punto fijo.Al final hubo un problema con casi todos los paquetes que vienen con el instalador GHC en la plataforma Haskell. Mi próximo intento es deshabilitar la opción 'user-install' de cabal. – yairchu

+0

algunas iteraciones de intentos de todo el trabajo después, ¡creo que mi configuración finalmente funciona! Describí mi trabajo en mi respuesta a continuación. ¡Gracias! – yairchu