TL;DR

  • Linux 호스트에서 R 에이전트 하네스를 실행할 때 bubblewrap은 선택한 서비스와 디렉터리만 허용하는 비특권 샌드박싱을 제공해 전체 Docker 컨테이너의 경량 대안이 됨.
  • --unshare-all로 격리한 뒤 --share-net으로 네트워크를 공유하고, 필요한 디렉터리만 읽기 전용 또는 쓰기 가능으로 연결하는 구성임.
  • Debian·Ubuntu에서 R을 사용하려면 /etc/alternatives, /etc/R, 컴파일러 설정에 따라 ~/.R/Makevars를 추가로 연결해야 함.
  • 이 방식으로 에이전트가 R을 사용해 패키지 소스와 빌드를 확인하고 버그를 분류할 수 있으며, ollama 기반 로컬 모델과 클라우드 서비스 모두에 적용 가능함.
  • Docker와 r2u는 R 패키지 의존성 설치를 간편하게 하는 유용한 선택지이며, bubblewrap은 기존 소프트웨어 스택을 활용하는 낮은 위험도의 실행 방식을 제공함.

bubblewrap을 이용한 R 샌드박싱

  • bubblewrap은 Linux 호스트에서 비특권 샌드박싱을 제공하는 경량 도구로, 에이전트 하네스에 적합하며 전체 Docker 컨테이너를 대체할 수 있는 선택지임.
  • unshare-all로 기본적으로 모든 것을 차단하고, 필요한 서비스와 디렉터리만 선택적으로 허용하는 방식임.
  • 주 워크스테이션에서 기존에 설치된 소프트웨어 스택을 활용하면서 비교적 낮은 위험도로 실행 환경을 구성할 수 있음.
  • Docker도 계속 유용하며, r2u를 사용하면 R 패키지 의존성을 간편하게 설치할 수 있음. ‘easy, fast, reliable: pick all three’라는 r2u의 문구에 부합하는 경험임.
  • bubblewrap은 예를 들어 debian-inference 사이트에 기록된 opencode 실행에 적합한 선택지임.

R 실행을 위한 추가 디렉터리

  • R을 실행할 때는 기본 예시에 다음 경로를 추가해야 함.
  • /etc/alternatives: Debian·Ubuntu 시스템에서 LAPACK·BLAS 해석을 관리하는 경로임.
  • /etc/R: R 설정 파일이 있는 경로임.
  • ~/.R/Makevars: 컴파일러 설정이 필요한 경우 연결하는 경로임.
  • /etc/alternatives 경로는 debian-inference 사이트에 현재 문서화되어 있음.
  • 현재 래퍼는 /usr를 읽기 전용으로 연결하고 /bin, /lib, /lib64를 해당 usr 경로에 연결함.
  • /etc/ssl, /etc/resolv.conf, ~/.gitconfig, /etc/R, /etc/alternatives, ~/.R/Makevars는 읽기 전용으로 연결하며, opencode의 설정·캐시·데이터 경로는 쓰기 가능하게 연결함.
  • /proc와 /dev를 제공하고 /tmp는 임시 파일 시스템으로 구성함. 현재 작업 디렉터리를 쓰기 가능하게 연결한 뒤 해당 경로에서 실행함.
  • 네트워크를 공유하고 부모 프로세스 종료 시 샌드박스도 종료하도록 설정한 뒤 /usr/local/bin/opencode를 실행 인자로 호출하는 구성임.
  • 래퍼에서 참조하는 문서 URL: https://inference.debian.net/doc

R 에이전트와 모델에서의 활용

  • 이 구성으로 실행한 에이전트는 R을 사용해 패키지 소스와 빌드를 확인하고 버그를 분류할 수 있음.
  • ollama로 제공되는 로컬 모델과 여러 클라우드 기반 서비스 모두에서 같은 방식으로 활용 가능함.
  • 본문은 Dirk Eddelbuettel의 Thinking inside the box 블로그에 실린 R4 시리즈 60번째 글임.