Cabal 설치 문제를 해결하는 좋은 방법은 무엇입니까?

Cabal 설치 문제를 해결하는 좋은 방법은 무엇입니까?

저는 Haskell 프로그램용 cabal 패키지 관리자를 사용하여 일부 저장소에서 복제한 라이브러리와 새 프로젝트를 설치했습니다. 종종 문제가 계속 발생합니다. 대부분의 프로젝트에서는 설치가 매우 쉬워 보이지만 제 경우에는 항상 그런 것은 아닙니다. 때로는 실행하기가 매우 어렵습니다. 실제로 일부는 너무 어려워서 설치할 수 없다는 이유만으로 프로젝트에 대한 관심을 잃었습니다.

그러니 불평보다는 이 상황을 개선하려면 어떻게 해야 하는지 묻고 싶습니다. 가장 최근의 문제를 예로 사용하고 싶습니다.

나는 그것을 시험해 보는 데 관심이 있습니다.Gitit 프로젝트. 다양한 버전 제어 시스템에서 실행되는 유망해 보이는 개인 위키입니다.

그래서 제가 한 일은 다음과 같습니다.

  • 다음에서 복제Github
  • cabal install프로젝트 설치 페이지에서 말한 대로 프로젝트 디렉토리에서 실행하세요 .

    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$ 
    
  • 그래서 지금 생각 중입니다. 글쎄요, happstack-server를 자체적으로 설치하겠습니다. 어쩌면 작동할 수도 있습니다.

    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
    
  • 따라서 일부 종속성이 누락된 것 같습니다. 하지만 애초에 Cabal을 사용하는 이유는 이러한 종속성을 설치하는 것이 아닌가?

어떻게 해야 하나요? 버그 보고서를 제출하고(어떤 프로젝트에?) 종속성을 수동으로 설치하시겠습니까? 이러한 종류의 문제를 일으키는 원인을 설명하는 보너스 포인트입니다.

답변1

복잡한 종속성이 있는 프로젝트와 이 클래스에 가장 적합한 웹 서버를 포함하는 프로젝트는 종종 다음을 사용하여 빌드하는 것이 가장 좋습니다.Cabal-dev카발 대신. 전자는 모든 것을 샌드박스에 설치하며 다른 설치를 방해하지 않습니다.

따라서 먼저 새로 설치해야 합니다.하스켈 플랫폼, 저장소를 포크하고 마지막으로 cabal-dev를 사용하여 빌드합니다. 물론 cabal-dev install gitit소스 작업을 원하지 않는다면 gitit을 설치할 수도 있습니다.

복잡한 프로젝트의 전역 설치를 피해야 합니다.

답변2

이것을 우연히 발견한 사람을 위해, 나는 도당의 고통을 덜게 만드는 두 가지 중요한 사실을 발견했습니다.

첫째, sandbox는 cabal-install 1.18부터 내장되어 있습니다(cabal-dev는 더 이상 필요하지 않습니다). 으로 업그레이드 cabal install cabal-install하고 모든 용도로 사용해야 합니다! ~/.cabal/sandboxes거기에 각 빌드마다 하나의 샌드박스를 만들고 넣습니다. 그런 ~/.cabal/bin다음 완성된 바이너리를 ln.

둘째, 배포판(예: Debian)이 /tmp실행 권한을 부여하지 않으면 겉보기에 관련이 없어 보이는 모든 종류의 오류가 발생합니다. 같은 것들 configure: error: cannot run C compiled programs. 으로 고치는 것은 쉽습니다 alias cabal="TMPDIR=/somewhere/with/permission cabal".

관련 정보