본문 바로가기
REZ/ADVACED

Context bundles

by 르면가게 2024. 12. 24.

Rez의 컨텍스트 번들 (Context Bundles)

Rez의 컨텍스트 번들은 하나의 디렉토리에 컨텍스트 파일(.rxt)과 패키지 저장소를 포함한 독립적인 구조입니다. 번들은 외부 공유 패키지 저장소에 의존하지 않고, 서버나 컨테이너와 같은 격리된 환경에서도 사용하기 쉽게 설계되었습니다.

주요 특

  1. 자급자족 가능: 컨텍스트에서 참조하는 모든 패키지가 번들 내에 포함되어 외부 의존성이 없습니다.
  2. 재배치 가능: .rxt 파일의 패키지 참조 경로가 상대 경로로 설정되어 있어, 번들을 이동하거나 복사해도 기능이 유지됩니다.

번들 생성 방법

  • 명령어 사용:
$ rez-env foo -o foo.rxt
$ rez-bundle foo.rxt ./mybundle
$ rez-env -i ./mybundle/context.rxt -- foo-tool
  • API 사용:
from rez.bundle_context import bundle_context
from rez.resolved_context import ResolvedContext

c = ResolvedContext(["python-3+", "foo-1.2+<2"])
bundle_context(c, "./mybundle")

번들 구조

번들 디렉토리에는 다음과 같은 파일 및 디렉토리가 포함됩니다:

  • context.rxt: 상대 경로로 작성된 컨텍스트 파일.
  • packages/: 표준 패키지 저장소 구조.

라이브러리 패칭 (Patching Libraries)

Rez는 번들 내의 라이브러리 및 실행 파일이 올바르게 동작하도록 라이브러리 패칭 단계를 포함합니다.

  • Linux의 경우, ELF 바이너리의 rpath/runpath 헤더를 $ORIGIN 변수를 사용하여 상대 경로로 수정합니다.
  • 이 단계가 필요하지 않은 경우, -no-lib-patch 옵션을 사용해 생략할 수 있습니다.

참고 사항

  • 번들 내에서 찾을 수 없는 라이브러리 경로(예: 시스템 라이브러리)는 기존 경로를 유지합니다.
  • 이 과정은 번들의 이동성을 보장하며, 의존성 문제를 방지합니다.

Linux 예제

예를 들어, /sw/packages/foo/1.0.0/bin/foo의 원래 경로가:

  • 번들 외부: /sw/packages/bah/2.1.1/lib
  • 번들 내부: $ORIGIN/../../../bah/2.1.1/lib

$ORIGIN 변수는 실행 파일의 위치를 기준으로 동적으로 경로를 설정합니다.

https://rez.readthedocs.io/en/stable/context_bundles.html

'REZ > ADVACED' 카테고리의 다른 글

Pip  (0) 2024.12.24
Resolve Caching  (0) 2024.12.24
Managing packages  (0) 2024.12.24
Suites  (0) 2024.12.24
Ephemerals  (1) 2024.12.24