최근에 안드로이드 폰에서 F-Droid와 Termux로 여러가지를 해봤는데 상당히 유용한 것 같다. 안타깝게도 도커를 구동하려면 루팅이 필수적으로 필요해서 패스하였지만 Debian을 컨테이너 형태로 띄워서 그 안에서 실행하면 서버로도 충분히 활용이 가능했다.
이 글에서는 Debian 컨테이너를 띄우고 code-server를 활용해서 브라우저 내에서 VSCode 환경으로 접근해서 개발 작업을 진행할 수 있도록 하는 것, ssh로 원격으로 접근할 수 있는 방법, GUI가 필요한 경우를 대비해 VNCserver 설정 과정을 다루고 있다.
개발 환경 설치
F-Driod & Termux
https://f-droid.org/F-Droid.apk
위 링크에서 받은 apk를 기기에 설치하여 실행한 후 termux
를 검색하여 설치한다.
설치 후 실행해서 아래 화면이 뜨면 완료되었다.
다른 패키지를 설치하기 위해서 아래 명령어를 입력해준다.
pkg update -y && pkg upgrade -y
proot-distro
기본 환경에서도 개발 및 다양한 작업이 가능하지만 제약되는 사항이 많아서 다른 리눅스 배포판을 컨테이너 형태로 띄울 수 있는 proot-distro
를 활용하여 그 안에 개발환경을 셋팅할 것이다. 따라서 아래 명령어를 입력하여 설치해준다.
pkg install -y proot-distro
설치가 완료되면 원하는 리눅스 배포판을 설치할 수 있다. 여기서는 debian으로 진행하지만 아래와 같은 배포판을 선택하여 설치할 수 있다.
alpine
: Alpine Linux (edge)archlinux
: Arch Linux ARMdebian
: Debian (stable)fedora
: Fedora 37 (AArch64 only)manjaro-aarch64
: Manjaro AArch64opensuse
: OpenSUSE (Tumbleweed)pardus
: Pardus (yirmibir)ubuntu
: Ubuntu (22.04)void
: Void Linux
proot-distro install debian
위는 설치가 진행되는 화면이고 설치가 완료되면 아래 명령어로 해당 컨터이너에 접근할 수 있다.
proot-distro login debian
# 여기부터는 컨테이너 내부
apt update -y && apt upgrade -y
code-server
https://github.com/coder/code-server
필자가 애용하는 code-server를 안드로이드에서 실행한 후 접근할 것이다. 위 링크에 접속해서 가장 최근에 릴리즈 된 버전에서 arm64
용으로 만들어진 tar.gz
파일로 진행하면 된다. 참고로 apt
로 직접 설치하는 방법도 가능하다.
apt install -y wget
wget https://github.com/coder/code-server/releases/download/v4.16.1/code-server-4.16.1-linux-arm64.tar.gz
tar -xvf code-server-4.16.1-linux-arm64.tar.gz
압축이 풀리면 해당 디렉터리로 이동한 후 다음과 같이 실행시킬 수 있다.
cd code-server-4.16.1-linux-arm64
./bin/code-server --auth none --host 0.0.0.0
--auth none
: code-server는 접근시 기본적으로 패스워들 입력을 요구하는데$PASSWORD
를 환경 변수를 지정해주면 해당 패스워드로 접근이 가능하다. (ex.export PASSWORD=1234
) 여기서는--auth none
옵션을 주어서 패스워드 입력을 받지 않도록 하였다.--host 0.0.0.0
: code-server는 기본적으로 localhost로 접근할 수 있도록 되어있기 때문에--host 0.0.0.0
을 설정하여 기기의 아이피로 접근이 가능하도록 해주었다.
이제 기기의 브라우저에서 localhost:8080
으로 접근하거나 같은 네트워크에 연결된 장치에서 해당 기기의 {IP}:8080
으로 접근하면 정상적으로 VSCode 환경이 보여진다.
openssh-server
arm용 code-server에서 플러그인 마켓이 동작하지 않는 것으로 보여서 vsix로 직접 설치하면서 사용하고 있는데 아무래도 불편한 느낌이라 ssh로 원격 접근하여 작업하는 방법이 더 나아보인다. 아래 명령어를 입력하여 패키지를 설치해준다.
apt install -y vim openssh-server
ssh 접근시 입력할 패스워드를 지정해준다.
passwd
접속할 포트와 root의 접근을 허용해주자
vi /etc/ssh/sshd_config
# 파일에 아래 내용 추가
Port 2222
PermitRootLogin yes
아래 명령어로 서버를 활성화 시켜준다.
service ssh start
아래 명령어로 접속할 수 있다.
ssh root@{IP} -p 2222
이제 원격으로 접근할 기기의 VSCode의 Remote Explorer 플러그인을 설치하여 접근하여 작업할 수 있다.
vncserver
GUI가 필요한 상황이라면 이 과정을 따라하여 구축할 수 있다. 아래와 같이 GUI 구동에 필요한 패키지를 설치해준다.
apt install -y xfce4 xfce4-goodies dbus-x11 tightvncserver
설치는 20분 가량 소요되며 완료되면 아래 명령어를 입력하여 실행을 시켜준다. 첫 실행시 패스워드를 생성하라고 하는데 원하는 패스워드로 생성해주면 된다.
vncserver :1
export DISPLAY=":1"
vnc 서버가 실행될 때 xfce session을 구동시키기 위해 아래와 같이 작업해준다.
vi ~/.vnc/xstartup
# 파일에 아래 내용 추가
xfce4-session &
이제 VNC Client 도구(RealVNC과 같은)를 이용해서 {IP}:5901
로 접근할 수 있다. 웹으로 편하게 접근하려면 아래와 같이 noVNC를 이용하여 접근 할 수 있다.
apt install -y git
git clone https://github.com/novnc/noVNC
./noVNC/utils/novnc_proxy --vnc localhost:5901
WebSocket server settings:
- Listen on :6080
- Web server. Web root: /root/noVNC
- No SSL/TLS support (no cert file)
- proxying from :6080 to localhost:5900
위와같이 뜨면 브라우저에서 {IP}:6080
으로 접근하여 vnc.html
로 이동하여 GUI 환경에 접근할 수 있다.
이어서 보면 좋은 자료
데비안 환경에서 대표적인 언어에 대한 개발 환경을 설정하는 명령어를 작성해 둔 글이므로 참고하여 원하는 개발 환경을 설정할 수 있다.
- Linux Debian 개발환경 설정 가이드 · BLEX @baealex #
안드로이드 12나 13에서는 termux에서 조금만 무리한 작업을 돌려도 종료되는 현상이 있다. 팬텀 프로세스 모니터라는 것을 비활성화 해야 이러한 현상을 방지할 수 있다.
- termux 'process completed signal 9 press enter' 해결 · BLEX @baealex #
성능 비교
문득 성능이 어느정도 나오는지 궁금해졌다. 같은 프로젝트를 5개(PC 3대, 모바일 2대)의 장치에서 빌드하여 빌드 타임을 비교해 보았다. 5회 정도 실시했을 때 가장 빨랐던 시간을 작성해 두었다.
- Apple M1 Pro (2021)
- Mac OS / 32GB RAM / SSD
vite v4.4.7 building for production...
✓ 236 modules transformed.
✓ built in 1.58s
- Intel(R) Core(TM) i5-9400F (2019)
- Debian (Windows WSL) / 32GB RAM / SSD
vite v4.4.7 building for production...
✓ 236 modules transformed.
✓ built in 3.03s
- Snapdragon 8 Gen 2 (2023)
- Debian (Android Termux) / 8GB RAM / UFS 4.0
vite v4.4.7 building for production...
✓ 236 modules transformed.
✓ built in 4.28s
- Intel(R) Core(TM) i5-4200U (2013)
- Debian / 8GB RAM / SSD
vite v4.4.7 building for production...
✓ 236 modules transformed.
✓ built in 5.80s
- Exynos 9820 (2019)
- Debian (Android Termux) / 6GB RAM / UFS 2.1
vite v4.4.7 building for production...
✓ 236 modules transformed.
✓ built in 18.07s
Ghost