오늘 github 의 trending repository 를 보다가 신박한 프로젝트를 발견했습니다.

바로 docker 로 OSX를 돌리는 Docker-OSX 인데요.

terminal 뿐만 아니라 X11 packet 을 forwarding 해주므로 XCode 같은 Desktop 앱도 Windows 에서 Xming 같은 X Windows Server 를 설치하면 실행할 수 있습니다.


설치

QEMU 를 사용하므로 BIOS 에서 가상화를 사용하도록 설정한 후에 재부팅을 해줍니다.

Host OS 에 관련 패키지를 먼저 설치해야 합니다.

$ sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager
BASH


RHEL이나 CentOS 는 다음 패키지를 설치하면 됩니다.

$ sudo yum install libvirt qemu-kvm
BASH


패키지 설치가 끝났으면 systemd 로 서비스를 구동하고 kvm 커널 모듈을 설정합니다.

sudo systemctl enable libvirtd.service
sudo systemctl enable virtlogd.service

echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs

sudo modprobe kvm
BASH

 설정이 끝났으면 시스템을 재부팅해줍니다.

sudo systemctl reboot
BASH


사용

재부팅후에는 OSX  컨테이너를 내려받습니다.

RHEL/CentOS 8 나 fedora 를 사용한다면 docker 대신 podman 을 사용해야 합니다. 아니면 다음 에러가 발생합니다.

docker: Error response from daemon: OCI runtime create failed: this version of runc doesn't work on cgroups v2: unknown.

$ docker pull sickcodes/docker-osx:latest
BASH


위 이미지는 약 17G 정도 크기라 꽤 시간이 걸립니다. GUI 없이 SSH 로 연결해서 command line 에서만 사용하려면 auto  이미지를 pull 받으면 됩니다.

$ docker pull sickcodes/docker-osx:auto
BASH


카탈리나를 구동하려면 latest 태그를 사용하면 됩니다.

$ docker run -it \
    --device /dev/kvm \
    -p 50922:10022 \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -e "DISPLAY=${DISPLAY:-:0.0}" \
    sickcodes/docker-osx:latest
BASH

auto 이미지를 사용할 경우 다음 부분은 주석 처리해야 합니다.


# -v /tmp/.X11-unix:/tmp/.X11-unix \
# -e "DISPLAY=${DISPLAY:-:0.0}" \
BASH


Big Sur 도 구동 가능하며 tag 를 big-sur 로 지정하고 구동합니다.

$ docker run -it \
    --device /dev/kvm \
    -p 50922:10022 \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -e "DISPLAY=${DISPLAY:-:0.0}" \
    sickcodes/docker-osx:big-sur
BASH

gtk 초기화 에러가 나면 다음 명령어로 X Windows 에 연결 가능하도록 설정해 주세요.

xhost +
CODE



컨테이너가 커서 몇 분을 기다려야 구동이 됩니다.


Mac OSX 가 구동되면 "Disk Utility" 를 실행한 후에 200G 로 잡혀 있는 디스크를 지워줍니다. 이 과정에서 작은 용량 디스크는 수정하면 안 됩니다.

"Disk Utility" 를 종료하고 "Reinstall macOS" 를 선택해서 설치해 줍니다.


Ref