
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 install
im 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 gitit
wenn 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-install
und sie für alles verwenden! Ich erstelle ~/.cabal/sandboxes
und platziere dort eine Sandbox für jeden Build. Dann verlinke ich fertige Binärdateien ~/.cabal/bin
mit in ln
.
Zweitens: Wenn Ihre Distribution (z. B. Debian) keine /tmp
Ausfü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"
.