2017-03-24 5 views
3

스냅 패키지를 만들 때 래퍼 스크립트는 LD_LIBRARY_PATH에 자동으로 $SNAP/usr/lib을 추가합니다. Snapcraft custom LD_LIBRARY_PATH

고정 표시기 내 패키지를 구축, (이 경우 liblapacklibblas에서) 일부 라이브러리는 하위 디렉토리에 설치됩니다 $SNAP/usr/lib/lapack$SNAP/usr/lib/libblas 각각.

모든 종속성은 내 snapcraft.yaml에 stage-packages으로 정의되어 있지만 위의 경로는 래퍼 스크립트에 포함되어 있지 않습니다.

어떻게 모든 라이브러리에 경로를 자동으로 래퍼 스크립트에 추가하도록 강제 할 수 있습니까?

답변

6

Snapcraft는 공통 라이브러리 경로 목록 (예 : /usr/lib/, /usr/lib/<arch> 등)을 유지 관리합니다. 해당 디렉토리가 존재하면 LD_LIBRARY_PATH에 추가됩니다. Ubuntu가 언급 한 것과 같은 예측할 수없는 경로에서 libs를 "찾는"방법을 생각하십시오. 이것은 /etc/ld.so.conf의 이유 중 하나입니다. 그러나 패키지가 데비안 패키지가 설치된 후 실행되는 훅 (hook)에 패키지가 새 라이브러리를 알리는 일반적인 방법이 있습니다. Snapcraft의 경우, 그 훅은 실행되지 않습니다. 스테이지 패키지는 간단히 풀립니다. 즉, Snapcraft는 방금 포장을 풀었던 무대 패키지가 예기치 않은 장소에 라이브러리가 있음을 쉽게 알 수있는 방법이 없음을 의미합니다. Snapcraft 현재 자동으로 당신을 도울 수 있지만

, 당신은 확실히 두 가지 방법 중 하나를 사용하여이 직접 수행 할 수 있습니다

  1. 당신이 실제로 실행하려는 바이너리를 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SNAP/usr/lib/lapack을 설정하고 임원 래퍼 스크립트를 만듭니다. 그런 다음 apps 섹션에서 해당 래퍼 스크립트를 사용하십시오. 이 같은 새의
  2. 만들기 사용 as yet undocumentedenvironment 키워드 :

    apps: 
        my-app: 
        command: my-binary 
        environment: 
         LD_LIBRARY_PATH: $LD_LIBRARY_PATH:$SNAP/usr/lib/lapack 
    
+0

'environment' 키워드는 이제 감사 @Kyle을 위해 이동하는 방법처럼 보인다 – Geotob