ipTIME A9004M 공유기에 Windows XP 올리기

※ 2021-01-18: 서두의 트윗은 아이디어의 원천에 대한 레퍼런스 목적으로 달아둔 것이고, 누군가를 비하하거나 조롱하기 위함이 아닙니다. 이 점을 분명히 하기 위해 서두 부분을 살짝 수정했습니다.

계기

작년에 우연히 이 트윗을 보게 되었습니다.

그때까진 공유기에 OpenWrt 외의 일반 리눅스 배포판을 올려볼 생각을 해본 적이 없어서, 공유기에 VNC 서버를 올린다는 생각이 제겐 상당히 신선하게 다가왔습니다.

만약 WRT1900ACS에서 VNC 서버를 돌릴 수 있다면 충분히 사양이 좋은 ipTIME 기기에서도 가능할 것이라 생각했습니다. 예를 들어 NAS1dual에는 동일한 CPU와 더 큰 용량의 RAM이 들어가므로 단순히 연산성능으로만 봤을 땐 WRT1900ACS에 못지않다고 볼 수 있겠지요.

그래도 똑같은 플랫폼에서 똑같은 걸 따라하는 건 재미가 덜할 것 같고, ipTIME 공유기 중에서 충분히 성능이 좋은 A9004M에서 시도해보기로 했습니다.

A9004M 위에 OpenWrt

일단 OpenWrt부터 올려봅시다.

OpenWrt에선 X11이나 VNC 같은 GUI 관련 패키지를 제공하고 있지 않기 때문에, OpenWrt 바로 위에 VNC 서버를 올리는 건 쉽지 않을 것 같습니다.

정말 Debian을 올리려고 한다면 Armbian을 포팅하거나 debootstrap을 쓰는 방법도 있겠지만, 단순한 PoC를 위해 거기까지 손대는 건 좀 귀찮고, 다행히 Docker 패키지는 있어서 도커 컨테이너를 올리는 방향으로 가겠습니다.

OpenWrt 이미지를 빌드할 때 도커에 필요한 커널 모듈을 같이 포함해줍시다.[1] 만약 나중에 업스트림에서 A9004M을 공식 지원하게 된다면 이 과정은 필요없게 됩니다.

한편 도커 패키지를 설치하고 이미지를 다운로드 받기에 128MB 내장 플래시는 너무나도 비좁습니다. extroot를 써서 루트 파일시스템을 외부 USB 메모리로 옮길 필요가 있습니다. 가이드를 따라가면 어렵지 않게 할 수 있습니다.[2]

그리고 후술할 이유로 /opt에 마운트할 파티션이 따로 필요합니다.

이제 도커를 설치할 준비가 되었습니다.

Docker 위에 VNC 서버

opkg install docker-ce로 패키지를 설치합니다. 현재 docker-ce 패키지는 arm, aarch64, x86_64 아키텍처에서만 지원됩니다. 아마 mipsel 기반인 MT7621에서도 가능할 것 같은데, 혹시 관심 있는 분이 계시다면 테스트 부탁드립니다.

도커의 기본 스토리지 드라이버는 overlay2이지만, 커널 구현의 한계로 OpenWrt의 overlay 루트 파일시스템 위에서는 작동하지 않습니다. 만약 위에서 /opt에 별도 파일시스템을 마운트하지 않았다면 overlay2보다 느리고 용량도 많이 차지하는 vfs를 사용하게 됐을 겁니다.

VNC 서버 이미지를 다운받고 컨테이너를 실행합니다.

작업이 완료되면 이제 외부에서 VNC 클라이언트나 웹 브라우저를 통해 VNC 서버에 접속할 수 있습니다.

생각보단 반응속도가 좋습니다. 자원도 그리 많이 잡아먹지 않고요. 하지만 브라우저 같이 무거운 걸 켜면 느려집니다.

QEMU 위에 Windows XP

드디어 이 글의 제목을 실현할 차례입니다. 터미널에서 qemu를 설치하고 PC에서 미리 준비해온 디스크 이미지로 부팅하면…

짠.


덧: 이 글을 올리기 직전에 알게 된 건데, 이제 OpenWrt의 procd가 runc 역할을 할 수 있게 됐다고 합니다. (원문) 서드 파티 패키지 없이도 컨테이너를 돌릴 수 있다니 좀 신기하네요.


  1. 도커를 본격적으로 사용할 거라면 CONFIG_DOCKER_KERNEL_OPTIONS 등도 켜주면 좋겠지만, 가상화에 꼭 필요한 커널 옵션은 이미 켜져있어서 그런지, 추가 옵션을 주지 않아도 제 목적에는 충분했습니다. ↩︎

  2. 좋은 정리글이 있어서 링크를 달아둡니다. ↩︎