Android 태블릿을 질렀습니다. Lenovo Yoga Tab Pro 기종입니다.


태블릿 주제에 램이 16G나 되는 꽤나 좋은 사양입니다.
지르는데 무슨 특별한 이유가 있는게 아닌, 나에게 하는 선물이고, 선지름후고민 철학에 맞게 일단 지른겁니다.
주 목적인 유투브 재생해보고 난후, 개발머신으로 설정을 하기로 하고 시작했습다.
Linux development environment
안드로이드 16부터 시험기능으로 Linux development environment 이 추가되었습니다. Android 자체가 linux kernel 을 쓰는 거라, 그 linux terminal 을 android native 차원에서 지원하는 거라, 그걸 쓰기로 했습다.

개발자 설정화면에서 “Run Linux terminal on Android” 를 켰습니다. 그러면 Linux terminal app 이 추가되고, 그 앱을 실행하면 Linux 설치가 시작됩니다.

헌데, 설치중 에러 발생하네요.
AI가 이 문제에 대해 답해준 것은 컬컴때문이라고 한다.
원인: Qualcomm Snapdragon의 하드웨어 제한
Lenovo Yoga Tab (Pro 포함)은 Qualcomm Snapdragon 8 Gen 3 탑재 기기입니다. 에러 메시지 Non-protected VMs are not supported on this device는 정확히 이 칩셋의 알려진 문제입니다.
Android의 Linux Terminal은 AVF (Android Virtualisation Framework) 위에서 Debian VM을 실행하는데, 이를 위해선 두 가지 조건이 필요합니다: 기기가 AVF를 지원해야 하고, non-protected VM을 지원해야 합니다 — 즉 호스트 OS가 VM 내부 메모리에 접근할 수 있어야 합니다. 그런데 Qualcomm Snapdragon은 보안 목적(Play Protect 등)으로 설계된 protected VM만 지원하며, 이는 Linux 환경 실행에 적합하지 않습니다.
이렇게 Android 자체 제공 기능으로 하는 것은 여기서 실패!
Termux + proot-distro + code-server
AVF를 쓰지 않고 userspace에서 작동해 Snapdragon에서도 가능한 방법이 있고, 단 kernel space에 접근은 안되기에 systemd 는 안되고, device에 대한 접근도 안되는 제약은 있기는 한데, vscode 를 쓰는 용도로는 가능합니다.
먼저 termux와 termux-x11 앱 설치
https://github.com/termux/termux-app/releases
https://github.com/termux/termux-x11/releases/tag/nightly
이제 proot-distro 설치와 개발도구 설치
# Termux에서 도구 설치
pkg install x11-repo
pkg update
pkg install proot-distro
pkg install termux-x11-nightly
pkg install xwayland
pkg install tur-repo
pkg install code-server
# ubuntu 컨테이너 설치
proot-distro install ubuntu
proot-distro login ubuntu
# 그럼 이제 ubuntu shell 이 뜬다
apt install -y xfce4 xfce4-terminal
apt install -y dbus dbus-x11
# 패키지 업데이트
apt update && apt upgrade -y
# 기본 빌드 도구
apt install -y \
build-essential \
gcc \
g++ \
gdb \
gdbserver \
make \
cmake \
git \
curl \
wget \
unzip \
zip \
pkg-config \
ltrace \
strace \
binutils \
file \
xxd \
netcat-openbsd \
socat \
patchelf \
elfutils \
tmux \
htop \
tree \
jq \
ripgrep \
locales
# Python
apt install -y \
python3 \
python3-pip \
python3-venv \
python3-dev
# Node.js LTS (nodesource)
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt install -y nodejs
# node 확인
node -v
npm -v
# code-server (node 설치 후 다시)
curl -fsSL https://code-server.dev/install.sh | sh
# locale
locale-gen en_US.UTF-8
echo 'export LANG=en_US.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=en_US.UTF-8' >> ~/.bashrc
source ~/.bashrc
proot는 저수준 핵심 바이너리, proot-distro는 그 위에 만든 편의 래퍼입니다.
proot-distro (셸 스크립트 래퍼)
↓ 내부적으로 호출
proot (실제 엔진)
↓ 구현 방식
ptrace 시스템콜 인터셉트 → chroot 흉내
그래서 proot-distro login ubuntu 이 한줄은 내부적으로는 아래와 같이 이런 복잡한 proot 명령으로 변환됩니다.
# 내부적으로는 이런 복잡한 proot 명령으로 변환됨
proot \
--rootfs=~/.local/share/proot-distro/installed-rootfs/ubuntu \
--bind=/dev --bind=/proc --bind=/sys \
--bind=/sdcard \
--change-id=0:0 \
--sysvipc \
--link2symlink \
-w /root \
/usr/bin/env -i HOME=/root ... /bin/bash
이제 code server 설정합니다.
mkdir -p ~/.config/code-server
cat > ~/.config/code-server/config.yaml << 'EOF'
bind-addr: 127.0.0.1:8080
auth: password
password: mypassword
cert: false
EOF
Android Tab에서 VSCode
자 이제 준비가 되었고, vscode 사용하는 방법은 2가지가 있다. ubuntu 용 vscode 를 직접 x11 을 통해 실행하는 방법이 있고, android browser에서 code server 로 연결하는 방법이 있습니다.
x11로 띄우는 것이 리눅스와 동일한 방식이기는 한데, 그다지 편하지 않았다. 브라우저로 사용하는 방식을 택했습다.
절차는 termux app 을 통해 code server 실행
# termux shell
proot-distro login user
# ubuntu shell
code-server &
이제 브라우저에서 localhost:8080 로 해서 접속하고, native app 처럼 보일 수 있게, 아예 home screen 에 추가했습다.

vscode extension 도 다 설치되어, claude code plugin 설치해서 개발하는 폼을 잡아본 것으로 마무리합니다.