Docker-OSX/README.md

237 lines
5.6 KiB
Markdown
Raw Normal View History

2020-06-04 19:01:38 +08:00
# Docker-OSX
2020-06-09 05:24:59 +08:00
#### [Follow @sickcodes on Twitter](https://twitter.com/sickcodes) for v2.0 notification (SSH TUNNELING, XFVB HEADLESS, NFS, FULL AUTO CI/CD)
2020-06-05 02:31:47 +08:00
![Running mac osx in a docker container](/running-mac-inside-docker-qemu.png?raw=true "OSX KVM DOCKER")
Run Mac in a Docker container! Run near native OSX-KVM in Docker! X11 Forwarding!
Author: Sick.Codes https://sick.codes/ & https://twitter.com/sickcodes
2020-06-05 02:38:52 +08:00
2020-06-05 02:31:47 +08:00
Credits: OSX-KVM project among many others: https://github.com/kholia/OSX-KVM/blob/master/CREDITS.md
2020-06-05 06:58:42 +08:00
Docker Hub: https://hub.docker.com/r/sickcodes/docker-osx
2020-06-05 11:49:15 +08:00
Pull requests, suggestions very welcome!
2020-06-05 02:31:47 +08:00
```
2020-06-05 02:35:57 +08:00
2020-06-05 06:57:16 +08:00
docker pull sickcodes/docker-osx
2020-06-05 02:35:57 +08:00
docker run --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix sickcodes/docker-osx
2020-06-05 02:35:57 +08:00
2020-06-05 05:10:05 +08:00
# press ctrl G if your mouse gets stuck
2020-06-05 12:11:30 +08:00
# scroll down to troubleshooting if you have problems
2020-06-05 11:49:15 +08:00
# need more RAM and SSH on 0.0.0.0:50922?
2020-06-07 14:44:57 +08:00
2020-06-15 21:07:37 +08:00
docker run -e RAM=4 -p 50922:10022 --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix sickcodes/docker-osx:latest
ssh fullname@localhost -p 50922
2020-06-07 14:44:57 +08:00
2020-06-05 05:10:05 +08:00
```
2020-06-05 09:57:01 +08:00
# Requirements: KVM on the host
2020-06-05 08:27:49 +08:00
Need to turn on hardware virtualization in your BIOS, very easy to do.
Then have QEMU on the host if you haven't already:
```
# ARCH
sudo pacman -S qemu libvirt dnsmasq virt-manager bridge-utils flex bison ebtables edk2-ovmf
# UBUNTU DEBIAN
sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager
# CENTOS RHEL FEDORA
sudo yum install libvirt qemu-kvm -y
# then run
sudo systemctl enable libvirtd.service
sudo systemctl enable virtlogd.service
sudo modprobe kvm
# reboot
```
2020-06-05 05:10:05 +08:00
# Start the same container later (persistent disk)
2020-06-05 12:11:30 +08:00
This is for when you want to run your system later.
If you don't run this you will have a new image every time.
2020-06-05 05:10:05 +08:00
```
# look at your recent containers and copy the CONTAINER ID
docker ps --all
2020-06-05 05:10:05 +08:00
# docker start the container ID
docker start abc123xyz567
2020-06-05 11:49:15 +08:00
# if you have many containers, you can try automate it with filters like this
# docker ps --all --filter "ancestor=sickcodes/docker-osx"
2020-06-05 11:49:15 +08:00
2020-06-05 02:31:47 +08:00
```
2020-06-05 04:25:29 +08:00
# Additional Boot Instructions
```
# Boot the macOS Base System
# Click Disk Utility
# Erase the biggest disk
# Partition that disk and subtract 1GB and press Apply
# Click Reinstall macOS
```
2020-06-05 09:39:15 +08:00
# Troubleshooting
2020-06-06 02:41:37 +08:00
libgtk permissions denied error, thanks @raoulh + @arsham
2020-06-05 11:49:15 +08:00
```
2020-06-06 02:41:37 +08:00
echo $DISPLAY
# ARCH
sudo pacman -S xorg-xhost
# UBUNTU DEBIAN
sudo apt install x11-xserver-utils
# CENTOS RHEL FEDORA
sudo yum install xorg-x11-server-utils
2020-06-05 20:53:19 +08:00
# then run
xhost +
2020-06-05 11:49:15 +08:00
2020-06-06 02:41:37 +08:00
docker run --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix sickcodes/docker-osx ./OpenCore-Boot.sh
2020-06-05 11:49:15 +08:00
```
2020-06-05 12:11:30 +08:00
Alternative run, thanks @roryrjb
2020-06-05 12:11:30 +08:00
```docker run --privileged --net host --cap-add=ALL -v /tmp/.X11-unix:/tmp/.X11-unix -v /dev:/dev -v /lib/modules:/lib/modules sickcodes/docker-osx```
2020-06-05 09:39:15 +08:00
Check if your hardware virt is on
2020-06-05 09:39:15 +08:00
```egrep -c '(svm|vmx)' /proc/cpuinfo```
Try adding yourself to the docker group
2020-06-05 09:39:15 +08:00
```sudo usermod -aG docker $USER```
Turn on docker daemon
2020-06-05 09:39:15 +08:00
```sudo nohup dockerd &```
2020-06-05 05:42:21 +08:00
2020-06-05 12:11:30 +08:00
Check /dev/kvm permissions
2020-06-05 12:11:30 +08:00
```sudo chmod 666 /dev/kvm```
2020-06-05 05:42:21 +08:00
If you don't have Docker already
```
### Arch (pacman version isn't right at time of writing)
wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.5.tgz
tar -xzvf docker-*.tgz
sudo cp docker/* /usr/bin/
sudo dockerd &
sudo groupadd docker
sudo usermod -aG docker $USER
# run docker later
sudo nohup dockerd &
### Ubuntu
apt-get remove docker docker-engine docker.io containerd runc -y
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update -y
apt-get install docker-ce docker-ce-cli containerd.io -y
2020-06-05 09:39:15 +08:00
sudo dockerd &
sudo groupadd docker
sudo usermod -aG docker $USER
sudo nohup dockerd &
2020-06-05 05:42:21 +08:00
```
If you have no internet connectivity from the VM, you are using bridge
networking, and you are running Fedora:
```
# Set the docker0 bridge to the trusted zone
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
```
2020-06-05 05:23:16 +08:00
# Backup the disk
your image will be stored in:
/var/lib/docker/overlay2/...../arch/OSX-KVM/home/arch/OSX-KVM/mac_hdd_ng.img
```
2020-06-15 21:07:37 +08:00
# fast way
sudo find /var/lib/docker -size +10G | grep mac_hdd_ng.img
# note the container id
docker ps
2020-06-05 05:23:16 +08:00
# find your container's root folder
2020-06-05 05:23:16 +08:00
docker inspect $(docker ps -q --all --filter "ancestor=docker-osx") | grep UpperDir
# In the folder from the above command, your image is inside ./home/arch/OSX-KVM/mac_hdd_ng.img
# then sudo cut it somewhere. Don't do it while the container is running as you might lose data.
2020-06-05 05:23:16 +08:00
```
2020-06-05 05:10:05 +08:00
# Wipe old images
```
2020-06-05 05:23:16 +08:00
2020-06-05 05:10:05 +08:00
# WARNING deletes all old images, but saves disk space if you make too many containers
2020-06-05 05:23:16 +08:00
2020-06-05 05:10:05 +08:00
docker system prune --all
docker image prune --all
```
2020-06-05 02:31:47 +08:00
# Instant OSX-KVM in a BOX!
This Dockerfile automates the installation of OSX-KVM inside a docker container.
It will build a Catalina Disk with up to 200GB of space.
2020-06-05 02:31:47 +08:00
You can change the size and version using build arguments (see below).
This file builds on top of the work done by Dhiru Kholia and many others on the OSX-KVM project.
# Custom Build
```
docker build -t docker-osx:latest \
--build-arg VERSION=10.14.6 \
--build-arg SIZE=200G
docker run \
-e RAM=4 \
-e SMP=4 \
-e CORES=4 \
-e EXTRA='-usb -device usb-host,hostbus=1,hostaddr=8' \
-e INTERNAL_SSH_PORT=23 \
--privileged -v /tmp/.X11-unix:/tmp/.X11-unix docker-osx:latest
2020-06-05 02:31:47 +08:00
```
## Todo:
```
# persistent disk with least amount of pre-build errands.
2020-06-05 20:53:19 +08:00
```