UserLAnd Ubuntu와 OpenAI Codex에 대해
UserLAnd는 안드로이드 기기에서 루팅 없이 완전한 리눅스 배포판을 구동할 수 있게 해주는 오픈소스 애플리케이션이다. 삼성 갤럭시 S26 Ultra와 같은 고성능 모바일 기기에 UserLAnd를 통해 Ubuntu 환경을 구축하면, 언제 어디서나 활용 가능한 강력한 휴대용 개발 서버가 완성된다.
UserLAnd 기반의 Ubuntu는 일반적인 PC(Baremetal)나 가상 머신(VM)에 설치된 완전한 격리 환경의 Ubuntu와는 구조적인 차이가 있다. 하드웨어와 커널을 독점하는 일반 OS와 달리, UserLAnd는 안드로이드의 리눅스 커널을 공유하며 그 위에서 동작하는 PRoot(사용자 공간 chroot) 방식을 사용한다.
이로 인해 시스템의 완벽한 루트(Root) 제어나 커널 레벨의 모듈 조작에 제한이 있다. 특히 소스코드 컴파일과 같이 CPU와 메모리 사용량이 급증하는 무거운 작업을 수행할 때, 안드로이드 OS 고유의 메모리 관리자(LMK, Low Memory Killer)가 위험을 감지하고 프로세스를 강제 종료시켜버리는 튕김(OOM) 현상이 발생하기 쉽다. 본 튜토리얼에서 빌드 스레드 수를 강제로 제한(--jobs 1)하는 이유도 바로 이러한 모바일 PRoot 환경만의 특수성 때문이다.
OpenAI Codex CLI는 터미널 환경에서 자연어로 코딩 및 시스템 제어를 도와주는 오픈소스 AI 비서 도구다. 일반적으로 Node.js 환경에서 npm install -g @openai/codex 명령어를 통해 간편하게 설치한다고 알려져 있다.
하지만 UserLAnd의 Ubuntu 환경(ARM64/AArch64 아키텍처)에서 이 방식대로 설치를 시도하면 연달아 두 가지 큰 장벽에 부딪히게 된다.
첫째, 제공되는 우분투 기본 저장소의 Node.js 구버전(예: v12.22.9) 상태에서 설치 후 실행하면, 패키지가 요구하는 최신 자바스크립트 문법(Top-level await)을 인식하지 못해 SyntaxError: Unexpected reserved word 오류가 발생하며 실행이 중단된다.
둘째, 이를 해결하고자 Node.js 버전을 최신으로 업데이트하고 재설치를 시도하거나, 누락된 ARM64 전용 의존성 패키지(@openai/codex-linux-arm64)를 강제로 설치하려 해도 npm error 404 Not Found 오류와 함께 진행이 완전히 가로막힌다. 이는 해당 npm 패키지가 실제 소스코드가 아닌 플랫폼별 사전 컴파일된 바이너리를 다운로드하는 래퍼(Wrapper) 역할만 수행하는데, OpenAI 측에서 Linux ARM64용 바이너리를 npm 레지스트리에 아예 제공하지 않기 때문이다.
이러한 문제를 해결하기 위한 가장 확실한 방법은 답이 없는 npm 의존성을 과감히 배제하고, 공식 GitHub 저장소의 소스코드를 가져와 현재의 ARM64 리눅스 환경에 맞게 직접 Rust로 빌드(컴파일)하는 것이다. 이 과정에서 C 컴파일러 및 몇 가지 필수 시스템 라이브러리 연결 문제를 해결해야 한다.
이 포스트에서는 갤럭시 S26 Ultra의 UserLAnd Ubuntu 환경에서 발생하는 위와 같은 에러들을 우회하여, 한 번에 Codex CLI를 소스 빌드하고 세팅하는 과정을 정리했다.
요구 사항
- Samsung Galaxy S26 Ultra 1TB 16RAM (※ 타 기기 환경에 대한 교차 검증은 진행하지 않음)
- UserLAnd 앱을 통해 설치된 Ubuntu 환경
- 인터넷 연결
OS 정보
$ uname -a
Linux localhost 6.12.30-android16 #1 SMP PREEMPT Fri Jan 9 15:40:57 UTC 2026 aarch64 aarch64 aarch64 GNU/Linux
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy1. 필수 패키지 설치
소스코드를 컴파일하기 위해서는 시스템 기본 빌드 도구들이 필요하다. 특히 Rust 빌드 도중 C 컴파일러(cc)를 호출하거나, 네트워크 통신 및 샌드박스 보안 기능(bubblewrap)을 구성하기 위해 외부 C 라이브러리를 요구하므로 관련 개발 패키지들을 모두 설치해 주어야 한다. 주요 필수 패키지로는 Git, Build-essential, Pkg-config, OpenSSL 개발 패키지, Libcap 개발 패키지가 포함된다.
sudo apt update
apt-get install -y git build-essential pkg-config libssl-dev libcap-dev2. Rust 컴파일러 설치
Codex CLI는 Rust 언어로 작성되어 있으므로 시스템에 Rust 환경이 구성되어 있어야 한다. 공식 설치 스크립트를 사용하여 표준(Standard) 설정으로 Rust 및 패키지 관리자인 Cargo를 설치하고, 환경 변수를 시스템에 즉시 적용해 준다.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"3. Codex 소스 코드 다운로드
설치된 Git을 이용해 OpenAI의 공식 Codex GitHub 저장소에서 최신 소스코드를 클론하여 가져온다.
git clone https://github.com/openai/codex.git4. 빌드 실행 및 OOM 방지 조치
소스코드 디렉터리로 이동한 뒤 본격적인 빌드를 시작한다.
이때 모바일 가상 환경 특성상 매우 주의해야 할 점이 있다. Rust의 빌드 도구인 Cargo는 기본적으로 기기의 모든 CPU 코어를 최대한 활용하여 병렬 컴파일을 시도한다. 갤럭시 S26 Ultra와 같은 다중 코어 환경에서는 순간적으로 메모리 사용량이 폭주하여 UserLAnd 가 종료되는 현상이 발생하기도 한다.
이를 방지하기 위해 반드시 빌드 작업 수를 1개로 제한하는 옵션을 추가하여 컴파일을 진행해야 한다. 속도는 다소 느려지지만 시스템 자원을 과도하게 소모하지 않고 안전하게 빌드를 완료할 수 있다.
cd codex/codex-rs
cargo build --release --jobs 15. 실행 파일 적용
컴파일을 마친 새 실행 파일들을 시스템의 전역 경로(/usr/local/bin/)로 복사하여 터미널 어느 위치에서나 명령어를 호출할 수 있도록 환경을 구성한다.
cp target/release/codex /usr/local/bin/
cp target/release/codex-app-server /usr/local/bin/6. 실행
모든 설치가 끝난 후 터미널에 명령어를 입력해 본다. 이제 모바일 리눅스 환경에서도 강력한 AI 코딩 어시스턴트를 터미널에서 사용할 수 있다.
codex참고 사이트
위 튜토리얼은 2026년 3월 기준 업데이트가 적용된 Samsung Galaxy S26 Ultra 1TB 16GB RAM 과 UserLAnd Ubuntu 기준으로 작성되었으며, Android 기기 모델과 소프트웨어 차후 버전 차이에 따라 일부 수정이 필요할 수 있다.