Termux: Linux Emulator for Android

 

Termux

출처: termux.com

Termux is an Android terminal emulator and Linux environment app that works directly with no rooting or setup required. A minimal base system is installed automatically - additional packages are available using the APT package manager.

리눅스 명령어가 동작하는 많은 리눅스 터미널 앱 중 하나이다. 하지만 pkg나 apt 명령어를 통해 다양한 소프트웨어를 설치할 수 있는 어마무시한확장성을 가졌다. vim, nano등 에디터부터, clang, perl, python, node.js 등의 개발도구 들, 심지어 x-window까지도 구동된다.(vnc를 이용하여야 한다.) 루팅없이말이다!

사실 필자는 이런 어마무시한 기능들이 모두 다 필요한 것은 아니었다. 다만 컴퓨터를 사용하지 못하고 휴대폰만 사용할 수 있는 환경에서 프로그래밍 공부를 하는데 한계를 느껴왔다.

CppDroidDcoder같은 앱을 그동안 사용해왔으나, CppDroid는 실행파일이 프로젝트 폴더가 아닌 다른 곳에 격리되어 있어 파일 입출력이 매우 제한적이고, Dcoder는 애초에 서버에서 실행하니 역시 마찬가지이다. python 커스텀 라이브러리 import도 불가능해서 뭐 문법이나 알고리즘 공부정도로 만족하는 수준. 게다가 makefile이나 cmake는 어림도 없다.

그런데 리눅스 명령과 각종 도구들이 있다? 정말 눈물이 앞을 가리지 않을 수 없다.

설치

현재 Google Play에는 더이상 업데이트 되고 있지않아 최신버전은 F-Droid에서 받아야한다.

개발 환경 설정

$ pkg update
$ pkg upgrade -y
$ pkg install build-essential		// clang, make, python 등등
$ pkg install gdb
$ pkg install git
$ pkg install vim
$ termux-setup-storage

termux 설치 이후 필자가 입력한 명령줄들이다.

pkg update & pkg upgrade

termux는 패키지 설치 명령어로 pkg를 사용하나, apt도 호환되는 것 같다. pkg update나 pkg upgrade나 같은 동작을 한다. 직접 확인해보니 저장소로부터 새로운 버전을 가져오는 동시에 설치한다…

pkg install build-essential

build-essential은 잘 알려져있다 싶이 개발에 필요한 여러 도구들이 묶여있다. 특이한게 termux는 gcc를 지원하지 않고, gcc 명령어는 clang으로 연결된다. 그 외에 make나 python도 있고 perl이랑 뭐 이것저것 설치된다.

pkg install vim

vim이야 뭐 특별할 건 없겠다. nano나 emacs도 지원된다.

pkg install git

정말 대단한건 git이 지원되는 것이라 생각한다. 폰에서 branch 나누고 commit push pull 다해먹다니 대단하다.

git clone https://github.com/fennecfox38/BitmapProject.git
git branch --list
git branch -c main experimental
git pull
git status
git add -A
git push origin main

termux-setup-storage

그리고 마지막 termux-setup-storage 명령은 termux 자체 명령인 듯하다. 해당 안드로이드시스템의 몇몇 주요 경로들(DCIM, Downloads, Movies, Music, Pictures, 그리고 sdcard영역)에 대한 심볼릭 링크를 최상위 폴더에 생성시킨다. 외부저장소로 접근할때 경로가 너무 길기때문에 심볼릭링크로 접근하면 좋다.

루트권한도 요구하지 않거니와, 저장소 권한정책이 엄격해지면서 제약이 많아졌다. termux의 기본 directory는 /data/data/com.termux/files/home, 즉 앱 데이터 내부경로이다. 다른 시스템폴더도 접근은 가능한데 권한이 없어 사실 탐색이나 어떠한 명령도 불가능하다. 외부저장소 /storage/emulated/0에는 제한적 권한이 주어진다.

ls -al 명령어로 해당 디렉토리의 모든 파일, 디렉토리와 그 권한을 확인할 수 있다. 외부저장소에 접근 후 권환을 확인해보면 디렉토리야 drwxrwx---로 후한 권한이 있지만, 일반파일의 경우 -rw-rw----가 전부이다. chmod로 권한 수정도 안된다. 그래도 termux로 읽고 쓸수는 있는데, 빌드 후 결과로 나온 실행파일이 외부저장소에 저장되어 있는거면 실행할 수가 없다…

꼼수

결국 실행파일을 실행하려면 termux가 온전한 권한을 가지는 장소, 앱데이터 내부경로로 가야한다. /data/data/com.termux/files/home로 복사해야지 뭐.

BitmapProject를 할때 필자는./bmputill -e를 매번 타이핑하는게 귀찮다고 run without build까지 make에 넣어버렸었다. 이왕한거 run에 좀더 사족을 달아보자.

TARGET = bmputill.out
INTERNAL = ~
STORAGE = $(INTERNAL)/storage/shared/project/bitmap

...

run:
    cp $(TARGET) $(INTERNAL)/$(TARGET)
    chmod 777 $(INTERNAL)/$(TARGET)
    $(INTERNAL)/$(TARGET) -e
    rm $(INTERNAL)/$(TARGET)

참고로 default 경로인 /data/data/com.termux/files/home~로도 사용될 수 있다. 뭐 쨌든 그래서, 결국 생성된 실행파일을 외부저장소의 프로젝트 폴더로부터 앱데이터 내부 경로로 복사해온 후, 저정도면 과잉인데 적절한 권한을 부여 후 실행하고, 다시 지워준다.

결과

폰에서도 잘 되지 않나. 이제 컴퓨터가 필요없다!

CAC가서 컴퓨터 잡아서 맨날 다운받아 설치하는 뻘짓을 하지 않아도 된다

Graphical Environment

wiki.termux : graphical environment 문서

jaeseokim님의 블로그

termux에 x-window 환경 설치후 vnc를 통해 GUI도 사용해볼 수 있다.

$ pkg install x11-repo
$ pkg install tigervnc
$ pkg install openbox pypanel xorg-xsetroot

//$ pkg install xfce4

해볼 수야 있다만 오히려 더 불편할 것 같아 해볼 생각은 없다.

This work is licensed under Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.
(The excerpted works are exceptionally subject to a licence from its source.) Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)