23.3.3 통합 설치 접두사 적용 및 파일 시스템 계층 표준(FHS) 파일 트리 준수 정책

23.3.3 통합 설치 접두사 적용 및 파일 시스템 계층 표준(FHS) 파일 트리 준수 정책

ROS2의 빌드 파이프라인에서 ’빌드(Build)’와 ’설치(Install)’는 논리적, 물리적으로 엄격하게 구별되는 두 가지 독립적 프로세스이다. Ament 툴체인은 개발 워크스페이스 내에서 컴파일된 결과물들이 시스템의 전역 경로(예: /usr/local 또는 /opt/ros/)를 무분별하게 오염시키는 것을 방지하기 위해, 오직 지정된 특정 디렉터리를 가상화된 최상위 시스템(Root System)처럼 취급하는 설계 철학을 채택한다. 이 과정에서 Ament는 리눅스 파일 시스템 계층 표준(FHS, Filesystem Hierarchy Standard)을 준수하는 포터블(Portable) 트리 구조를 동적으로 산출해 낸다.

1. 통합 설치 접두사(Install Prefix) 아키텍처

ROS2 워크스페이스를 빌드할 때 사용하는 기본 옵션 하에서, Colcon 및 Ament 빌드 시스템은 워크스페이스 루트 경로 하방에 install/이라는 논리적 샌드박스(Sandbox) 디렉터리를 생성한다. 이 install/ 경로 자체가 대상 패키지가 종속적으로 설치되어야 하는 통합 설치 접두사(Install Prefix), 즉 가상의 전역(Global) 루트 경로(/) 역할을 수행하게 된다.

각각의 패키지는 컴파일 타임에 도출된 산출물들을 소스 트리(src/)나 임시 빌드 저장소(build/)에 방치하지 않고, Ament 패키지 배포 스크립트에 의해 최종적으로 이 install/<package_name>/ 접두사 경로 내부로 완벽하게 복사 및 전송(Install)된다. 이 메커니즘을 통해 다수의 이질적인 패키지 플러그인들이 서로의 소스 코드를 침범하지 않으면서도 단일한 런타임 검색 풀(Search pool) 내에 공존할 수 있는 기저 환경이 확보된다.

2. 파일 시스템 계층 표준(FHS) 트리 프로파일 매핑

통합 설치 접두사 내부로 패키지를 배포할 때, Ament 툴체인은 단순히 파일을 무작위로 복제하지 않고 시스템의 안정성을 위한 엄격한 POSIX(FHS) 표준 규격 트리로 산출물들을 정렬(Sorting)한다. 개별 패키지의 설치 폴더 내부는 다음과 같은 표준 FHS 하위 디렉터리 레이아웃을 강제적으로 따른다.

  1. bin/ (Binaries): C++ 코드로 컴파일된 네이티브 타겟 바이너리, 혹은 파이썬 setup.pyconsole_scripts를 통해 엔트리 포인트(Entry Point)로 지정된 실행 가능 스크립트 래퍼(Wrapper)들이 집결하는 경로이다. 런타임에 노드를 구동하는 실제 주체 파일들이 이 위치에 수용된다.
  2. lib/ (Libraries): 빌드 대상 아키텍처(예: x86_64, aarch64 등)에 물리적으로 종속적인 정적 파일들(정적 혹은 동적 공유 라이브러리인 .so.a 파일)이 배포되는 경로이다. 컴파일 과정이 생략되는 ament_python 기반 패키지 아키텍처의 경우, 파이썬 환경의 내부 구현 모듈(Python Egg 메타데이터를 포함)을 안전하게 보관하기 위한 lib/python3.x/site-packages/ 형태의 서브 트리가 이 영역 내에 자동 편성된다.
  3. include/ (Headers): C++ 정적 및 동적 라이브러리 간의 노드-대-노드(Node-to-Node) 오프라인 링킹 작업을 보조하기 위해 상호 개방(Export) 처리된 .hpp, .h 공용 인터페이스 헤더 파일들이 복제되어 위치한다.
  4. share/ (Architecture-independent Data): CPU 하드웨어 아키텍처 구조나 컴파일러의 1차 출력 종류와 무관하게 분산 시스템 전반이 공통으로 읽고(Read-only) 해석할 수 있는 비종속적인 추상화 대상 파일 공간이다. 이 공간에는 빌드 시스템이 파싱을 마친 package.xml의 최종 매니페스트 사본, 후속 빌드를 위한 CMake 탐색 훅 스크립트(<package>Config.cmake), launch 스크립트 묶음 파일, 시뮬레이션용 SRDF/URDF 메시 모델 설정 파일, 그리고 ament_index 레지스트리에 사용될 결정적 파일 시스템 마커 표식 파일들이 배치되어 런타임 메타 정보 공급 허브의 책무를 수행한다.

3. 선언적 빌드 배포 규칙 기반의 설치 제약 강제화

이러한 FHS 기반의 규격화된 트리 레이아웃은 빌드 툴체인 상에서 자동적으로 무관여 생성되는 것이 아니라, 각 패키지 개발자가 작성한 빌드 서술어(Build descriptors) 내의 선언적 파일 지시(Declarative file directives) 프레임워크에 의해 물리적으로 강제화된다.

C++ 소스 기반의 ament_cmake 환경 하에서는, 개발자가 기초적인 빌드 튜닝 파일인 CMakeLists.txt 내부에 install(TARGETS my_node DESTINATION lib/${PROJECT_NAME}) 또는 install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}) 과 같은 명시적 명령어 쌍 기반의 트리 구조 매핑 설치 매크로를 정상적으로 기술해야만 툴체인이 배포 단계를 승인한다. 반면 파이썬 인터프리터 기반 환경인 ament_python 체계에서는 setup.py 스크립트의 구성 제어 변수인 data_files 배열을 파싱함으로써 소스 트리의 주요 파일들을 share/ 디렉터리의 정해진 특정 FHS 목적지로 전송하는 I/O 오퍼레이션이 빌드 후반부 시스템 단에서 투명하고 단호하게 처리된다. Ament 생태계는 이와 연계된 선언적 설치 유효성 규칙을 지속 감시하여, 임의의 개발 잉여 파일들이 FHS 아키텍처 규격을 벗어난 시스템의 불분명한 구역으로 파생 배포되는 치명적인 난봉 동작을 근본적으로 거부함으로써 로컬 워크스페이스 및 전역 시스템 환경의 이중 보호망 무결성을 영구적으로 확보한다.