
저는 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
답변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"
.