2012-11-15 4 views
3

(약 하스켈 플랫폼, GHC, 음모없이 바이너리를 배포되어 내 문제, ...)최소 하스켈 (GHC) 프로그램 설치 (GHC/음모없이 배포)

나는 잘 음모 형성 하스켈 응용 프로그램을 배포해야합니다 (Yesod scaffolded)하지만 디스크 공간 제한이 있습니다.

GHC 크기 등 모든 음모 소스 코드, 패키지, 저장, 1Gbytes에 관한 것입니다 ... 등 더 많은 디스크 공간, ... 분명히

, 하스켈 플랫폼은, GHC는, ... (개발에 관한이 필요 배포 안 함). 내 특정 경우

나는

cabal clean && cabal configure && cabal build 

를 생성하고 성공적으로 실행할 수 있습니다 (일부 등)

./dist/build/MyEntryPoint/MyEntryPoint arg arg arg 

하지만, 어떤 의존성에 대해?, 어떻게 생산 환경으로 이동? (함께 "dist" 컴파일

동봉하지 않고 바이너리 종속성을 넣을 수 있습니까? 방법?

대단히 감사합니다!

+0

참고 : [GHC 컴파일 바이너리에는 GHC가 필요합니까? 아니면 자체 포함되어 있습니까?] (http://stackoverflow.com/questions/6389948/do-ghc-compiled-binaries-require-ghc-or-are- 자체 포함) – hammar

+0

ldd 의존성을 검사 할 때만 실행될 것이라고 생각합니까? 나는 시도 할 것이다! :) – josejuan

+0

바이너리 크기 참고 정보 : http://stackoverflow.com/questions/6115459/small-haskell-program-compiled-with-ghc-into-huge-binary –

답변

7

기본적으로 ghc는 하스켈 라이브러리의 정적 연결을 사용합니다. 결과 바이너리는 하스켈 생태계와 무관합니다. 프로그램에 데이터 파일이 필요하지 않은 경우 ./dist/build/MyEntryPoint/MyEntryPoint에서 호스트로

의 이진 파일을 복사하십시오. 데이터 경로를 사용하여 이진 파일에서 참조하는 데이터 파일 (예 : 템플릿, 이미지, 정적 HTML 페이지) (예로서 행복 사용) 다음과 음모의 논리를 발견, 당신은 Setup copy을 사용할 수 있습니다 : 당신이 /usr/local에 설치하지 않으려면

 
/tmp/happy-1.18.10 $ ./Setup configure 
Warning: defaultUserHooks in Setup script is deprecated. 
Configuring happy-1.18.10... 
/tmp/happy-1.18.10 $ ./Setup build 
Building happy-1.18.10... 
Preprocessing executable 'happy' for happy-1.18.10... 
[ 1 of 18] Compiling NameSet   (src/NameSet.hs, dist/build/happy/happy-tmp/NameSet.o) 
[..] 
[18 of 18] Compiling Main    (src/Main.lhs, dist/build/happy/happy-tmp/Main.o) 
Linking dist/build/happy/happy ... 
/tmp/happy-1.18.10 $ ./Setup copy --destdir=/tmp/to_be_deployed/ 
Installing executable(s) in /tmp/to_be_deployed/usr/local/bin 
/tmp/happy-1.18.10 $ find /tmp/to_be_deployed 
/tmp/to_be_deployed 
/tmp/to_be_deployed/usr 
/tmp/to_be_deployed/usr/local 
/tmp/to_be_deployed/usr/local/bin 
/tmp/to_be_deployed/usr/local/bin/happy 
/tmp/to_be_deployed/usr/local/share 
/tmp/to_be_deployed/usr/local/share/doc 
/tmp/to_be_deployed/usr/local/share/doc/happy-1.18.10 
/tmp/to_be_deployed/usr/local/share/doc/happy-1.18.10/LICENSE 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/GLR_Lib-ghc-debug 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/GLR_Lib-ghc 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/GLR_Lib 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/GLR_Base 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-arrays-coerce-debug 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-arrays-ghc-debug 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-arrays-debug 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-arrays-coerce 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-arrays-ghc 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-arrays 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-coerce 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-ghc 
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate 
/tmp/happy-1.18.10 $ rsync -rva /tmp/to_be_deployed/ production.host:/ 
[..] 

다음 Setup configure에 원하는 접두사를 전달합니다.

이 기능은 대상 호스트가 다른 경우 (gmp 및 ffi와 같은 C 라이브러리의 동일한 버전이 설치된 경우) 잘 작동합니다. 일부 C 라이브러리를 정적으로 링크해야하는 경우 hammar가 주석에 링크되어있는 question을 참조하십시오.

+0

"결과 바이너리는 하스켈 생태계와 무관합니다."감사합니다! 시도해 볼게! – josejuan

+0

당신이 맞습니다. 요아킴, 뛰는 것이 직접적입니다. 다시 감사합니다! – josejuan