### 0.0.1 ubuntu.sh 공식 셸 스크립트의 패키지 설치 로직 및 백그라운드 동작 분석
PX4 소스 코드를 클론(Clone)한 직후 가장 먼저 마주하는 관문인 bash ./Tools/setup/ubuntu.sh 스크립트는 단순한 유틸리티가 아니다. 이 스크립트는 백지상태의 우분투 데스크톱을 드론 펌웨어 공장으로 개조하는 ’전자동 인프라스트럭처 에이전트(Infrastructure Agent)’다. 스크립트 내부에서 어떠한 시스템 레벨의 권한 탈취와 아키텍처 박박 밀어내기가 벌어지는지 그 로직을 뜯어본다.
Phase 1: APT 저장소 정리 및 기본 뼈대 강화
스크립트가 실행되면 가장 먼저 sudo apt-get update를 강제하여 호스트의 패키지 트리를 최신화한다. 그 직후, CMake를 위시한 빌드 엔진(build-essential, ninja-build), 소스코드 제어기(git), 그리고 Python 스크립트 파서의 모태가 되는 python3-dev, python3-pip 패키지들을 하드코딩된 리스트에 맞춰 무자비하게 설치(Install)한다. 이 과정에서 오래된 포대 자루 같은 구버전 패키지가 발견되면 가차 없이 apt-get remove로 날려버리는 정화 작업이 배경에서 일어난다.
Phase 2: 비행 제어기 특화 툴체인(GCC ARM, NuttX)의 하드 인젝션
일반적인 리눅스 개발자라면 절대 쓸 일이 없는 타겟 보드 전용 무기들이 투하된다. 스크립트 내부에는 arm-none-eabi-gcc 툴체인의 특정 안정 버전(가령 9-2019-q4-major) 다운로드 링크가 하드코딩되어 있다. 스크립트는 이를 wget으로 낚아채어 임시 폴더(.tar.bz2)에 푼 뒤, 사용자의 /opt/ 로컬 디렉토리나 타겟 Path에 강제로 이식한다. NuttX RTOS 환경을 빚어내기 위한 종속성 패키지인 genromfs 와 Kconfig 프론트엔드인 kconfig-frontends까지 컴파일하여 운영체제 심층부에 심어버린다.
Phase 3: Python 의존성 강제 주입
C++ 컴파일러 못지않게 중요한 Python 패키지들을 처리한다. 과거에는 호스트 전역 리눅스 공간에 pip install을 난사했으나, 최근 유지보수 철학의 변경으로 인해 로컬 격리 환경 혹은 사용자(User)-Level 경로(~/.local/bin)로 jinja2, empy, pyserial, pyyaml 등의 파서(Parser) 모듈들을 구겨 넣는다. 이 동작이 실패하면 수천 개의 C++ 파라미터 헤더 파일이 생성되지 않아 빌드가 첫 1초 만에 박살 난다.
결론적으로 ubuntu.sh 스크립트가 끝났다는 것은 호스트 리눅스의 레지스트리와 Path 환경 변수가 PX4라는 하나의 거대한 유기체를 위해 완벽히 포맷(Format)되고 튜닝되었음을 의미한다.