Was ist eine gute Methode, um Probleme bei der Cabal-Installation zu lösen?

Was ist eine gute Methode, um Probleme bei der Cabal-Installation zu lösen?

Ich habe den Cabal-Paketmanager für Haskell-Programme verwendet, um Bibliotheken und neue Projekte zu installieren, die ich aus einigen Repositories geklont habe. Immer wieder stoße ich dabei auf Probleme. Bei den meisten Projekten sieht die Installation super einfach aus, aber in meinem Fall stimmt das nicht immer – manchmal sind sie sehr schwer zum Laufen zu bringen. Manche sind sogar so schwer, dass ich das Interesse an dem Projekt verloren habe, nur weil ich es nicht installieren konnte.

Anstatt mich also zu beschweren, möchte ich fragen, was ich tun kann, um die Situation zu verbessern. Als Beispiel möchte ich mein jüngstes Problem verwenden.

Ich bin daran interessiert, das auszuprobierenGitit-Projekt. Es ist ein vielversprechend aussehendes persönliches Wiki, das auf verschiedenen Versionskontrollsystemen läuft.

Folgendes habe ich getan:

  • Klonen vonGithub
  • Führen Sie es cabal installim Projektverzeichnis aus, wie es mir auf der Projektinstallationsseite gesagt wurde:

    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$ 
    
  • Jetzt denke ich mir: Naja, ich installiere den happstack-server mal einzeln, vielleicht klappt das ja:

    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
    
  • Es sieht also so aus, als ob einige Abhängigkeiten fehlen. Aber ist die Installation dieser Abhängigkeiten nicht der eigentliche Zweck der Verwendung von Cabal?

Was soll ich tun? Fehlerberichte einreichen (an welches Projekt?), die Abhängigkeiten manuell installieren oder etwas anderes? Bonuspunkte gibt es für die Erklärung, was diese Art von Problemen verursacht.

Antwort1

Projekte mit komplexen Abhängigkeiten – und solche, die einen Webserver beinhalten, passen am ehesten in diese Klasse – lassen sich am besten mitKabale-Entwickleranstelle von Cabal. Ersteres installiert alles in einer Sandbox und stört andere Installationen nicht.

Installieren Sie daher zunächst eine neueHaskell-Plattform, dann das Repository forken und schließlich mit cabal-dev erstellen. Natürlich können Sie gitit auch installieren, cabal-dev install gititwenn Sie nicht an der Quelle arbeiten möchten.

Sie sollten globale Installationen komplexer Projekte vermeiden.

Antwort2

Für jeden, der darüber stolpert: Ich habe zwei wichtige Dinge entdeckt, die die Kabale VIEL weniger lästig machen.

Erstens sind Sandboxen ab cabal-install 1.18 integriert (Sie benötigen cabal-dev nicht mehr). Sie sollten mit aktualisieren cabal install cabal-installund sie für alles verwenden! Ich erstelle ~/.cabal/sandboxesund platziere dort eine Sandbox für jeden Build. Dann verlinke ich fertige Binärdateien ~/.cabal/binmit in ln.

Zweitens: Wenn Ihre Distribution (z. B. Debian) keine /tmpAusführungsberechtigungen erteilt, führt dies zu allen möglichen scheinbar unzusammenhängenden Fehlern. Dinge wie configure: error: cannot run C compiled programs. Das lässt sich leicht mit beheben alias cabal="TMPDIR=/somewhere/with/permission cabal".

verwandte Informationen