|
|
@ -1,18 +1,34 @@
|
|
|
|
# Docker-OSX
|
|
|
|
# Docker-OSX
|
|
|
|
#### [Follow @sickcodes on Twitter](https://twitter.com/sickcodes) for v2.0 notification (SSH TUNNELING, XFVB HEADLESS, NFS, FULL AUTO CI/CD)
|
|
|
|
## [Follow @sickcodes on Twitter](https://twitter.com/sickcodes)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### V2.5
|
|
|
|
|
|
|
|
# Features In Docker-OSX v2.5
|
|
|
|
|
|
|
|
- CI/CD weaponization thru vnc and xdotool
|
|
|
|
|
|
|
|
- OSX-KVM
|
|
|
|
|
|
|
|
- X11 Forwarding
|
|
|
|
|
|
|
|
- SSH on localhost:50922
|
|
|
|
|
|
|
|
- QEMU
|
|
|
|
|
|
|
|
- VNC on localhost:8888 [vnc version is inside a separate directory](https://github.com/sickcodes/Docker-OSX/blob/master/vnc-version/Dockerfile)
|
|
|
|
|
|
|
|
- Create an ARMY using `docker commit`
|
|
|
|
|
|
|
|
- XFVB HEADLESS (use vnc)
|
|
|
|
|
|
|
|
|
|
|
|
![Running mac osx in a docker container](/running-mac-inside-docker-qemu.png?raw=true "OSX KVM DOCKER")
|
|
|
|
![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!
|
|
|
|
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
|
|
|
|
Author: Sick.Codes https://sick.codes/ & https://twitter.com/sickcodes
|
|
|
|
|
|
|
|
|
|
|
|
Credits: OSX-KVM project among many others: https://github.com/kholia/OSX-KVM/blob/master/CREDITS.md
|
|
|
|
Based: https://github.com/kholia/OSX-KVM && the great guy [@kholia](https://twitter.com/kholia)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Credits: https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Upstream Credits: OSX-KVM project among many others: https://github.com/kholia/OSX-KVM/blob/master/CREDITS.md
|
|
|
|
|
|
|
|
|
|
|
|
Docker Hub: https://hub.docker.com/r/sickcodes/docker-osx
|
|
|
|
Docker Hub: https://hub.docker.com/r/sickcodes/docker-osx
|
|
|
|
|
|
|
|
|
|
|
|
Pull requests, suggestions very welcome!
|
|
|
|
Pull requests, suggestions very welcome!
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```bash
|
|
|
|
|
|
|
|
|
|
|
|
docker pull sickcodes/docker-osx
|
|
|
|
docker pull sickcodes/docker-osx
|
|
|
|
|
|
|
|
|
|
|
@ -35,9 +51,9 @@ ssh fullname@localhost -p 50922
|
|
|
|
Need to turn on hardware virtualization in your BIOS, very easy to do.
|
|
|
|
Need to turn on hardware virtualization in your BIOS, very easy to do.
|
|
|
|
|
|
|
|
|
|
|
|
Then have QEMU on the host if you haven't already:
|
|
|
|
Then have QEMU on the host if you haven't already:
|
|
|
|
```
|
|
|
|
```bash
|
|
|
|
# ARCH
|
|
|
|
# ARCH
|
|
|
|
sudo pacman -S qemu libvirt dnsmasq virt-manager bridge-utils flex bison ebtables edk2-ovmf
|
|
|
|
sudo pacman -S qemu libvirt dnsmasq virt-manager bridge-utils flex bison iptables-nft edk2-ovmf
|
|
|
|
|
|
|
|
|
|
|
|
# UBUNTU DEBIAN
|
|
|
|
# UBUNTU DEBIAN
|
|
|
|
sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager
|
|
|
|
sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager
|
|
|
@ -60,7 +76,7 @@ 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.
|
|
|
|
If you don't run this you will have a new image every time.
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```bash
|
|
|
|
# look at your recent containers and copy the CONTAINER ID
|
|
|
|
# look at your recent containers and copy the CONTAINER ID
|
|
|
|
docker ps --all
|
|
|
|
docker ps --all
|
|
|
|
|
|
|
|
|
|
|
@ -74,34 +90,32 @@ docker start abc123xyz567
|
|
|
|
|
|
|
|
|
|
|
|
# Additional Boot Instructions
|
|
|
|
# Additional Boot Instructions
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
- Boot the macOS Base System
|
|
|
|
|
|
|
|
|
|
|
|
# Boot the macOS Base System
|
|
|
|
- Click Disk Utility
|
|
|
|
|
|
|
|
|
|
|
|
# Click Disk Utility
|
|
|
|
- Erase the BIGGEST disk (around 200gb default), DO NOT MODIFY THE SMALLER DISKS.
|
|
|
|
|
|
|
|
|
|
|
|
# Erase the biggest disk (around 200gb default), DO NOT MODIFY THE SMALLER DISKS.
|
|
|
|
- Click Reinstall macOS
|
|
|
|
|
|
|
|
|
|
|
|
# Click Reinstall macOS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Creating images:
|
|
|
|
## Creating images:
|
|
|
|
```
|
|
|
|
```bash
|
|
|
|
# You can create an image of a already configured and setup container. This allows you to effectively duplicate a system.
|
|
|
|
# You can create an image of a already configured and setup container. This allows you to effectively duplicate a system.
|
|
|
|
# To do this, run the following commands
|
|
|
|
# To do this, run the following commands
|
|
|
|
|
|
|
|
|
|
|
|
$ docker ps --all #make note of your container id
|
|
|
|
docker ps --all #make note of your container id
|
|
|
|
$ docker commit containerID newImageName
|
|
|
|
docker commit containerID newImageName
|
|
|
|
|
|
|
|
|
|
|
|
# To run this image do the following
|
|
|
|
# To run this image do the following
|
|
|
|
$ docker run --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix newImageName
|
|
|
|
docker run --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix newImageName
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
# Troubleshooting
|
|
|
|
# Troubleshooting
|
|
|
|
|
|
|
|
|
|
|
|
libgtk permissions denied error, thanks @raoulh + @arsham
|
|
|
|
libgtk permissions denied error, thanks @raoulh + @arsham
|
|
|
|
```
|
|
|
|
```bash
|
|
|
|
echo $DISPLAY
|
|
|
|
echo $DISPLAY
|
|
|
|
|
|
|
|
|
|
|
|
# ARCH
|
|
|
|
# ARCH
|
|
|
@ -121,38 +135,46 @@ docker run --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X1
|
|
|
|
|
|
|
|
|
|
|
|
Alternative run, thanks @roryrjb
|
|
|
|
Alternative run, thanks @roryrjb
|
|
|
|
|
|
|
|
|
|
|
|
```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```
|
|
|
|
```bash
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Check if your hardware virt is on
|
|
|
|
Check if your hardware virt is on
|
|
|
|
|
|
|
|
|
|
|
|
```egrep -c '(svm|vmx)' /proc/cpuinfo```
|
|
|
|
```bash
|
|
|
|
|
|
|
|
egrep -c '(svm|vmx)' /proc/cpuinfo
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Try adding yourself to the docker group
|
|
|
|
Try adding yourself to the docker group
|
|
|
|
|
|
|
|
|
|
|
|
```sudo usermod -aG docker $USER```
|
|
|
|
```bash
|
|
|
|
|
|
|
|
sudo usermod -aG docker "${USER}"
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Turn on docker daemon
|
|
|
|
Turn on docker daemon
|
|
|
|
|
|
|
|
|
|
|
|
```sudo nohup dockerd &```
|
|
|
|
```bash
|
|
|
|
|
|
|
|
sudo dockerd
|
|
|
|
|
|
|
|
# or daemonize it
|
|
|
|
|
|
|
|
sudo nohup dockerd &
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Check /dev/kvm permissions
|
|
|
|
Check /dev/kvm permissions
|
|
|
|
|
|
|
|
|
|
|
|
```sudo chmod 666 /dev/kvm```
|
|
|
|
```bash
|
|
|
|
|
|
|
|
sudo chmod 666 /dev/kvm
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
If you don't have Docker already
|
|
|
|
If you don't have Docker already
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```bash
|
|
|
|
### Arch (pacman version isn't right at time of writing)
|
|
|
|
### 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
|
|
|
|
wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.5.tgz
|
|
|
|
tar -xzvf docker-*.tgz
|
|
|
|
tar -xzvf docker-19.03.5.tgz
|
|
|
|
sudo cp docker/* /usr/bin/
|
|
|
|
sudo cp docker/* /usr/bin/
|
|
|
|
sudo dockerd &
|
|
|
|
|
|
|
|
sudo groupadd docker
|
|
|
|
sudo groupadd docker
|
|
|
|
sudo usermod -aG docker $USER
|
|
|
|
sudo usermod -aG docker "${USER}"
|
|
|
|
# run docker later
|
|
|
|
|
|
|
|
sudo nohup dockerd &
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Ubuntu
|
|
|
|
### Ubuntu
|
|
|
|
|
|
|
|
|
|
|
@ -163,56 +185,59 @@ apt-key fingerprint 0EBFCD88
|
|
|
|
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
|
|
|
|
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
|
|
|
|
apt-get update -y
|
|
|
|
apt-get update -y
|
|
|
|
apt-get install docker-ce docker-ce-cli containerd.io -y
|
|
|
|
apt-get install docker-ce docker-ce-cli containerd.io -y
|
|
|
|
sudo dockerd &
|
|
|
|
|
|
|
|
sudo groupadd docker
|
|
|
|
sudo groupadd docker
|
|
|
|
sudo usermod -aG docker $USER
|
|
|
|
sudo usermod -aG docker "${USER}"
|
|
|
|
sudo nohup dockerd &
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
If you have no internet connectivity from the VM, you are using bridge
|
|
|
|
If you have no internet connectivity from the VM, you are using bridge
|
|
|
|
networking, and you are running Fedora:
|
|
|
|
networking, and you are running Fedora:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```bash
|
|
|
|
# Set the docker0 bridge to the trusted zone
|
|
|
|
# Set the docker0 bridge to the trusted zone
|
|
|
|
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
|
|
|
|
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
|
|
|
|
sudo firewall-cmd --reload
|
|
|
|
sudo firewall-cmd --reload
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
# Backup the disk
|
|
|
|
# Backup the disk (Where's my disk?)
|
|
|
|
|
|
|
|
|
|
|
|
your image will be stored in:
|
|
|
|
You can use `docker cp`
|
|
|
|
|
|
|
|
|
|
|
|
/var/lib/docker/overlay2/...../arch/OSX-KVM/home/arch/OSX-KVM/mac_hdd_ng.img
|
|
|
|
```bash
|
|
|
|
|
|
|
|
# docker copy your image OUT of your container (warning, double disk space)
|
|
|
|
|
|
|
|
docker cp oldcontainerid:/home/arch/OSX-KVM/mac_hdd_ng.img .
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Or if you lost your container, find it with this:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# fast way
|
|
|
|
# fast way
|
|
|
|
sudo find /var/lib/docker -size +10G | grep mac_hdd_ng.img
|
|
|
|
sudo find /var/lib/docker -size +10G | grep mac_hdd_ng.img
|
|
|
|
|
|
|
|
|
|
|
|
# note the container id
|
|
|
|
# you can move (mv) it somewhere
|
|
|
|
docker ps
|
|
|
|
sudo mv somedir/mac_hdd_ng.img .
|
|
|
|
|
|
|
|
|
|
|
|
# find your container's root folder
|
|
|
|
|
|
|
|
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
|
|
|
|
# start a new container
|
|
|
|
|
|
|
|
# get the new container id
|
|
|
|
|
|
|
|
docker ps
|
|
|
|
|
|
|
|
|
|
|
|
# then sudo cut it somewhere. Don't do it while the container is running as you might lose data.
|
|
|
|
# docker cp INTO new container
|
|
|
|
|
|
|
|
docker cp ./mac_hdd_ng.img newcontainerid:/home/arch/OSX-KVM/mac_hdd_ng.img
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
# Wipe old images
|
|
|
|
# DESTROY: Wipe old images
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# WARNING deletes all old images, but saves disk space if you make too many containers
|
|
|
|
# WARNING deletes all old images, but saves disk space if you make too many containers
|
|
|
|
|
|
|
|
# The following command will make your containers RIP
|
|
|
|
docker system prune --all
|
|
|
|
docker system prune --all
|
|
|
|
docker image prune --all
|
|
|
|
docker image prune --all
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Instant OSX-KVM in a BOX!
|
|
|
|
# INSTANT OSX-KVM in a BOX!
|
|
|
|
This Dockerfile automates the installation of OSX-KVM inside a docker container.
|
|
|
|
This Dockerfile automates the installation of OSX-KVM inside a docker container.
|
|
|
|
|
|
|
|
|
|
|
|
It will build a Catalina Disk with up to 200GB of space.
|
|
|
|
It will build a Catalina Disk with up to 200GB of space.
|
|
|
@ -223,12 +248,13 @@ This file builds on top of the work done by Dhiru Kholia and many others on the
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Custom Build
|
|
|
|
# Custom Build
|
|
|
|
```
|
|
|
|
```bash
|
|
|
|
|
|
|
|
|
|
|
|
docker build -t docker-osx:latest \
|
|
|
|
docker build -t docker-osx:latest \
|
|
|
|
--build-arg VERSION=10.14.6 \
|
|
|
|
--build-arg VERSION=10.14.6 \
|
|
|
|
--build-arg SIZE=200G
|
|
|
|
--build-arg SIZE=200G
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
docker run \
|
|
|
|
docker run \
|
|
|
|
-e RAM=4 \
|
|
|
|
-e RAM=4 \
|
|
|
|
-e SMP=4 \
|
|
|
|
-e SMP=4 \
|
|
|
@ -237,10 +263,11 @@ docker run \
|
|
|
|
-e INTERNAL_SSH_PORT=23 \
|
|
|
|
-e INTERNAL_SSH_PORT=23 \
|
|
|
|
--privileged -v /tmp/.X11-unix:/tmp/.X11-unix docker-osx:latest
|
|
|
|
--privileged -v /tmp/.X11-unix:/tmp/.X11-unix docker-osx:latest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Todo:
|
|
|
|
## Todo:
|
|
|
|
```
|
|
|
|
```
|
|
|
|
# persistent disk with least amount of pre-build errands.
|
|
|
|
- GPU Acceleration (Hackintosh? Passthru bus id of cards? AMD Vega? Nvidia-SMI?)
|
|
|
|
|
|
|
|
- Virt-manager
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|